remotes/origin/setup
ArturBaybulatov 10 years ago
commit 29b9550dff
  1. 2
      api/views.py
  2. 3
      archilance/settings/base.py
  3. 2
      assets/js/chat.js
  4. 73
      projects/migrations/0038_auto_20160706_1249.py
  5. 11
      projects/models.py
  6. 92
      projects/templates/portfolio_create.html
  7. 1
      specializations/views.py
  8. 582
      users/templates/contractor_chat.html
  9. 205
      users/templates/contractor_profile.html
  10. 312
      users/templates/customer_chat.html
  11. 82
      users/templates/portfolio_create_form.html
  12. 90
      users/templates/worksell_create_form.html
  13. 4
      users/urls.py
  14. 21
      users/views.py
  15. 13
      work_sell/forms.py
  16. 67
      work_sell/migrations/0008_auto_20160706_1249.py
  17. 56
      work_sell/migrations/0009_auto_20160707_1315.py
  18. 27
      work_sell/migrations/0010_auto_20160707_1401.py
  19. 20
      work_sell/models.py
  20. 55
      work_sell/templates/worksell_create.html
  21. 102
      work_sell/templates/worksell_edit.html
  22. 111
      work_sell/templates/worksells_list.html
  23. 6
      work_sell/urls.py
  24. 47
      work_sell/views.py

@ -33,7 +33,7 @@ class MessageViewSet(ModelViewSet):
queryset = Message.objects.all()
serializer_class = MessageSerializer
filter_class = MessageFilterSet
def get_queryset(self):
queryset = Message.objects.all()
search_param = self.request.query_params.get('operand', None)

@ -40,12 +40,13 @@ THIRD_PARTY_APPS = [
LOCAL_APPS = [
'api',
'common',
'work_sell',
'archilance',
'projects',
'specializations',
'users',
'reviews',
'work_sell',
'chat',
]

@ -109,6 +109,8 @@ $(function () {
dataType: 'json',
success: function (json) {
$.each(json.results, function (i, v) {
console.log(v.sender.id);
console.log(v.recipent.id);
inbox.innerHTML += '<div class="col-lg-12 insetCommChat"><div class="topCommChat">' +
'<p class="nameCommChat">Иванов</p> <span>13.0.2016</span></div>' +
'<p class="textCommChat">' + v.text + '</p></div>';

@ -0,0 +1,73 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.6 on 2016-07-06 09:49
from __future__ import unicode_literals
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import mptt.fields
class Migration(migrations.Migration):
dependencies = [
('common', '0003_mainpage'),
('specializations', '0002_auto_20160602_1203'),
('projects', '0037_auto_20160704_1444'),
]
operations = [
migrations.AddField(
model_name='portfolio',
name='budget',
field=models.DecimalField(decimal_places=0, default=0, max_digits=10, null=True),
),
migrations.AddField(
model_name='portfolio',
name='budget_by_agreement',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='portfolio',
name='building_classification',
field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='portfolios', to='projects.BuildingClassfication'),
preserve_default=False,
),
migrations.AddField(
model_name='portfolio',
name='construction_type',
field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='portfolios', to='projects.ConstructionType'),
preserve_default=False,
),
migrations.AddField(
model_name='portfolio',
name='location',
field=mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='portfolios', to='common.Location'),
),
migrations.AddField(
model_name='portfolio',
name='specialization',
field=mptt.fields.TreeForeignKey(default=5, on_delete=django.db.models.deletion.CASCADE, related_name='portfolios', to='specializations.Specialization'),
preserve_default=False,
),
migrations.AddField(
model_name='portfolio',
name='term',
field=models.IntegerField(default=0),
),
migrations.AddField(
model_name='portfolio',
name='term_type',
field=models.CharField(choices=[('project', 'За проект'), ('hour', 'За час'), ('day', 'За день'), ('month', 'За месяц')], default='hour', max_length=20),
),
migrations.AddField(
model_name='portfolio',
name='worksell',
field=models.BooleanField(default=False),
),
migrations.AlterField(
model_name='portfolio',
name='user',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='portfolios', to=settings.AUTH_USER_MODEL),
),
]

@ -180,7 +180,16 @@ class Candidate(models.Model):
class Portfolio(models.Model):
description = models.TextField()
name = models.CharField(max_length=255)
user = models.ForeignKey(User, related_name='portfolio')
budget = models.DecimalField(max_digits=10, decimal_places=0, default=0, null=True)
budget_by_agreement = models.BooleanField(default=False)
specialization = TreeForeignKey(Specialization, related_name='portfolios')
term = models.IntegerField(default=0)
term_type = models.CharField(max_length=20, choices=TERMS, default='hour')
building_classification = models.ForeignKey(BuildingClassfication, related_name='portfolios')
construction_type = models.ForeignKey(ConstructionType, related_name='portfolios')
location = TreeForeignKey('common.Location', related_name='portfolios', null=True, blank=True)
worksell = models.BooleanField(default=False)
user = models.ForeignKey(User, related_name='portfolios')
def __str__(self):
return self.name

@ -0,0 +1,92 @@
{% load common_tags %}
<div class="modal-body">
<form method="post">{% csrf_token %}
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Название заказа <span style="color: red">{{ worksell_form.name.errors.as_text }}</span></p>
<input type="text" class="box-sizing" name="{{ worksell_form.name.html_name }}"
value="{{ worksell_form.name.value }}">
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Подробно опишите задание <span style="color: red">{{ worksell_form.text.errors.as_text }}</span></p>
<textarea name="{{ worksell_form.text.html_name }}" id="text-new">{{ worksell_form.text.value }}</textarea>
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<select id="realtyBuildingClassificationId" class="selectpicker"
name="{{ realty_form.building_classification.html_name }}">
{% for c in realty_form.building_classification.field.queryset %}
<option value="{{ c.pk }}"
{% if realty_form.building_classification.value|int == c.pk %}selected="selected"{% endif %}>{{ c.name }}</option>
{% endfor %}
</select>
</div>
<div class="polsF1 disTab">
<div class="col-lg-3">
<input type='hidden' class="-spec-select -spec-select-level-1" style="width: 100%">
</div>
<div class="col-lg-3">
<input type='hidden' class="-spec-select -spec-select-level-2" style="width: 100%">
</div>
<div class="col-lg-3">
<input type='hidden' class="-spec-select -spec-select-level-3" style="width: 100%">
</div>
<div class="col-lg-3">
<input type='hidden' class="-spec-select -spec-select-level-4" style="width: 100%">
</div>
<input type="hidden" id="chosenSpecId" name="{{ worksell_form.specialization.html_name }}"
value="{{ worksell_form.specialization.value }}">
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Бюджет{{ worksell_form.budget.errors.as_text }}</p>
<div class="row">
<div class="col-lg-8">
<input type="text" class="box-sizing" name="{{ form.budget.html_name }}" value="{{ form.budget.value }}">
</div>
<div class="col-lg-4">
{{ worksell_form.budget_type }}
</div>
</div>
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Срок выаолнения{{ worksell_form.budget.errors.as_text }}</p>
<div class="row">
<div class="col-lg-8">
<input type="text" class="box-sizing" name="{{ form.budget.html_name }}" value="{{ form.budget.value }}">
</div>
<div class="col-lg-4">
{{ worksell_form.term_type }}
</div>
</div>
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Бюджет{{ worksell_form.budget.errors.as_text }}</p>
<select id="realtyConstructionTypeId" class="selectpicker" name="{{ worksell_form.construction_type.html_name }}">
{% for t in realty_form.construction_type.field.queryset %}
<option value="{{ t.pk }}"
{% if realty_form.construction_type.value|int == t.pk %}selected="selected"{% endif %}>{{ t.name }}</option>
{% endfor %}
</select>
</div>
<div class="searchF1 polsF1 polsFF links-filter">
<input class="btn-submit-link" type="submit" value="Разместить проект">
</div>
</form>
</div>
<div class="modal-footer">
</div>

@ -55,4 +55,5 @@ class JSONResponseMixin(object):
class JSONView(JSONResponseMixin, TemplateView):
def render_to_response(self, context, **response_kwargs):
context = {'test': 'data'}
return self.render_to_json_response(context, **response_kwargs)

@ -1,582 +0,0 @@
{% 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="#tab2" 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="tab2">
<div class="col-lg-3 wrMessages">
<div class="messageBlock box-sizing disTab">
<p>Контакты</p>
<div class="message messd">
<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>
<span>17</span>
<a href="javascript:void(0)" class="deleteMess">
Удалить контакт
</a>
</div>
<div class="message messd">
<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>
<span>17</span>
<a href="javascript:void(0)" class="deleteMess">
Удалить контакт
</a>
</div>
<div class="message messd">
<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>
<span>17</span>
<a href="javascript:void(0)" class="deleteMess">
Удалить контакт
</a>
</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 wrTAB">
<div class="textAreaBlock2 box-sizing disTab">
<p>Для заметок</p>
<textarea id="chat2" ></textarea>
<a href="javascript:void()">сохранить</a>
</div>
<div class="linkChatB box-sizing disTab">
<a href="javascript:void(0)">предложить проект</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 %}

@ -4,49 +4,48 @@
{% block content %}
{% include 'partials/header.html' %}
<div class="container mainScore mainBlock2">
<div class="row">
<div class="col-lg-12">
<div class="col-lg-3 divCol3">
<div class="avatar">
<div class="avatarInset">
<img src="{% static 'img/profile.jpg' %}" alt="profile-image">
</div>
<div class="avatarInset">
<img src="{% static 'img/profile.jpg' %}" alt="profile-image">
</div>
</div>
<div class="menuUser disTab">
<ul>
{% if contractor.pk == user.pk %}
<li class="icon_um1">
<a href="{% url 'users:contractor-edit' pk=contractor.pk %}">
редактировать профиль
</a>
<span></span>
</li>
<li class="icon_um1">
<a href="{% url 'users:contractor-edit' pk=contractor.pk %}">
редактировать профиль
</a>
<span></span>
</li>
{% endif %}
{% if contractor.pk != user.id %}
<li class="icon_um2">
<a href="javascript:void(0)">
пригласить в группу
</a>
<span></span>
</li>
<li class="icon_um2">
<a href="javascript:void(0)">
пригласить в группу
</a>
<span></span>
</li>
<li class="icon_um3">
<a href="javascript:void(0)">
написать сообщение
</a>
<span></span>
</li>
<li class="icon_um3">
<a href="javascript:void(0)">
написать сообщение
</a>
<span></span>
</li>
<li class="icon_um4">
<a href="javascript:void(0)">
предложить заказ
</a>
<span></span>
</li>
<li class="icon_um4">
<a href="javascript:void(0)">
предложить заказ
</a>
<span></span>
</li>
{% endif %}
</ul>
@ -65,7 +64,7 @@
<a href="javascript:void(0)" class="showCon">показать контакты</a>
</div>
<div class="col-lg-4">
{% load specializtions_tags %}
{% load specializtions_tags %}
{% specialization_widget contractor.pk %}
</div>
<div class="col-lg-4">
@ -73,10 +72,10 @@
{% ratings_widget contractor.pk %}
{% if contractor.cro %}
<div class="sroUser">
<div class="iconSRO"></div>
<p>Есть допуск СРО</p>
</div>
<div class="sroUser">
<div class="iconSRO"></div>
<p>Есть допуск СРО</p>
</div>
{% endif %}
@ -100,20 +99,35 @@
</ul>
</div>
</div>
<div class="tab-content">
<div id="tab11" class="tab-pane fade in active">
<div class="col-lg-9">
<p class="addWork">
<a href="#">Добавить работу</a>
<a href="#" data-toggle="modal" data-target="#portfolio-modal">Добавить работу</a>
</p>
</div>
<div id="portfolio-modal" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×
</button>
<h4 class="modal-title" >Добавить портфолио</h4>
</div>
{% include 'portfolio_create_form.html' %}
</div>
</div>
</div>
<div class="galleryWork2 disTab">
{% for p in user.portfolio.all %}
<div class="col-lg-4">
<div class="insetCol box-sizing disTab">
<div class="imgGal" style="background:rgba(0, 0, 0, 0) url('/media/{{ p.get_cover }}') no-repeat scroll center center / cover ;">
<div class="imgGal"
style="background:rgba(0, 0, 0, 0) url('/media/{{ p.get_cover }}') no-repeat scroll center center / cover ;">
<div class="imgFigure"></div>
</div>
</div>
@ -132,45 +146,60 @@
{% endfor %}
</div>
<div class="col-lg-9 col-lg-offset-3">
<div class="linkElse">
<a href="javascript:void(0)" class="showElse">показать еще</a>
</div>
</div>
</div>
<div id="tab12" class="tab-pane fade">
<div class="col-lg-9">
<p class="addWork">
<a href="#">Добавить проект</a>
<a href="#" data-toggle="modal" data-target="#worksell-modal">Добавить проект</a>
</p>
</div>
<div id="worksell-modal" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×
</button>
<h4 class="modal-title">Добавить готовую работу</h4>
</div>
{% include 'worksell_create_form.html' %}
</div>
</div>
</div>
<div class="galleryWork2 disTab">
{% for ws in user.work_sell.all %}
<div class="col-lg-4">
<div class="insetCol box-sizing disTab">
<div class="imgGal" style="background:rgba(0, 0, 0, 0) url('/media/{{ ws.img }}') no-repeat scroll center center / cover ;">
<div class="imgFigure"></div>
</div>
<div class="cenaImg box-sizing">
<div class="cenaImgInset">
{{ ws.price }} <i class="fa fa-rub"></i>
<div class="insetCol box-sizing disTab">
<div class="imgGal"
style="background:rgba(0, 0, 0, 0) url('/media/{{ ws.img }}') no-repeat scroll center center / cover ;">
<div class="imgFigure"></div>
</div>
</div>
</div>
<div class="insetCol2 box-sizing disTab">
<p>{{ ws }}</p>
<div class="buttonsImg" disTab>
<div class="insetBI insetBI1">
<i class="fa fa-pencil"></i>
<div class="cenaImg box-sizing">
<div class="cenaImgInset">
{{ ws.budget }} <i class="fa fa-rub"></i>
</div>
</div>
<div class="insetBI insetBI2">
<i class="fa fa-times"></i>
</div>
<div class="insetCol2 box-sizing disTab">
<p>{{ ws }}</p>
<div class="buttonsImg" disTab>
<div class="insetBI insetBI1">
<a href="{% url 'work_sell:edit' ws.pk %}">
<i class="fa fa-pencil"></i>
</a>
</div>
<div class="insetBI insetBI2">
<i class="fa fa-times"></i>
</div>
</div>
</div>
</div>
</div>
{% endfor %}
</div>
<div class="col-lg-9 col-lg-offset-3">
@ -179,7 +208,7 @@
</div>
</div>
</div>
<div id="tab13" class="tab-pane fade">
<div class="col-lg-9 resume">
<div class="upload2 up-l1">
@ -252,7 +281,7 @@
<p>Загрузить файл</p>
</div>
<div class="galleryWork2 gal-iss disTab">
<div class="col-lg-4">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
@ -270,7 +299,7 @@
</div>
</div>
</div>
<div class="col-lg-4">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
@ -288,7 +317,7 @@
</div>
</div>
</div>
</div>
</div>
<div class="inset-gp">
@ -298,7 +327,7 @@
<p>Загрузить файл</p>
</div>
<div class="galleryWork2 gal-iss disTab">
<div class="col-lg-4">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
@ -316,7 +345,7 @@
</div>
</div>
</div>
<div class="col-lg-4">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
@ -334,19 +363,19 @@
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="tab14" class="tab-pane fade">
<div class="new-comm-44">
<div class="col-lg-12">
<p class="nameComm">
<a href="#">Иванов Петр Иванович</a>
<a href="#">Иванов Петр Иванович</a>
</p>
<span class="dateComm44">
Безопасная сделка
@ -360,13 +389,14 @@
<a href="#">положительный отзыв</a>
</div>
<p class="textComm44">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo. Proin sodales pulvinar tempor. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam fermentum, nulla luctus pharetra vulputate, felis tellus mollis orci, sed rhoncus sapien nunc eget odio.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum
</p>
</div>
</div>
</div>
</div>
<div>
{% include 'partials/footer.html' %}
</div>
@ -374,3 +404,40 @@
</div>
</div>
{% endblock %}
{% block js_block %}
<script type="text/javascript">
$(function(){
$('#worksell-add-form').on('submit', function(e){
e.preventDefault();
var dataSerializer = $(this).serialize();
$.ajax({
url: '/work_sell/test/',
method: 'POST',
data: dataSerializer,
dataType: 'json',
success: function(data){
if (data.status == 'ok') {
location.reload();
}
},
error: function(jqXHR, exception){
console.log(jqXHR.statusCode);
}
})
});
$('#portfolio-add-form').on('submit', function(e){
e.preventDefault();
var dataSerializer = $(this).serialize();
alert(dataSerializer);
});
});
</script>
{% endblock %}

@ -1,312 +0,0 @@
{% 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>
</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>
<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="{% static '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>
</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>
</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</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</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 %}

@ -0,0 +1,82 @@
{% load common_tags %}
<div class="modal-body">
<form method="post" id="portfolio-add-form">{% csrf_token %}
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Название заказа <span style="color: red">{{ worksell_form.name.errors.as_text }}</span></p>
<input type="text" class="box-sizing" name="{{ worksell_form.name.html_name }}"
value="{{ worksell_form.name.value }}">
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Подробно опишите задание <span style="color: red">{{ worksell_form.description.errors.as_text }}</span></p>
<textarea name="{{ worksell_form.description.html_name }}" id="text-new">{{ worksell_form.description.value }}</textarea>
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Специализации</p>
</div>
<div class="col-lg-3">
<input type='hidden' class="-spec-select -spec-select-level-1" style="width: 100%">
</div>
<div class="col-lg-3">
<input type='hidden' class="-spec-select -spec-select-level-2" style="width: 100%">
</div>
<div class="col-lg-3">
<input type='hidden' class="-spec-select -spec-select-level-3" style="width: 100%">
</div>
<div class="col-lg-3">
<input type='hidden' class="-spec-select -spec-select-level-4" style="width: 100%">
</div>
<input type="hidden" id="chosenSpecId" name="{{ worksell_form.specialization.html_name }}"
value="{{ worksell_form.specialization.value }}">
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Бюджет{{ worksell_form.budget.errors.as_text }}</p>
<div class="row">
<div class="col-lg-8">
<input type="text" class="box-sizing" name="{{ form.budget.html_name }}" value="{{ form.budget.value }}">
</div>
<div class="col-lg-4">
{{ worksell_form.budget_type }}
</div>
</div>
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Срок выполнения{{ worksell_form.budget.errors.as_text }}</p>
<div class="row">
<div class="col-lg-8">
<input type="text" class="box-sizing" name="{{ form.budget.html_name }}" value="{{ form.budget.value }}">
</div>
<div class="col-lg-4">
{{ worksell_form.term_type }}
</div>
</div>
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Вид строительства</p>
{{ worksell_form.construction_type}}
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Классификация здания</p>
{{ worksell_form.building_classification}}
</div>
<div class="searchF1 polsF1 polsFF links-filter">
<input class="btn-submit-link" type="submit" value="Разместить проект">
</div>
</form>
</div>
<div class="modal-footer">
</div>

@ -0,0 +1,90 @@
{% load common_tags %}
<div class="modal-body">
<form method="post" id="worksell-add-form">{% csrf_token %}
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Название заказа <span style="color: red">{{ worksell_form.name.errors.as_text }}</span></p>
<input type="text" class="box-sizing" name="{{ worksell_form.name.html_name }}"
value="{{ worksell_form.name.value }}">
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Подробно опишите задание <span style="color: red">{{ worksell_form.description.errors.as_text }}</span></p>
<textarea name="{{ worksell_form.description.html_name }}" id="text-new">{{ worksell_form.description.value }}</textarea>
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Специализации</p>
</div>
<div class="col-lg-3">
<input type='hidden' class="-spec-select -spec-select-level-1" style="width: 100%">
</div>
<div class="col-lg-3">
<input type='hidden' class="-spec-select -spec-select-level-2" style="width: 100%">
</div>
<div class="col-lg-3">
<input type='hidden' class="-spec-select -spec-select-level-3" style="width: 100%">
</div>
<div class="col-lg-3">
<input type='hidden' class="-spec-select -spec-select-level-4" style="width: 100%">
</div>
<input type="hidden" id="chosenSpecId" name="{{ worksell_form.specialization.html_name }}"
value="{{ worksell_form.specialization.value }}">
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Бюджет{{ worksell_form.budget.errors.as_text }}</p>
<div class="row">
<div class="col-lg-8">
<input type="text" class="box-sizing" name="{{ form.budget.html_name }}" value="{{ form.budget.value }}">
</div>
<div class="col-lg-4">
{{ worksell_form.currency}}
</div>
</div>
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Срок выполнения{{ worksell_form.budget.errors.as_text }}</p>
<div class="row">
<div class="col-lg-8">
<input type="text" class="box-sizing" name="{{ form.budget.html_name }}" value="{{ form.budget.value }}">
</div>
<div class="col-lg-4">
{{ worksell_form.term_type }}
</div>
</div>
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Вид строительства</p>
{{ worksell_form.construction_type}}
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Классификация здания</p>
{{ worksell_form.building_classification}}
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<input type="text" name="{{ worksell_form.contractor.html_name }}" value="{{ request.user.pk }}" />
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<input type="file" name="{{ worksell_form.img.html_name }}" >
</div>
<div class="searchF1 polsF1 polsFF links-filter">
<input class="btn-submit-link" type="submit" value="Разместить проект">
</div>
</form>
</div>
<div class="modal-footer">
</div>

@ -12,8 +12,6 @@ from .views import (
CustomerProfileTrashedProjectsView,
ContractorFinancialInfoEdit,
CustomerProfileEditView,
CustomerChat,
ContractorChat,
# UserDetailView,
# UserInfoListView,
UserListView,
@ -38,7 +36,5 @@ urlpatterns = [
# 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'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'),
]

@ -8,11 +8,13 @@ from django.core.urlresolvers import reverse
from archilance.mixins import BaseMixin
from common.utils import get_or_none
from specializations.models import Specialization
from work_sell.forms import WorkSellForm
from .models import User, ContractorFinancialInfo
from .mixins import CheckForUserMixin
from .forms import UserEditForm, ContractorFinancicalInfoForm
class UserListView(ListView):
model = User
template_name = 'users_list.html'
@ -27,9 +29,15 @@ class ContractorListView(ListView):
class ContractorProfileDetailView(DetailView):
model = User
worksell_form_class = WorkSellForm
template_name = 'contractor_profile.html'
context_object_name = 'contractor'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['worksell_form'] = self.worksell_form_class
return context
class ContractorOfficeDetailView(DetailView):
model = User
@ -139,16 +147,3 @@ class ContractorFinancialInfoEdit(CheckForUserMixin, View):
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)

@ -1,9 +1,22 @@
from django import forms
from common.models import Location
from .models import WorkSell
class WorkSellForm(forms.ModelForm):
class Meta:
model = WorkSell
fields = '__all__'
widgets = {
'construction_type': forms.Select(attrs={'class':'selectpicker'}),
'building_classification': forms.Select(attrs={'class':'selectpicker'}),
}
def __init__(self, *args, **kwargs):
# self.request = kwargs.pop('request')
super().__init__(*args, **kwargs)
self.fields['location'].queryset = Location.objects.root_nodes()[0].get_descendants()

@ -0,0 +1,67 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.6 on 2016-07-06 09:49
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
import mptt.fields
class Migration(migrations.Migration):
dependencies = [
('projects', '0038_auto_20160706_1249'),
('common', '0003_mainpage'),
('specializations', '0002_auto_20160602_1203'),
('work_sell', '0007_auto_20160705_1514'),
]
operations = [
migrations.RemoveField(
model_name='worksell',
name='price',
),
migrations.AddField(
model_name='worksell',
name='budget',
field=models.DecimalField(decimal_places=0, default=0, max_digits=10, null=True),
),
migrations.AddField(
model_name='worksell',
name='budget_by_agreement',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='worksell',
name='building_classification',
field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='worksells', to='projects.BuildingClassfication'),
preserve_default=False,
),
migrations.AddField(
model_name='worksell',
name='construction_type',
field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='worksells', to='projects.ConstructionType'),
preserve_default=False,
),
migrations.AddField(
model_name='worksell',
name='location',
field=mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='worksells', to='common.Location'),
),
migrations.AddField(
model_name='worksell',
name='specialization',
field=mptt.fields.TreeForeignKey(default=5, on_delete=django.db.models.deletion.CASCADE, related_name='worksells', to='specializations.Specialization'),
preserve_default=False,
),
migrations.AddField(
model_name='worksell',
name='term',
field=models.IntegerField(default=0),
),
migrations.AddField(
model_name='worksell',
name='term_type',
field=models.CharField(choices=[('project', 'За проект'), ('hour', 'За час'), ('day', 'За день'), ('month', 'За месяц')], default='hour', max_length=20),
),
]

@ -0,0 +1,56 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.6 on 2016-07-07 10:15
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
import mptt.fields
class Migration(migrations.Migration):
dependencies = [
('work_sell', '0008_auto_20160706_1249'),
]
operations = [
migrations.RemoveField(
model_name='worksell',
name='budget_by_agreement',
),
migrations.AddField(
model_name='worksell',
name='currency',
field=models.CharField(blank=True, choices=[('rur', 'RUR'), ('usd', 'USD'), ('eur', 'EUR')], default='rur', max_length=20, null=True),
),
migrations.AlterField(
model_name='worksell',
name='budget',
field=models.DecimalField(blank=True, decimal_places=0, default=0, max_digits=10, null=True),
),
migrations.AlterField(
model_name='worksell',
name='building_classification',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='worksells', to='projects.BuildingClassfication'),
),
migrations.AlterField(
model_name='worksell',
name='construction_type',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='worksells', to='projects.ConstructionType'),
),
migrations.AlterField(
model_name='worksell',
name='specialization',
field=mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='worksells', to='specializations.Specialization'),
),
migrations.AlterField(
model_name='worksell',
name='term',
field=models.IntegerField(blank=True, default=0, null=True),
),
migrations.AlterField(
model_name='worksell',
name='term_type',
field=models.CharField(blank=True, choices=[('project', 'За проект'), ('hour', 'За час'), ('day', 'За день'), ('month', 'За месяц')], default='hour', max_length=20, null=True),
),
]

@ -0,0 +1,27 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.6 on 2016-07-07 11:01
from __future__ import unicode_literals
from django.db import migrations, models
import django.utils.timezone
import sorl.thumbnail.fields
class Migration(migrations.Migration):
dependencies = [
('work_sell', '0009_auto_20160707_1315'),
]
operations = [
migrations.AlterField(
model_name='worksell',
name='created',
field=models.DateTimeField(blank=True, default=django.utils.timezone.now, null=True),
),
migrations.AlterField(
model_name='worksell',
name='img',
field=sorl.thumbnail.fields.ImageField(blank=True, null=True, upload_to='worksell/worksell'),
),
]

@ -1,16 +1,28 @@
from mptt.models import TreeForeignKey
from sorl.thumbnail import ImageField
from django.db import models
from django.utils import timezone
from sorl.thumbnail import ImageField
from users.models import User
from projects.models import BuildingClassfication, ConstructionType, TERMS, CURRENCIES
from specializations.models import Specialization
class WorkSell(models.Model):
name = models.CharField(max_length=255)
description = models.TextField(blank=True)
img = ImageField(upload_to='worksell/worksell')
price = models.DecimalField(max_digits=10, decimal_places=0, default=0)
img = ImageField(upload_to='worksell/worksell', null=True, blank=True)
budget = models.DecimalField(max_digits=10, decimal_places=0, default=0, null=True, blank=True)
currency = models.CharField(max_length=20, default='rur', choices=CURRENCIES, null=True, blank=True)
specialization = TreeForeignKey(Specialization, related_name='worksells', null=True, blank=True)
term = models.IntegerField(default=0, null=True, blank=True)
term_type = models.CharField(max_length=20, choices=TERMS, default='hour', null=True, blank=True)
contractor = models.ForeignKey(User, related_name='work_sell')
created = models.DateTimeField(default=timezone.now)
building_classification = models.ForeignKey(BuildingClassfication, related_name='worksells', null=True, blank=True)
construction_type = models.ForeignKey(ConstructionType, related_name='worksells', null=True, blank=True)
location = TreeForeignKey('common.Location', related_name='worksells', null=True, blank=True)
created = models.DateTimeField(default=timezone.now, null=True, blank=True)
def __str__(self):
return self.name

@ -0,0 +1,55 @@
{% extends 'partials/base.html' %}
{% block content %}
<form method="post" enctype="multipart/form-data">{% csrf_token %}
<div class="col-lg-7">
<!-- The fileinput-button span is used to style the file input field as button -->
<span class="btn btn-success fileinput-button">
<i class="glyphicon glyphicon-plus"></i>
<span>Add files...</span>
<input type="file" name="files[]" multiple>
</span>
</div>
<input type="submit" value="Save12"/>
</form>
{% endblock %}
{% block js_block %}
<script type="text/javascript">
$(function(){
$.ajax({
url : '/work_sell/test/',
success:function(data){
alert(data);
console.log(data);
}
});
});
{# $(function(){#}
{# var files;#}
{# $('input[type=file]').on('change', prepareUpload);#}
{# $('form').on('submit', uploadFiles);#}
{##}
{# function uploadFiles(e){#}
{# console.log('submit');#}
{# e.stopPropagation();#}
{# e.preventDefault();#}
{# var data = new FormData();#}
{# $.each(files, function(k,v){#}
{# console.log(k);#}
{# console.log(v);#}
{# data.append(k, v);#}
{# });#}
{# console.log(data);#}
{# }#}
{# function prepareUpload(e){#}
{# files = e.target.files;#}
{# }#}
{##}
{# });#}
</script>
{% endblock %}

@ -0,0 +1,102 @@
{% extends 'partials/base.html' %}
{% load common_tags %}
{% block content %}
{% include 'partials/header.html' %}
<div class="container mainScore">
<div class="row">
<div class="col-lg-12 allProjects">
<p class="titleScore">Изменение готового проекта</p>
</div>
<form method="post" id="worksell-add-form">{% csrf_token %}
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Название заказа <span style="color: red">{{ form.name.errors.as_text }}</span></p>
<input type="text" class="box-sizing" name="{{ form.name.html_name }}"
value="{{ form.name.value }}">
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Подробно опишите задание <span style="color: red">{{ form.description.errors.as_text }}</span></p>
<textarea name="{{ form.description.html_name }}" id="text-new">{{ form.description.value }}</textarea>
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Специализации</p>
</div>
<div class="col-lg-3">
<input type='hidden' class="-spec-select -spec-select-level-1" style="width: 100%">
</div>
<div class="col-lg-3">
<input type='hidden' class="-spec-select -spec-select-level-2" style="width: 100%">
</div>
<div class="col-lg-3">
<input type='hidden' class="-spec-select -spec-select-level-3" style="width: 100%">
</div>
<div class="col-lg-3">
<input type='hidden' class="-spec-select -spec-select-level-4" style="width: 100%">
</div>
<input type="hidden" id="chosenSpecId" name="{{ form.specialization.html_name }}"
value="{{ form.specialization.value }}">
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Бюджет{{ form.budget.errors.as_text }}</p>
<div class="row">
<div class="col-lg-8">
<input type="text" class="box-sizing" name="{{ form.budget.html_name }}" value="{{ form.budget.value }}">
</div>
<div class="col-lg-4">
{{ form.currency}}
</div>
</div>
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Срок выполнения{{ form.budget.errors.as_text }}</p>
<div class="row">
<div class="col-lg-8">
<input type="text" class="box-sizing" name="{{ form.budget.html_name }}" value="{{ form.budget.value }}">
</div>
<div class="col-lg-4">
{{ form.term_type }}
</div>
</div>
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
</div>
<div class="polsF1 polsF2 disTab">
<p>Вид строительства</p>
{{ form.construction_type}}
</div>
<div class="polsF1 polsF2 disTab">
<p>Классификация здания</p>
{{ form.building_classification}}
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<input type="text" name="{{ form.contractor.html_name }}" value="{{ form.contractor.value }}" />
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<input type="file" name="{{ form.img.html_name }}" >
</div>
<div class="searchF1 polsF1 polsFF links-filter">
<input class="btn-submit-link" type="submit" value="Сохранить проект">
</div>
</form>
{% include 'partials/footer.html' %}
</div>
</div>
{% endblock %}

@ -3,87 +3,7 @@
{% load thumbnail %}
{% block content %}
<div class="wrTop disTab">
<div class="container-fluid topMain">
<div class="row">
<div class="col-lg-3">
<div class="logo" onClick="window.location='/'"></div>
</div>
<div class="col-lg-7">
<ul class="mainMenu">
<li class="icon_tm1">
<a href="javascript:void(0)">Биржа проектов</a>
<span></span>
</li>
<li class="icon_tm2">
<a href="javascript:void(0)">Поиск исполнителей</a>
<span></span>
</li>
<li class="icon_tm3">
<a href="javascript:void(0)">Работы на продажу</a>
<span></span>
</li>
</ul>
</div>
<div class="col-lg-2">
<div class="imgProfile">
<img src="img/profile.jpg" alt="profile-image">
</div>
<div class="infoProfile disTab">
<div class="btn-group" role="group">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
<span class="glyphicon glyphicon-menu-hamburger" aria-hidden="true"></span>
</button>
<ul class="dropdown-menu menu-drop-new">
<li class="icon_mm1">
<a href="#">
Войти заказчиком
<span></span>
</a>
</li>
<li class="icon_mm2">
<a href="#">
Войти исполнителем
<span></span>
</a>
</li>
<li class="icon_mm3">
<a href="#">
Сообщения
<span></span>
</a>
</li>
<li class="icon_mm4">
<a href="#">
Счет
<span></span>
</a>
</li>
<li class="icon_mm5">
<a href="#">
Настройки
<span></span>
</a>
</li>
<li class="icon_mm6">
<a href="#">
FAQ
<span></span>
</a>
</li>
</ul>
</div>
</div>
<div class="rating">
<div class="ratingInset"></div>
<div class="iconRating"></div>
</div>
<p class="ratingPer">45%</p>
</div>
</div>
</div>
</div>
{% include 'partials/header.html' %}
<div class="container mainScore">
<div class="row">
<div class="col-lg-12">
@ -93,33 +13,25 @@
<div class="filter clearfix">
<div class="triangle1"></div>
<div class="titleF1 disTab">
<div class="col-lg-3">Тип работ:</div>
<div class="col-lg-3">Специализации:</div>
<div class="col-lg-3"></div>
<div class="col-lg-3"></div>
<div class="col-lg-3"></div>
</div>
<div class="polsF1 disTab">
<div class="col-lg-3">
<select class="selectpicker">
<option>Mustard</option>
</select>
<input type='hidden' class="-spec-select -spec-select-level-1" style="width: 100%">
</div>
<div class="col-lg-3">
<select class="selectpicker">
<option>Mustard</option>
</select>
<input type='hidden' class="-spec-select -spec-select-level-2" style="width: 100%">
</div>
<div class="col-lg-3">
<select class="selectpicker">
<option>Mustard</option>
</select>
<input type='hidden' class="-spec-select -spec-select-level-3" style="width: 100%">
</div>
<div class="col-lg-3">
<select class="selectpicker">
<option>Mustard</option>
</select>
<input type='hidden' class="-spec-select -spec-select-level-4" style="width: 100%">
</div>
</div>
<div class="titleF1 titleF2 disTab">
<div class="col-lg-4">Тип работ:</div>
@ -215,11 +127,12 @@
<div class="insetCol2 box-sizing disTab">
<p>{{ work }}</p>
<div class="buttonsImg" disTab>
<div class="insetBI insetBI1">
<i class="fa fa-pencil"></i>
</div>
<a href="{% url 'work_sell:edit' work.pk %}">
<div class="insetBI insetBI1">
<i class="fa fa-pencil"></i>
</div>
</a>
<div class="insetBI insetBI2">
<i class="fa fa-times"></i>
</div>

@ -3,11 +3,17 @@ from django.conf import urls
from .views import (
WorkSellsView,
WorkSellDetail,
WorkSellCreateView,
WorkSellUpdateView,
work_sell_create,
)
app_name = 'work_sell'
urlpatterns = [
urls.url(r'^$', WorkSellsView.as_view(), name='list'),
urls.url(r'^create/$', WorkSellCreateView.as_view(), name='create'),
urls.url(r'^(?P<pk>\d+)/edit/$', WorkSellUpdateView.as_view(), name='edit'),
urls.url(r'^test/$', work_sell_create, name='test'),
urls.url(r'^(?P<pk>\d+)/$', WorkSellDetail.as_view(), name='detail'),
]

@ -1,7 +1,11 @@
import json
from django.shortcuts import render
from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView
from django.core.urlresolvers import reverse
from django.http import JsonResponse, HttpResponse
from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView, TemplateView
from .models import WorkSell
from .forms import WorkSellForm
class WorkSellsView(ListView):
@ -20,13 +24,52 @@ class WorkSellDetail(DetailView):
return context
def work_sell_create(request):
if request.is_ajax():
form = WorkSellForm(data=request.POST)
if form.is_valid():
instance = form.save(commit=False)
instance.save()
data = {'status': 'ok'}
else:
data = {'status': 'no', 'form_errors': form.errors}
return HttpResponse(json.dumps(data), content_type='application/json')
return HttpResponse("HEllo")
class WorkSellCreateView(CreateView):
model = WorkSell
form_class = WorkSellForm
template_name = 'worksell_create.html'
class WorkSellUpdateView(CreateView):
class WorkSellUpdateView(UpdateView):
model = WorkSell
form_class = WorkSellForm
template_name = 'worksell_edit.html'
def get_success_url(self):
return reverse('work_sell:list')
class WorkSellDeleteView(CreateView):
model = WorkSell
class JSONResponseMixin(object):
def render_to_json_response(self, context, **response_kwargs):
return JsonResponse(
self.get_data(context),
**response_kwargs
)
def get_data(self, context):
context = {'test': 'data'}
return context
class JSONView(JSONResponseMixin, TemplateView):
def render_to_response(self, context, **response_kwargs):
return self.render_to_json_response(context, **response_kwargs)

Loading…
Cancel
Save