#ARC-1 Add video popup

remotes/origin/setup
Mukhtar 10 years ago
parent a89c5b3d27
commit 3a814a2310
  1. 13
      api/views.py
  2. 8
      archilance/views.py
  3. 29
      assets/css/extra.css
  4. 1860
      assets/js/jquery.magnific-popup.js
  5. 4
      assets/js/jquery.magnific-popup.min.js
  6. 351
      assets/js/magnific-popup.css
  7. 5
      chat/models.py
  8. 8
      chat/serializers.py
  9. 36
      chat/templates/chat_contractor.html
  10. 657
      chat/templates/chat_user.html
  11. 10
      chat/views.py
  12. 3
      common/admin.py
  13. 27
      common/migrations/0003_mainpage.py
  14. 12
      common/models.py
  15. 12
      requirements/base.txt
  16. 71
      templates/home.html
  17. 1
      templates/partials/base.html
  18. 212
      templates/partials/header.html
  19. 30
      templates/partials/header_guest.html
  20. 8
      users/templates/users_list.html
  21. 9
      work_sell/forms.py
  22. 25
      work_sell/migrations/0007_auto_20160705_1514.py
  23. 3
      work_sell/models.py
  24. 17
      work_sell/templates/worksell_detail.html
  25. 546
      work_sell/templates/worksells_list.html
  26. 20
      work_sell/views.py

@ -1,5 +1,7 @@
from django.db.models import Q
from rest_framework.viewsets import ModelViewSet
from projects.models import Project, Realty
from projects.serializers import ProjectSerializer, RealtySerializer
from projects.filters import ProjectFilterSet, RealtyFilterSet
@ -31,6 +33,16 @@ class MessageViewSet(ModelViewSet):
serializer_class = MessageSerializer
filter_class = MessageFilterSet
def get_queryset(self):
queryset = Message.objects.all()
search_param = self.request.query_params.get('operand', None)
# queryset = queryset.filter(Q(sender=self.request.user.pk) | Q(recipent=self.request.user.pk))
# import code; code.interact(local=dict(globals(), **locals()))
if search_param:
queryset = queryset.filter(Q(sender=self.request.user.pk) | Q(recipent=self.request.user.pk))
return queryset
class RealtyViewSet(ModelViewSet):
queryset = Realty.objects.all()
@ -38,6 +50,7 @@ class RealtyViewSet(ModelViewSet):
filter_class = RealtyFilterSet
class SpecializationViewSet(ModelViewSet):
queryset = Specialization.objects.all()
serializer_class = SpecializationSerializer

@ -1,10 +1,16 @@
from django.views.generic import TemplateView, View
from django.shortcuts import render
from projects.models import Order
from common.models import MainPage
class HomeTemplateView(TemplateView):
class HomeTemplateView(View):
template_name = 'home.html'
def get(self, request, *args, **kwargs):
main_settings = MainPage.objects.get(pk=1)
return render(request, self.template_name, {'main_settings': main_settings})
class TestChatTemplateView(View):
template_name = 'chat_test.html'

@ -29,3 +29,32 @@
color: #42B476;
border: 1px solid #42B476;
}
/**
* Simple fade transition,
*/
.mfp-fade.mfp-bg {
opacity: 0;
-webkit-transition: all 0.15s ease-out;
-moz-transition: all 0.15s ease-out;
transition: all 0.15s ease-out;
}
.mfp-fade.mfp-bg.mfp-ready {
opacity: 0.8;
}
.mfp-fade.mfp-bg.mfp-removing {
opacity: 0;
}
.mfp-fade.mfp-wrap .mfp-content {
opacity: 0;
-webkit-transition: all 0.15s ease-out;
-moz-transition: all 0.15s ease-out;
transition: all 0.15s ease-out;
}
.mfp-fade.mfp-wrap.mfp-ready .mfp-content {
opacity: 1;
}
.mfp-fade.mfp-wrap.mfp-removing .mfp-content {
opacity: 0;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

@ -0,0 +1,351 @@
/* Magnific Popup CSS */
.mfp-bg {
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 1042;
overflow: hidden;
position: fixed;
background: #0b0b0b;
opacity: 0.8; }
.mfp-wrap {
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 1043;
position: fixed;
outline: none !important;
-webkit-backface-visibility: hidden; }
.mfp-container {
text-align: center;
position: absolute;
width: 100%;
height: 100%;
left: 0;
top: 0;
padding: 0 8px;
box-sizing: border-box; }
.mfp-container:before {
content: '';
display: inline-block;
height: 100%;
vertical-align: middle; }
.mfp-align-top .mfp-container:before {
display: none; }
.mfp-content {
position: relative;
display: inline-block;
vertical-align: middle;
margin: 0 auto;
text-align: left;
z-index: 1045; }
.mfp-inline-holder .mfp-content,
.mfp-ajax-holder .mfp-content {
width: 100%;
cursor: auto; }
.mfp-ajax-cur {
cursor: progress; }
.mfp-zoom-out-cur, .mfp-zoom-out-cur .mfp-image-holder .mfp-close {
cursor: -moz-zoom-out;
cursor: -webkit-zoom-out;
cursor: zoom-out; }
.mfp-zoom {
cursor: pointer;
cursor: -webkit-zoom-in;
cursor: -moz-zoom-in;
cursor: zoom-in; }
.mfp-auto-cursor .mfp-content {
cursor: auto; }
.mfp-close,
.mfp-arrow,
.mfp-preloader,
.mfp-counter {
-webkit-user-select: none;
-moz-user-select: none;
user-select: none; }
.mfp-loading.mfp-figure {
display: none; }
.mfp-hide {
display: none !important; }
.mfp-preloader {
color: #CCC;
position: absolute;
top: 50%;
width: auto;
text-align: center;
margin-top: -0.8em;
left: 8px;
right: 8px;
z-index: 1044; }
.mfp-preloader a {
color: #CCC; }
.mfp-preloader a:hover {
color: #FFF; }
.mfp-s-ready .mfp-preloader {
display: none; }
.mfp-s-error .mfp-content {
display: none; }
button.mfp-close,
button.mfp-arrow {
overflow: visible;
cursor: pointer;
background: transparent;
border: 0;
-webkit-appearance: none;
display: block;
outline: none;
padding: 0;
z-index: 1046;
box-shadow: none;
touch-action: manipulation; }
button::-moz-focus-inner {
padding: 0;
border: 0; }
.mfp-close {
width: 44px;
height: 44px;
line-height: 44px;
position: absolute;
right: 0;
top: 0;
text-decoration: none;
text-align: center;
opacity: 0.65;
padding: 0 0 18px 10px;
color: #FFF;
font-style: normal;
font-size: 28px;
font-family: Arial, Baskerville, monospace; }
.mfp-close:hover,
.mfp-close:focus {
opacity: 1; }
.mfp-close:active {
top: 1px; }
.mfp-close-btn-in .mfp-close {
color: #333; }
.mfp-image-holder .mfp-close,
.mfp-iframe-holder .mfp-close {
color: #FFF;
right: -6px;
text-align: right;
padding-right: 6px;
width: 100%; }
.mfp-counter {
position: absolute;
top: 0;
right: 0;
color: #CCC;
font-size: 12px;
line-height: 18px;
white-space: nowrap; }
.mfp-arrow {
position: absolute;
opacity: 0.65;
margin: 0;
top: 50%;
margin-top: -55px;
padding: 0;
width: 90px;
height: 110px;
-webkit-tap-highlight-color: transparent; }
.mfp-arrow:active {
margin-top: -54px; }
.mfp-arrow:hover,
.mfp-arrow:focus {
opacity: 1; }
.mfp-arrow:before,
.mfp-arrow:after {
content: '';
display: block;
width: 0;
height: 0;
position: absolute;
left: 0;
top: 0;
margin-top: 35px;
margin-left: 35px;
border: medium inset transparent; }
.mfp-arrow:after {
border-top-width: 13px;
border-bottom-width: 13px;
top: 8px; }
.mfp-arrow:before {
border-top-width: 21px;
border-bottom-width: 21px;
opacity: 0.7; }
.mfp-arrow-left {
left: 0; }
.mfp-arrow-left:after {
border-right: 17px solid #FFF;
margin-left: 31px; }
.mfp-arrow-left:before {
margin-left: 25px;
border-right: 27px solid #3F3F3F; }
.mfp-arrow-right {
right: 0; }
.mfp-arrow-right:after {
border-left: 17px solid #FFF;
margin-left: 39px; }
.mfp-arrow-right:before {
border-left: 27px solid #3F3F3F; }
.mfp-iframe-holder {
padding-top: 40px;
padding-bottom: 40px; }
.mfp-iframe-holder .mfp-content {
line-height: 0;
width: 100%;
max-width: 900px; }
.mfp-iframe-holder .mfp-close {
top: -40px; }
.mfp-iframe-scaler {
width: 100%;
height: 0;
overflow: hidden;
padding-top: 56.25%; }
.mfp-iframe-scaler iframe {
position: absolute;
display: block;
top: 0;
left: 0;
width: 100%;
height: 100%;
box-shadow: 0 0 8px rgba(0, 0, 0, 0.6);
background: #000; }
/* Main image in popup */
img.mfp-img {
width: auto;
max-width: 100%;
height: auto;
display: block;
line-height: 0;
box-sizing: border-box;
padding: 40px 0 40px;
margin: 0 auto; }
/* The shadow behind the image */
.mfp-figure {
line-height: 0; }
.mfp-figure:after {
content: '';
position: absolute;
left: 0;
top: 40px;
bottom: 40px;
display: block;
right: 0;
width: auto;
height: auto;
z-index: -1;
box-shadow: 0 0 8px rgba(0, 0, 0, 0.6);
background: #444; }
.mfp-figure small {
color: #BDBDBD;
display: block;
font-size: 12px;
line-height: 14px; }
.mfp-figure figure {
margin: 0; }
.mfp-bottom-bar {
margin-top: -36px;
position: absolute;
top: 100%;
left: 0;
width: 100%;
cursor: auto; }
.mfp-title {
text-align: left;
line-height: 18px;
color: #F3F3F3;
word-wrap: break-word;
padding-right: 36px; }
.mfp-image-holder .mfp-content {
max-width: 100%; }
.mfp-gallery .mfp-image-holder .mfp-figure {
cursor: pointer; }
@media screen and (max-width: 800px) and (orientation: landscape), screen and (max-height: 300px) {
/**
* Remove all paddings around the image on small screen
*/
.mfp-img-mobile .mfp-image-holder {
padding-left: 0;
padding-right: 0; }
.mfp-img-mobile img.mfp-img {
padding: 0; }
.mfp-img-mobile .mfp-figure:after {
top: 0;
bottom: 0; }
.mfp-img-mobile .mfp-figure small {
display: inline;
margin-left: 5px; }
.mfp-img-mobile .mfp-bottom-bar {
background: rgba(0, 0, 0, 0.6);
bottom: 0;
margin: 0;
top: auto;
padding: 3px 5px;
position: fixed;
box-sizing: border-box; }
.mfp-img-mobile .mfp-bottom-bar:empty {
padding: 0; }
.mfp-img-mobile .mfp-counter {
right: 5px;
top: 3px; }
.mfp-img-mobile .mfp-close {
top: 0;
right: 0;
width: 35px;
height: 35px;
line-height: 35px;
background: rgba(0, 0, 0, 0.6);
position: fixed;
text-align: center;
padding: 0; } }
@media all and (max-width: 900px) {
.mfp-arrow {
-webkit-transform: scale(0.75);
transform: scale(0.75); }
.mfp-arrow-left {
-webkit-transform-origin: 0;
transform-origin: 0; }
.mfp-arrow-right {
-webkit-transform-origin: 100%;
transform-origin: 100%; }
.mfp-container {
padding-left: 6px;
padding-right: 6px; } }

@ -20,6 +20,7 @@ class Message(models.Model):
verbose_name = 'Сообщение'
verbose_name_plural = 'Сообщения'
class Notes(models.Model):
text = models.TextField()
created = models.DateTimeField(default=timezone.now)
@ -33,3 +34,7 @@ class Notes(models.Model):
class Meta:
verbose_name = 'Заметка'
verbose_name_plural = 'Заметки'
# class Channel(models.Model):
# owner = models.ForeignKey(User, related_name='chanells')
# companion = models.ForeignKey(User, related_name='companion_channels')

@ -1,6 +1,6 @@
from rest_framework.serializers import ModelSerializer
from .models import Message
from .models import Message, Notes
from users.serializers import UserSerializer
class MessageSerializer(ModelSerializer):
@ -18,3 +18,9 @@ class MessageSerializer(ModelSerializer):
'recipent',
'private_type',
)
# class NotesSerializer(ModelSerializer):
#
# class Meta:
# model = Notes

@ -5,19 +5,22 @@
<div class="container mainScore">
<div class="row">
<div class="col-lg-12 allProjects">
<h1>Чат</h1>
<h1>Чат {{ request.user }}</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">
<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>
@ -31,7 +34,7 @@
<div class="messageBlock box-sizing disTab">
<p>Контакты</p>
{% for contact in contractor_contacts %}
<div class="message messd user-block" data-id="{{ contact.recipent_id__id}}">
<div class="message messd user-block" data-id="{{ contact.recipent_id}}">
<div class="imgMess">
<img src="{% static 'img/mess.png' %}" alt="mess-image">
</div>
@ -50,33 +53,10 @@
</div>
<div class="col-lg-6 commChat" id="contact-chat">
<div id="message-chat-space">
<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</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>
<form id="contact-chat-form">
<input type="hidden" value="{{ request.user.pk }}" name="senderId" id="senderId" />
<input type="hidden" value="" name="recipentId" id="recipentId" />
<input type="text" value="{{ request.user.pk }}" name="senderId" id="senderId" />
<input type="text" value="" name="recipentId" id="recipentId" />
<textarea id="chat" name="chat_message" class="box-sizing"></textarea>
<div class="bunChat">

@ -1,657 +0,0 @@
{% extends 'partials/base.html' %}
{% load staticfiles %}
{% 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>
<footer class="disTab">
<div class="col-lg-4">
<div class="logoF" onclick="window.location='/'"></div>
<div class="linksSoc box-sizing disTab">
<a href="https://www.facebook.com/" target="_blank" class="icon_ls1"></a>
<a href="https://twitter.com/" target="_blank" class="icon_ls2"></a>
<a href="https://plus.google.com/" target="_blank" class="icon_ls3"></a>
<a href="http://vk.com/" target="_blank" class="icon_ls4"></a>
<a href="https://www.youtube.com/" target="_blank" class="icon_ls5"></a>
</div>
<p class="copy-rights">&copy; 2016 archilance.ru</p>
</div>
<div class="col-lg-3 col-lg-offset-2 listF1">
<p>Профиль</p>
<ul>
<li>
<a href="javascript:void(0)">Войти</a>
</li>
<li>
<a href="javascript:void(0)">Регистрация</a>
</li>
<li>
<a href="javascript:void(0)">Востановить доступ</a>
</li>
<li>
<a href="javascript:void(0)">Опубликовать проект</a>
</li>
</ul>
</div>
<div class="col-lg-3 listF1">
<p>О сайте</p>
<ul>
<li>
<a href="javascript:void(0)">Помощь</a>
</li>
<li>
<a href="javascript:void(0)">Правила сайта</a>
</li>
<li>
<a href="javascript:void(0)">Команда</a>
</li>
<li>
<a href="javascript:void(0)">FAQ</a>
</li>
<li>
<a href="javascript:void(0)">Контакты</a>
</li>
</ul>
</div>
<!-- CHAT'S MODAL FORMS -->
<div id="modal_form1">
<div class="insetModalForm1 box-sizing">
<div class="closeMF1">
<span class="glyphicon glyphicon-remove"></span>
</div>
<p class="titleMF1">Заголовок статьи</p>
<p class="textMF1">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus .Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus . Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus .Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus .Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus.
</p>
</div>
</div>
<div id="modal_form2" class="box-sizing">
<div class="insetMF2">
<p class="titleMF2">Иванов Петр Иванович</p>
<p class="textMF2">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus.
</p>
<a href="javascript:void(0)">ответить</a>
<a href="javascript:void(0)" class="later">позже</a>
<span class="glyphicon glyphicon-remove closeMF2"></span>
</div>
</div>
<!-- CHAT'S MODAL FORMS -->
</footer>
</div>
</div>
{% endblock %}

@ -10,7 +10,8 @@ class ChatUserView(View):
def get(self, request, *args, **kwargs):
if request.user.is_authenticated() and request.user.is_customer():
customer_contacts = Message.objects.values('sender_id','recipent_id').filter(Q(recipent_id=6)| Q(sender_id=6)).distinct()
customer_contacts = Message.objects.values('sender_id','recipent_id').\
filter(Q(recipent_id=request.user.pk)| Q(sender_id=request.user.pk)).distinct()
chat_messages = Message.objects.filter(Q(sender=request.user.pk) | Q(recipent=request.user.pk))
orders = request.user.projects.select_related('order').all()
self.template_name = 'chat_customer.html'
@ -19,8 +20,11 @@ class ChatUserView(View):
'orders': orders})
else:
orders = request.user.orders.all()
contractor_contacts = request.user.sender_messages.values('recipent_id').distinct('recipent_id').\
values('recipent_id__email', 'recipent_id__first_name', 'recipent_id__last_name', 'recipent_id__id')
# contractor_contacts = request.user.sender_messages.values('recipent_id').distinct('recipent_id').\
# values('recipent_id__email', 'recipent_id__first_name', 'recipent_id__last_name', 'recipent_id__id')
contractor_contacts = Message.objects.values('sender_id','recipent_id').\
filter(Q(recipent_id=request.user.pk)| Q(sender_id=request.user.pk)).distinct()
chat_messages = Message.objects.filter(Q(sender=request.user.pk) | Q(recipent=request.user.pk)).order_by('created')
self.template_name = 'chat_contractor.html'
return render(request, self.template_name, {'orders': orders,

@ -1,9 +1,10 @@
from django.contrib import admin
from mptt.admin import MPTTModelAdmin
from .models import Location
from .models import Location, MainPage
class LocationAdmin(MPTTModelAdmin):
readonly_fields = ('pk', 'lft', 'rght', 'tree_id', 'level')
admin.site.register(Location, LocationAdmin)
admin.site.register(MainPage)

@ -0,0 +1,27 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.6 on 2016-07-05 07:25
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('common', '0002_auto_20160615_1625'),
]
operations = [
migrations.CreateModel(
name='MainPage',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('contractor_text', models.TextField()),
('customer_text', models.TextField()),
('video_code', models.TextField()),
],
options={
'verbose_name': 'Главная страница',
},
),
]

@ -20,3 +20,15 @@ class Location(MPTTModel):
class Meta:
verbose_name = 'Местоположение'
verbose_name_plural = 'Местоположения'
class MainPage(models.Model):
contractor_text = models.TextField()
customer_text = models.TextField()
video_code = models.TextField()
def __str__(self):
return self.contractor_text
class Meta:
verbose_name = 'Главная страница'

@ -1,20 +1,32 @@
Django==1.9.6
Momoko==2.2.3
Pillow==3.2.0
Werkzeug==0.11.10
backports-abc==0.4
django-appconf==1.0.2
django-compressor==2.0
django-debug-toolbar==1.4
django-environ==0.4.0
django-extensions==1.6.7
django-filter==0.13.0
django-guardian==1.4.4
django-mptt==0.8.4
django-registration-redux==1.4
django-treebeard==4.0.1
djangorestframework==3.3.3
djangorestframework-filters==0.8.0
fake-factory==0.5.7
jsonschema==2.5.1
psycopg2==2.6.1
pydash==3.4.3
python-dateutil==2.5.3
rcssmin==1.0.6
redis==2.10.5
requests==2.10.0
rjsmin==1.0.12
six==1.10.0
sorl-thumbnail==12.3
sqlparse==0.1.19
tornado==4.3

@ -1,13 +1,13 @@
{% extends 'partials/base.html' %}
{% load staticfiles %}
{% block content %}
<section class="mainContainer">
{% include 'partials/header.html' %}
{% include 'partials/header.html' %}
<div class="container-fluid">
<div class="row">
<p class="welcomeMain">Основная задача сайта</p>
<p>
Authed? {{ request.user.is_authenticated }}c
{{ request.user }}<br>
@ -20,9 +20,13 @@
<div class="row">
<div class="col-lg-6">
<div class="changeBlock changeBlock1">
<a href="{% url 'registration_register' %}?type=contractor">Я исполнитель</a>
{% if request.user.is_authenticated and request.user.is_contractor %}
<a href="{% url 'users:contractor-profile' pk=request.user.pk %}">Я исполнитель</a>
{% else %}
<a href="{% url 'registration_register' %}?type=contractor">Я исполнитель</a>
{% endif %}
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
{{ main_settings.contractor_text }}
</p>
</div>
<div class="square">
@ -31,9 +35,13 @@
</div>
<div class="col-lg-6">
<div class="changeBlock changeBlock2">
<a href="{% url 'registration_register' %}?type=customer">Я заказчик</a>
{% if request.user.is_authenticated and request.user.is_customer %}
<a href="{% url 'users:customer-profile-open-projects' pk=request.user.pk %}">Я заказчик</a>
{% else %}
<a href="{% url 'registration_register' %}?type=customer">Я заказчик</a>
{% endif %}
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
{{ main_settings.customer_text }}
</p>
</div>
</div>
@ -41,8 +49,55 @@
</div>
<div class="container-fluid">
<div class="row">
<div class="youtube"></div>
<a class="popup-youtube" href="https://www.youtube.com/watch?v=WjhmB0JlCTo">
<div class="youtube"></div>
</a>
{# <!-- Modal HTML -->#}
{# <div id="myModal" 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>#}
{# <div class="modal-body">#}
{# <div id="modal-body-video">#}
{# {{ main_settings.video_code | safe }}#}
{# </div>#}
{# </div>#}
{# </div>#}
{# </div>#}
{# </div>#}
</div>
</div>
</section>
{% endblock %}
{% block js_block %}
<script type="text/javascript" src='{% static "js/jquery.magnific-popup.min.js" %}'></script>
<script type="text/javascript">
$(document).ready(function() {
$('.popup-youtube').magnificPopup({
disableOn: 700,
type: 'iframe',
mainClass: 'mfp-fade',
removalDelay: 160,
preloader: false,
fixedContentPos: false
});
});
{#$(document).ready(function(){#}
{# var modalBodyVideo = $("#modal-body-video").clone(true);#}
{# $("#myModal").on('hide.bs.modal', function(){#}
{# $("#modal-body-video").remove();#}
{# });#}
{##}
{# $("#myModal").on('show.bs.modal', function(){#}
{# $("#modal-body-video").remove();#}
{# modalBodyVideo.appendTo('.modal-body');#}
{# });#}
{#});#}
</script>
{% endblock %}

@ -17,6 +17,7 @@
<link rel='stylesheet' href='{% static "lib/select2/css/select2.css" %}'>
<link rel='stylesheet' href='{% static "css/swiper.min.css" %}'>
<link rel='stylesheet' href='{% static "lib/jquery.fileupload/css/jquery.fileupload.css" %}'>
<link rel='stylesheet' href='{% static "js/magnific-popup.css" %}'>
<link rel='stylesheet' href='{% static "css/main.css" %}'>
<link rel='stylesheet' href='{% static "css/extra.css" %}'> <!-- Our additional CSS -->

@ -1,38 +1,57 @@
{% load staticfiles %}
<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="{% url 'projects:list' %}">Биржа проектов</a>
<span></span>
</li>
<li class="icon_tm2">
<a href="{% url 'users:contractor-list' %}">Поиск исполнителей</a>
<span></span>
</li>
<li>
{% load staticfiles %}
<div class="wrTop {% if request.user.is_authenticated %} disTab {% endif %}">
<div class="container-fluid topMain">
<div class="row">
<div class="col-lg-3">
<div class="logo" onClick="window.location='/'"></div>
</div>
{% if request.user.is_authenticated %}
<div class="col-lg-7">
<ul class="mainMenu">
<li class="icon_tm1">
<a href="{% url 'projects:list' %}">Биржа проектов</a>
<span></span>
</li>
{% if request.user.is_contractor %}
<a href="{% url 'users:contractor-office' pk=request.user.pk %}">Мой офис</a>
<li class="officeList icon_tml">
<a href="{% url 'users:contractor-office' pk=request.user.pk %}">Мой офис</a>
<span></span>
</li>
{% endif%}
{% if request.user.is_customer %}
<li class="icon_tm2">
<a href="{% url 'users:contractor-list' %}">Поиск исполнителей</a>
<span></span>
</li>
<li class="icon_tm3">
<a href="{% url 'users:contractor-list' %}">Работы на продажу</a>
<span></span>
</li>
{% endif %}
</li>
{# <li class="icon_tm3">#}
{# <a href="#">Работы на продажу</a>#}
{# <span></span>#}
{# </li>#}
</ul>
</div>
<div class="col-lg-2">
<div class="imgProfile">
</ul>
</div>
{% else %}
<div class="col-lg-7">
<ul class="mainMenu">
<li class="icon_tm1">
<a href="{% url 'projects:list' %}">Биржа проектов</a>
<span></span>
</li>
<li class="icon_tm2">
<a href="{% url 'users:contractor-list' %}">Поиск исполнителей</a>
<span></span>
</li>
<li class="icon_tm3">
<a href="{% url 'users:contractor-list' %}">Работы на продажу</a>
<span></span>
</li>
</ul>
</div>
{% endif %}
{% if request.user.is_authenticated %}
<div class="col-lg-2">
<div class="imgProfile">
{% if request.user.is_contractor %}
<a href="{% url 'users:contractor-profile' pk=request.user.pk %}">
<img src="/media/img/profile.jpg" alt="profile-image">
@ -42,67 +61,66 @@
<img src="/media/img/profile.jpg" alt="profile-image">
</a>
{% endif %}
</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">
{% if not request.user.is_authenticated %}
<li class="icon_mm1">
<a href="{% url 'auth_login' %}">
Войти заказчиком
<span></span>
</a>
</li>
<li class="icon_mm2">
<a href="{% url 'auth_login' %}">
Войти исполнителем
<span></span>
</a>
</li>
{% endif %}
<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>
{% if request.user.is_authenticated %}
<li>
<a href="{% url 'auth_logout' %}">
Выйти
</a>
</li>
{% endif %}
</ul>
</div>
</div>
<div class="rating">
<div class="ratingInset"></div>
<div class="iconRating"></div>
</div>
<p class="ratingPer">45%</p>
</div>
</div>
</div>
</div>
</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="{% url 'auth_login' %}">
Войти заказчиком
<span></span>
</a>
</li>
<li class="icon_mm2">
<a href="{% url 'auth_login' %}">
Войти исполнителем
<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>
{% if request.user.is_contractor %}
<div class="rating">
<div class="ratingInset"></div>
<div class="iconRating"></div>
</div>
<p class="ratingPer">45%</p>
{% endif %}
</div>
{% else %}
<div class="col-lg-2">
<a href="{% url 'registration_register' %}" class="reg">Регистрация</a>
<div class="lock"></div>
</div>
{% endif %}
</div>
</div>
</div>

@ -0,0 +1,30 @@
{% load staticfiles %}
<div class="wrTop {">
<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">
<a href="javascript:void(0)" class="reg">регистрация</a>
<div class="lock"></div>
</div>
</div>
</div>
</div>

@ -1,5 +1,5 @@
{% extends 'partials/base.html' %}
{% load thumbnail %}
{% block content %}
<div class="titleBlockComparison disTab">
@ -9,10 +9,16 @@
<tbody><tr>
<th></th>
<th></th>
<th></th>
</tr>
{% for user in users %}
<tr>
<td>{{ forloop.counter }}</td>
<td>
{% thumbnail user.avatar "200x200" crop="center" as im %}
<img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}">
{% endthumbnail %}
</td>
<td>
{{ user.get_full_name }}
</td>

@ -0,0 +1,9 @@
from django import forms
from .models import WorkSell
class WorkSellForm(forms.ModelForm):
class Meta:
model = WorkSell
fields = '__all__'

@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.6 on 2016-07-05 12:14
from __future__ import unicode_literals
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('work_sell', '0006_worksellphoto'),
]
operations = [
migrations.AlterModelOptions(
name='worksell',
options={'ordering': ['-created'], 'verbose_name': 'Готовая работа', 'verbose_name_plural': 'Готовые работы'},
),
migrations.AddField(
model_name='worksell',
name='created',
field=models.DateTimeField(default=django.utils.timezone.now),
),
]

@ -1,4 +1,5 @@
from django.db import models
from django.utils import timezone
from sorl.thumbnail import ImageField
from users.models import User
@ -9,6 +10,7 @@ class WorkSell(models.Model):
img = ImageField(upload_to='worksell/worksell')
price = models.DecimalField(max_digits=10, decimal_places=0, default=0)
contractor = models.ForeignKey(User, related_name='work_sell')
created = models.DateTimeField(default=timezone.now)
def __str__(self):
return self.name
@ -17,6 +19,7 @@ class WorkSell(models.Model):
pass
class Meta:
ordering = ['-created']
verbose_name = 'Готовая работа'
verbose_name_plural = 'Готовые работы'

@ -154,22 +154,23 @@
<div class="col-lg-12 sibl">
<p>Похожие работы</p>
</div>
<div class="gallMini disTab">
{% for worksell in worksell_related %}
<div class="col-lg-3">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
<div class="imgFigure"></div>
</div>
</div>
</div>
<div class="col-lg-3">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
{% thumbnail worksell.img "265x265" crop="center" as im %}
<div class="imgGal" style="background: url('{{ im.url }}') no-repeat center;">
<div class="imgFigure"></div>
</div>
{% endthumbnail %}
</div>
</div>
{% endfor %}
</div>
{% include 'partials/footer.html' %}
</div>

@ -3,308 +3,262 @@
{% 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>
<div class="container mainScore">
<div class="row">
<div class="col-lg-12">
<p class="titleScore">Работы на продажу</p>
</div>
<div class="col-lg-12">
<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>
<div class="polsF1 disTab">
<div class="col-lg-3">
<select class="selectpicker">
<option>Mustard</option>
</select>
</div>
<div class="col-lg-3">
<select class="selectpicker">
<option>Mustard</option>
</select>
</div>
<div class="col-lg-3">
<select class="selectpicker">
<option>Mustard</option>
</select>
</div>
<div class="col-lg-3">
<select class="selectpicker">
<option>Mustard</option>
<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>
<div class="container mainScore">
<div class="row">
<div class="col-lg-12">
<p class="titleScore">Работы на продажу</p>
</div>
<div class="col-lg-12">
<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>
<div class="polsF1 disTab">
<div class="col-lg-3">
<select class="selectpicker">
<option>Mustard</option>
</select>
</div>
<div class="col-lg-3">
<select class="selectpicker">
<option>Mustard</option>
</select>
</div>
<div class="col-lg-3">
<select class="selectpicker">
<option>Mustard</option>
</select>
</div>
<div class="col-lg-3">
<select class="selectpicker">
<option>Mustard</option>
</select>
</div>
</div>
<div class="titleF1 titleF2 disTab">
<div class="col-lg-4">Тип работ:</div>
<div class="col-lg-8">Специализации:</div>
</div>
<div class="searchF1 polsF1 polsFF">
<div class="col-lg-4">
<input type="text" placeholder="От" class="box-sizing otInp">
<input type="text" placeholder="До" class="box-sizing otInp">
<select class="selectpicker2 valul">
<option>&#36;</option>
<option>&#36;</option>
<option>&#36;</option>
</select>
</div>
<div class="col-lg-3">
<select class="selectpicker">
<option>Mustard</option>
</select>
</div>
</div>
<div class="titleF1 titleF2 disTab">
<div class="col-lg-4">Тип работ:</div>
<div class="col-lg-8">Специализации:</div>
</div>
<div class="searchF1 polsF1 polsFF">
<div class="col-lg-4">
<input type="text" placeholder="От" class="box-sizing otInp">
<input type="text" placeholder="До" class="box-sizing otInp">
<select class="selectpicker2 valul">
<option>&#36;</option>
<option>&#36;</option>
<option>&#36;</option>
</select>
</div>
<div class="col-lg-3">
<select class="selectpicker">
<option>Mustard</option>
</select>
</div>
<div class="col-lg-3">
<a href="javascript:void(0)" class="findReal">
найти исполнителя
</a>
</div>
<div class="col-lg-2">
<a href="javascript:void(0)" class="clearSearch">
Очистить фильтр
</a>
</div>
</div>
<div class="resSearchF1">
<div class="col-lg-3">
<p class="titleResF1">Расширенный поиск</p>
<button class="resButtonF1">
<span class="glyphicon glyphicon-arrow-up" aria-hidden="true"></span>
</button>
</div>
<div class="col-lg-9">
<div class="borderS1"></div>
</div>
</div>
<div class="slideRes disTab activeSlide">
<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>
<div class="polsF1 polsF2 disTab">
<div class="col-lg-3">
<select class="selectpicker">
<option>Mustard</option>
</select>
</div>
<div class="col-lg-3">
<select class="selectpicker">
<option>Mustard</option>
</select>
</div>
<div class="col-lg-3">
<select class="selectpicker">
<option>Mustard</option>
</select>
</div>
<div class="col-lg-3">
<select class="selectpicker">
<option>Mustard</option>
</select>
</div>
</div>
</div>
</div>
</div>
<div class="galleryWork disTab">
</select>
</div>
<div class="col-lg-3">
<a href="javascript:void(0)" class="findReal">
найти исполнителя
</a>
</div>
<div class="col-lg-2">
<a href="javascript:void(0)" class="clearSearch">
Очистить фильтр
</a>
</div>
</div>
<div class="resSearchF1">
<div class="col-lg-3">
<p class="titleResF1">Расширенный поиск</p>
<button class="resButtonF1">
<span class="glyphicon glyphicon-arrow-up" aria-hidden="true"></span>
</button>
</div>
<div class="col-lg-9">
<div class="borderS1"></div>
</div>
</div>
<div class="slideRes disTab activeSlide">
<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>
<div class="polsF1 polsF2 disTab">
<div class="col-lg-3">
<select class="selectpicker">
<option>Mustard</option>
</select>
</div>
<div class="col-lg-3">
<select class="selectpicker">
<option>Mustard</option>
</select>
</div>
<div class="col-lg-3">
<select class="selectpicker">
<option>Mustard</option>
</select>
</div>
<div class="col-lg-3">
<select class="selectpicker">
<option>Mustard</option>
</select>
</div>
</div>
</div>
</div>
</div>
<div class="galleryWork disTab">
{% for work in object_list %}
<div class="col-lg-3">
<div class="insetCol box-sizing disTab">
<a href="{% url 'work_sell:detail' work.pk %}">
{% thumbnail work.img "265x265" crop="center" as im %}
<div class="imgGal" style="background: url('{{ im.url }}') no-repeat center;">
<div class="imgFigure"></div>
</div>
{% endthumbnail %}
</a>
<div class="cenaImg box-sizing">
<div class="cenaImgInset">
{{ work.price }} <i class="fa fa-rub"></i>
</div>
</div>
</div>
<div class="insetCol2 box-sizing disTab">
<p>{{ work }}</p>
<div class="buttonsImg" disTab>
<div class="insetBI insetBI1">
<i class="fa fa-pencil"></i>
</div>
<div class="insetBI insetBI2">
<i class="fa fa-times"></i>
</div>
</div>
</div>
</div>
<div class="col-lg-3">
<div class="insetCol box-sizing disTab">
{% thumbnail work.img "265x265" crop="center" as im %}
<div class="imgGal" style="background: url('{{ im.url }}') no-repeat center;">
<div class="imgFigure"></div>
</div>
{% endthumbnail %}
<div class="cenaImg box-sizing">
<div class="cenaImgInset">
{{ work.price }} <i class="fa fa-rub"></i>
</div>
</div>
</div>
<div class="insetCol2 box-sizing disTab">
<p>{{ work }}</p>
<div class="insetCol box-sizing disTab">
<a href="{% url 'work_sell:detail' work.pk %}">
{% thumbnail work.img "265x265" crop="center" as im %}
<div class="imgGal" style="background: url('{{ im.url }}') no-repeat center;">
<div class="imgFigure"></div>
</div>
{% endthumbnail %}
</a>
<div class="cenaImg box-sizing">
<div class="cenaImgInset">
{{ work.price }} <i class="fa fa-rub"></i>
</div>
</div>
</div>
<div class="insetCol2 box-sizing disTab">
<p>{{ work }}</p>
<div class="buttonsImg" disTab>
<div class="insetBI insetBI1">
<i class="fa fa-pencil"></i>
</div>
<div class="insetBI insetBI2">
<i class="fa fa-times"></i>
</div>
</div>
</div>
</div>
<div class="col-lg-3">
<div class="insetCol box-sizing disTab">
{% thumbnail work.img "265x265" crop="center" as im %}
<div class="imgGal" style="background: url('{{ im.url }}') no-repeat center;">
<div class="imgFigure"></div>
</div>
{% endthumbnail %}
<div class="cenaImg box-sizing">
<div class="cenaImgInset">
{{ work.price }} <i class="fa fa-rub"></i>
</div>
</div>
</div>
<div class="insetCol2 box-sizing disTab">
<p>{{ work }}</p>
<div class="buttonsImg" disTab>
<div class="insetBI insetBI1">
<i class="fa fa-pencil"></i>
</div>
<div class="insetBI insetBI2">
<i class="fa fa-times"></i>
</div>
</div>
</div>
</div>
<div class="buttonsImg" disTab>
<div class="insetBI insetBI1">
<i class="fa fa-pencil"></i>
</div>
<div class="insetBI insetBI2">
<i class="fa fa-times"></i>
</div>
</div>
</div>
</div>
{% endfor %}
</div>
<div class="col-lg-12 pagin">
<nav>
<ul class="pagination">
<li>
<a href="#" aria-label="Previous">
<span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
</a>
</li>
<li class="active"><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#">4</a></li>
<li><a href="#">5</a></li>
<li>...</li>
<li><a href="#">17</a></li>
<li>
<a href="#" aria-label="Next">
<span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
</a>
</li>
</ul>
</nav>
</div>
</div>
{% if is_paginated %}
<div class="col-lg-12 pagin">
<nav>
<ul class="pagination">
{% if page_obj.has_previous %}
<li>
<a href="?page={{ page_obj.previous_page_number }}" aria-label="Previous">
<span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
</a>
</li>
{% endif %}
{% for page_number in paginator.page_range %}
{% if page_number == page_obj.number %}
<li class="active"><a href="#">{{ page_number }}</a></li>
{% else %}
<li><a href="?page={{ page_number }}">{{ page_number }}</a></li>
{% endif %}
{% endfor %}
{% if page_obj.has_next %}
<li>
<a href="?page={{ page_obj.next_page_number }}" aria-label="Next">
<span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
</a>
</li>
{% endif %}
</ul>
</nav>
</div>
{% endif %}
{% include 'partials/footer.html' %}
</div>
</div>
</div>
</div>
{% endblock %}

@ -1,5 +1,5 @@
from django.shortcuts import render
from django.views.generic import ListView, DetailView
from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView
from .models import WorkSell
@ -7,8 +7,26 @@ from .models import WorkSell
class WorkSellsView(ListView):
model = WorkSell
template_name = 'worksells_list.html'
paginate_by = 20
class WorkSellDetail(DetailView):
model = WorkSell
template_name = 'worksell_detail.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['worksell_related'] = WorkSell.objects.all()[:5]
return context
class WorkSellCreateView(CreateView):
model = WorkSell
class WorkSellUpdateView(CreateView):
model = WorkSell
class WorkSellDeleteView(CreateView):
model = WorkSell

Loading…
Cancel
Save