#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 rest_framework.viewsets import ModelViewSet
from projects.models import Project, Realty from projects.models import Project, Realty
from projects.serializers import ProjectSerializer, RealtySerializer from projects.serializers import ProjectSerializer, RealtySerializer
from projects.filters import ProjectFilterSet, RealtyFilterSet from projects.filters import ProjectFilterSet, RealtyFilterSet
@ -31,6 +33,16 @@ class MessageViewSet(ModelViewSet):
serializer_class = MessageSerializer serializer_class = MessageSerializer
filter_class = MessageFilterSet 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): class RealtyViewSet(ModelViewSet):
queryset = Realty.objects.all() queryset = Realty.objects.all()
@ -38,6 +50,7 @@ class RealtyViewSet(ModelViewSet):
filter_class = RealtyFilterSet filter_class = RealtyFilterSet
class SpecializationViewSet(ModelViewSet): class SpecializationViewSet(ModelViewSet):
queryset = Specialization.objects.all() queryset = Specialization.objects.all()
serializer_class = SpecializationSerializer serializer_class = SpecializationSerializer

@ -1,10 +1,16 @@
from django.views.generic import TemplateView, View from django.views.generic import TemplateView, View
from django.shortcuts import render from django.shortcuts import render
from projects.models import Order from projects.models import Order
from common.models import MainPage
class HomeTemplateView(TemplateView): class HomeTemplateView(View):
template_name = 'home.html' 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): class TestChatTemplateView(View):
template_name = 'chat_test.html' template_name = 'chat_test.html'

@ -29,3 +29,32 @@
color: #42B476; color: #42B476;
border: 1px solid #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 = 'Сообщение'
verbose_name_plural = 'Сообщения' verbose_name_plural = 'Сообщения'
class Notes(models.Model): class Notes(models.Model):
text = models.TextField() text = models.TextField()
created = models.DateTimeField(default=timezone.now) created = models.DateTimeField(default=timezone.now)
@ -33,3 +34,7 @@ class Notes(models.Model):
class Meta: class Meta:
verbose_name = 'Заметка' verbose_name = 'Заметка'
verbose_name_plural = 'Заметки' 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 rest_framework.serializers import ModelSerializer
from .models import Message from .models import Message, Notes
from users.serializers import UserSerializer from users.serializers import UserSerializer
class MessageSerializer(ModelSerializer): class MessageSerializer(ModelSerializer):
@ -18,3 +18,9 @@ class MessageSerializer(ModelSerializer):
'recipent', 'recipent',
'private_type', 'private_type',
) )
# class NotesSerializer(ModelSerializer):
#
# class Meta:
# model = Notes

@ -5,19 +5,22 @@
<div class="container mainScore"> <div class="container mainScore">
<div class="row"> <div class="row">
<div class="col-lg-12 allProjects"> <div class="col-lg-12 allProjects">
<h1>Чат</h1> <h1>Чат {{ request.user }}</h1>
</div> </div>
<div class="btnReadyBlock disTab"> <div class="btnReadyBlock disTab">
<div class="triangle1"></div> <div class="triangle1"></div>
<div class="col-lg-6 col-lg-offset-3 tabsChat"> <div class="col-lg-6 col-lg-offset-3 tabsChat">
<div class="profileTabs2"> <div class="profileTabs2">
<ul class="nav nav-tabs nav-justified"> <ul class="nav nav-tabs nav-justified">
<li role="presentation" class="active">
<li role="presentation" class="active">
<a href="#tab1" data-toggle="tab">Личные</a> <a href="#tab1" data-toggle="tab">Личные</a>
</li> </li>
<li role="presentation"> <li role="presentation">
<a href="#tab2" data-toggle="tab">Заказчики</a> <a href="#tab2" data-toggle="tab">Заказчики</a>
</li> </li>
<li role="presentation"> <li role="presentation">
<a href="#tab3" data-toggle="tab">Исполнители</a> <a href="#tab3" data-toggle="tab">Исполнители</a>
</li> </li>
@ -31,7 +34,7 @@
<div class="messageBlock box-sizing disTab"> <div class="messageBlock box-sizing disTab">
<p>Контакты</p> <p>Контакты</p>
{% for contact in contractor_contacts %} {% 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"> <div class="imgMess">
<img src="{% static 'img/mess.png' %}" alt="mess-image"> <img src="{% static 'img/mess.png' %}" alt="mess-image">
</div> </div>
@ -50,33 +53,10 @@
</div> </div>
<div class="col-lg-6 commChat" id="contact-chat"> <div class="col-lg-6 commChat" id="contact-chat">
<div id="message-chat-space"> <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> </div>
<form id="contact-chat-form"> <form id="contact-chat-form">
<input type="hidden" value="{{ request.user.pk }}" name="senderId" id="senderId" /> <input type="text" value="{{ request.user.pk }}" name="senderId" id="senderId" />
<input type="hidden" value="" name="recipentId" id="recipentId" /> <input type="text" value="" name="recipentId" id="recipentId" />
<textarea id="chat" name="chat_message" class="box-sizing"></textarea> <textarea id="chat" name="chat_message" class="box-sizing"></textarea>
<div class="bunChat"> <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): def get(self, request, *args, **kwargs):
if request.user.is_authenticated() and request.user.is_customer(): 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)) chat_messages = Message.objects.filter(Q(sender=request.user.pk) | Q(recipent=request.user.pk))
orders = request.user.projects.select_related('order').all() orders = request.user.projects.select_related('order').all()
self.template_name = 'chat_customer.html' self.template_name = 'chat_customer.html'
@ -19,8 +20,11 @@ class ChatUserView(View):
'orders': orders}) 'orders': orders})
else: else:
orders = request.user.orders.all() orders = request.user.orders.all()
contractor_contacts = request.user.sender_messages.values('recipent_id').distinct('recipent_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') # 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') chat_messages = Message.objects.filter(Q(sender=request.user.pk) | Q(recipent=request.user.pk)).order_by('created')
self.template_name = 'chat_contractor.html' self.template_name = 'chat_contractor.html'
return render(request, self.template_name, {'orders': orders, return render(request, self.template_name, {'orders': orders,

@ -1,9 +1,10 @@
from django.contrib import admin from django.contrib import admin
from mptt.admin import MPTTModelAdmin from mptt.admin import MPTTModelAdmin
from .models import Location from .models import Location, MainPage
class LocationAdmin(MPTTModelAdmin): class LocationAdmin(MPTTModelAdmin):
readonly_fields = ('pk', 'lft', 'rght', 'tree_id', 'level') readonly_fields = ('pk', 'lft', 'rght', 'tree_id', 'level')
admin.site.register(Location, LocationAdmin) 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: class Meta:
verbose_name = 'Местоположение' verbose_name = 'Местоположение'
verbose_name_plural = 'Местоположения' 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 Django==1.9.6
Momoko==2.2.3
Pillow==3.2.0 Pillow==3.2.0
Werkzeug==0.11.10
backports-abc==0.4
django-appconf==1.0.2
django-compressor==2.0 django-compressor==2.0
django-debug-toolbar==1.4 django-debug-toolbar==1.4
django-environ==0.4.0 django-environ==0.4.0
django-extensions==1.6.7 django-extensions==1.6.7
django-filter==0.13.0 django-filter==0.13.0
django-guardian==1.4.4
django-mptt==0.8.4 django-mptt==0.8.4
django-registration-redux==1.4 django-registration-redux==1.4
django-treebeard==4.0.1 django-treebeard==4.0.1
djangorestframework==3.3.3 djangorestframework==3.3.3
djangorestframework-filters==0.8.0 djangorestframework-filters==0.8.0
fake-factory==0.5.7
jsonschema==2.5.1 jsonschema==2.5.1
psycopg2==2.6.1 psycopg2==2.6.1
pydash==3.4.3 pydash==3.4.3
python-dateutil==2.5.3
rcssmin==1.0.6
redis==2.10.5
requests==2.10.0 requests==2.10.0
rjsmin==1.0.12
six==1.10.0 six==1.10.0
sorl-thumbnail==12.3 sorl-thumbnail==12.3
sqlparse==0.1.19 sqlparse==0.1.19
tornado==4.3

@ -1,13 +1,13 @@
{% extends 'partials/base.html' %} {% extends 'partials/base.html' %}
{% load staticfiles %}
{% block content %} {% block content %}
<section class="mainContainer"> <section class="mainContainer">
{% include 'partials/header.html' %} {% include 'partials/header.html' %}
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
<p class="welcomeMain">Основная задача сайта</p> <p class="welcomeMain">Основная задача сайта</p>
<p> <p>
Authed? {{ request.user.is_authenticated }}c Authed? {{ request.user.is_authenticated }}c
{{ request.user }}<br> {{ request.user }}<br>
@ -20,9 +20,13 @@
<div class="row"> <div class="row">
<div class="col-lg-6"> <div class="col-lg-6">
<div class="changeBlock changeBlock1"> <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> <p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. {{ main_settings.contractor_text }}
</p> </p>
</div> </div>
<div class="square"> <div class="square">
@ -31,9 +35,13 @@
</div> </div>
<div class="col-lg-6"> <div class="col-lg-6">
<div class="changeBlock changeBlock2"> <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> <p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. {{ main_settings.customer_text }}
</p> </p>
</div> </div>
</div> </div>
@ -41,8 +49,55 @@
</div> </div>
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <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>
</div> </div>
</section> </section>
{% endblock %} {% 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 "lib/select2/css/select2.css" %}'>
<link rel='stylesheet' href='{% static "css/swiper.min.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 "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/main.css" %}'>
<link rel='stylesheet' href='{% static "css/extra.css" %}'> <!-- Our additional CSS --> <link rel='stylesheet' href='{% static "css/extra.css" %}'> <!-- Our additional CSS -->

@ -1,38 +1,57 @@
{% load staticfiles %} {% load staticfiles %}
<div class="wrTop {% if request.user.is_authenticated %} disTab {% endif %}">
<div class="container-fluid topMain">
<div class="wrTop disTab"> <div class="row">
<div class="container-fluid topMain"> <div class="col-lg-3">
<div class="row"> <div class="logo" onClick="window.location='/'"></div>
<div class="col-lg-3"> </div>
<div class="logo" onClick="window.location='/'"></div> {% if request.user.is_authenticated %}
</div> <div class="col-lg-7">
<div class="col-lg-7"> <ul class="mainMenu">
<ul class="mainMenu"> <li class="icon_tm1">
<li class="icon_tm1"> <a href="{% url 'projects:list' %}">Биржа проектов</a>
<a href="{% url 'projects:list' %}">Биржа проектов</a> <span></span>
<span></span> </li>
</li>
<li class="icon_tm2">
<a href="{% url 'users:contractor-list' %}">Поиск исполнителей</a>
<span></span>
</li>
<li>
{% if request.user.is_contractor %} {% 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 %} {% endif %}
</li> </ul>
</div>
{# <li class="icon_tm3">#} {% else %}
{# <a href="#">Работы на продажу</a>#} <div class="col-lg-7">
{# <span></span>#} <ul class="mainMenu">
{# </li>#} <li class="icon_tm1">
</ul> <a href="{% url 'projects:list' %}">Биржа проектов</a>
</div> <span></span>
<div class="col-lg-2"> </li>
<div class="imgProfile"> <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 %} {% if request.user.is_contractor %}
<a href="{% url 'users:contractor-profile' pk=request.user.pk %}"> <a href="{% url 'users:contractor-profile' pk=request.user.pk %}">
<img src="/media/img/profile.jpg" alt="profile-image"> <img src="/media/img/profile.jpg" alt="profile-image">
@ -42,67 +61,66 @@
<img src="/media/img/profile.jpg" alt="profile-image"> <img src="/media/img/profile.jpg" alt="profile-image">
</a> </a>
{% endif %} {% endif %}
</div> </div>
<div class="infoProfile disTab"> <div class="infoProfile disTab">
<div class="btn-group" role="group"> <div class="btn-group" role="group">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <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> <span class="glyphicon glyphicon-menu-hamburger" aria-hidden="true"></span>
</button> </button>
<ul class="dropdown-menu menu-drop-new"> <ul class="dropdown-menu menu-drop-new">
{% if not request.user.is_authenticated %} <li class="icon_mm1">
<li class="icon_mm1"> <a href="{% url 'auth_login' %}">
<a href="{% url 'auth_login' %}"> Войти заказчиком
Войти заказчиком <span></span>
<span></span> </a>
</a> </li>
</li> <li class="icon_mm2">
<li class="icon_mm2"> <a href="{% url 'auth_login' %}">
<a href="{% url 'auth_login' %}"> Войти исполнителем
Войти исполнителем <span></span>
<span></span> </a>
</a> </li>
</li> <li class="icon_mm3">
{% endif %} <a href="#">
<li class="icon_mm3"> Сообщения
<a href="#"> <span></span>
Сообщения </a>
<span></span> </li>
</a> <li class="icon_mm4">
</li> <a href="#">
<li class="icon_mm4"> Счет
<a href="#"> <span></span>
Счет </a>
<span></span> </li>
</a> <li class="icon_mm5">
</li> <a href="#">
<li class="icon_mm5"> Настройки
<a href="#"> <span></span>
Настройки </a>
<span></span> </li>
</a> <li class="icon_mm6">
</li> <a href="#">
<li class="icon_mm6"> FAQ
<a href="#"> <span></span>
FAQ </a>
<span></span> </li>
</a> </ul>
</li> </div>
{% if request.user.is_authenticated %} </div>
<li> {% if request.user.is_contractor %}
<a href="{% url 'auth_logout' %}"> <div class="rating">
Выйти <div class="ratingInset"></div>
</a> <div class="iconRating"></div>
</li> </div>
{% endif %} <p class="ratingPer">45%</p>
</ul> {% endif %}
</div> </div>
</div> {% else %}
<div class="rating"> <div class="col-lg-2">
<div class="ratingInset"></div> <a href="{% url 'registration_register' %}" class="reg">Регистрация</a>
<div class="iconRating"></div> <div class="lock"></div>
</div> </div>
<p class="ratingPer">45%</p> {% endif %}
</div> </div>
</div> </div>
</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' %} {% extends 'partials/base.html' %}
{% load thumbnail %}
{% block content %} {% block content %}
<div class="titleBlockComparison disTab"> <div class="titleBlockComparison disTab">
@ -9,10 +9,16 @@
<tbody><tr> <tbody><tr>
<th></th> <th></th>
<th></th> <th></th>
<th></th>
</tr> </tr>
{% for user in users %} {% for user in users %}
<tr> <tr>
<td>{{ forloop.counter }}</td> <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> <td>
{{ user.get_full_name }} {{ user.get_full_name }}
</td> </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.db import models
from django.utils import timezone
from sorl.thumbnail import ImageField from sorl.thumbnail import ImageField
from users.models import User from users.models import User
@ -9,6 +10,7 @@ class WorkSell(models.Model):
img = ImageField(upload_to='worksell/worksell') img = ImageField(upload_to='worksell/worksell')
price = models.DecimalField(max_digits=10, decimal_places=0, default=0) price = models.DecimalField(max_digits=10, decimal_places=0, default=0)
contractor = models.ForeignKey(User, related_name='work_sell') contractor = models.ForeignKey(User, related_name='work_sell')
created = models.DateTimeField(default=timezone.now)
def __str__(self): def __str__(self):
return self.name return self.name
@ -17,6 +19,7 @@ class WorkSell(models.Model):
pass pass
class Meta: class Meta:
ordering = ['-created']
verbose_name = 'Готовая работа' verbose_name = 'Готовая работа'
verbose_name_plural = 'Готовые работы' verbose_name_plural = 'Готовые работы'

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

@ -3,308 +3,262 @@
{% load thumbnail %} {% load thumbnail %}
{% block content %} {% block content %}
<div class="wrTop disTab"> <div class="wrTop disTab">
<div class="container-fluid topMain"> <div class="container-fluid topMain">
<div class="row"> <div class="row">
<div class="col-lg-3"> <div class="col-lg-3">
<div class="logo" onClick="window.location='/'"></div> <div class="logo" onClick="window.location='/'"></div>
</div> </div>
<div class="col-lg-7"> <div class="col-lg-7">
<ul class="mainMenu"> <ul class="mainMenu">
<li class="icon_tm1"> <li class="icon_tm1">
<a href="javascript:void(0)">Биржа проектов</a> <a href="javascript:void(0)">Биржа проектов</a>
<span></span> <span></span>
</li> </li>
<li class="icon_tm2"> <li class="icon_tm2">
<a href="javascript:void(0)">Поиск исполнителей</a> <a href="javascript:void(0)">Поиск исполнителей</a>
<span></span> <span></span>
</li> </li>
<li class="icon_tm3"> <li class="icon_tm3">
<a href="javascript:void(0)">Работы на продажу</a> <a href="javascript:void(0)">Работы на продажу</a>
<span></span> <span></span>
</li> </li>
</ul> </ul>
</div> </div>
<div class="col-lg-2"> <div class="col-lg-2">
<div class="imgProfile"> <div class="imgProfile">
<img src="img/profile.jpg" alt="profile-image"> <img src="img/profile.jpg" alt="profile-image">
</div> </div>
<div class="infoProfile disTab"> <div class="infoProfile disTab">
<div class="btn-group" role="group"> <div class="btn-group" role="group">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"
<span class="glyphicon glyphicon-menu-hamburger" aria-hidden="true"></span> aria-haspopup="true" aria-expanded="false">
</button> <span class="glyphicon glyphicon-menu-hamburger" aria-hidden="true"></span>
<ul class="dropdown-menu menu-drop-new"> </button>
<li class="icon_mm1"> <ul class="dropdown-menu menu-drop-new">
<a href="#"> <li class="icon_mm1">
Войти заказчиком <a href="#">
<span></span> Войти заказчиком
</a> <span></span>
</li> </a>
<li class="icon_mm2"> </li>
<a href="#"> <li class="icon_mm2">
Войти исполнителем <a href="#">
<span></span> Войти исполнителем
</a> <span></span>
</li> </a>
<li class="icon_mm3"> </li>
<a href="#"> <li class="icon_mm3">
Сообщения <a href="#">
<span></span> Сообщения
</a> <span></span>
</li> </a>
<li class="icon_mm4"> </li>
<a href="#"> <li class="icon_mm4">
Счет <a href="#">
<span></span> Счет
</a> <span></span>
</li> </a>
<li class="icon_mm5"> </li>
<a href="#"> <li class="icon_mm5">
Настройки <a href="#">
<span></span> Настройки
</a> <span></span>
</li> </a>
<li class="icon_mm6"> </li>
<a href="#"> <li class="icon_mm6">
FAQ <a href="#">
<span></span> FAQ
</a> <span></span>
</li> </a>
</ul> </li>
</div> </ul>
</div> </div>
<div class="rating"> </div>
<div class="ratingInset"></div> <div class="rating">
<div class="iconRating"></div> <div class="ratingInset"></div>
</div> <div class="iconRating"></div>
<p class="ratingPer">45%</p> </div>
</div> <p class="ratingPer">45%</p>
</div> </div>
</div> </div>
</div> </div>
<div class="container mainScore"> </div>
<div class="row"> <div class="container mainScore">
<div class="col-lg-12"> <div class="row">
<p class="titleScore">Работы на продажу</p> <div class="col-lg-12">
</div> <p class="titleScore">Работы на продажу</p>
<div class="col-lg-12"> </div>
<div class="filter clearfix"> <div class="col-lg-12">
<div class="triangle1"></div> <div class="filter clearfix">
<div class="titleF1 disTab"> <div class="triangle1"></div>
<div class="col-lg-3">Тип работ:</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 class="col-lg-3"></div>
</div> <div class="col-lg-3"></div>
<div class="polsF1 disTab"> </div>
<div class="col-lg-3"> <div class="polsF1 disTab">
<select class="selectpicker"> <div class="col-lg-3">
<option>Mustard</option> <select class="selectpicker">
</select> <option>Mustard</option>
</div> </select>
<div class="col-lg-3"> </div>
<select class="selectpicker"> <div class="col-lg-3">
<option>Mustard</option> <select class="selectpicker">
</select> <option>Mustard</option>
</div> </select>
<div class="col-lg-3"> </div>
<select class="selectpicker"> <div class="col-lg-3">
<option>Mustard</option> <select class="selectpicker">
</select> <option>Mustard</option>
</div> </select>
<div class="col-lg-3"> </div>
<select class="selectpicker"> <div class="col-lg-3">
<option>Mustard</option> <select class="selectpicker">
<option>Mustard</option>
</select> </select>
</div> </div>
</div> </div>
<div class="titleF1 titleF2 disTab"> <div class="titleF1 titleF2 disTab">
<div class="col-lg-4">Тип работ:</div> <div class="col-lg-4">Тип работ:</div>
<div class="col-lg-8">Специализации:</div> <div class="col-lg-8">Специализации:</div>
</div> </div>
<div class="searchF1 polsF1 polsFF"> <div class="searchF1 polsF1 polsFF">
<div class="col-lg-4"> <div class="col-lg-4">
<input type="text" placeholder="От" class="box-sizing otInp"> <input type="text" placeholder="От" class="box-sizing otInp">
<input type="text" placeholder="До" class="box-sizing otInp"> <input type="text" placeholder="До" class="box-sizing otInp">
<select class="selectpicker2 valul"> <select class="selectpicker2 valul">
<option>&#36;</option> <option>&#36;</option>
<option>&#36;</option> <option>&#36;</option>
<option>&#36;</option> <option>&#36;</option>
</select> </select>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<select class="selectpicker"> <select class="selectpicker">
<option>Mustard</option> <option>Mustard</option>
</select> </select>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<a href="javascript:void(0)" class="findReal"> <a href="javascript:void(0)" class="findReal">
найти исполнителя найти исполнителя
</a> </a>
</div> </div>
<div class="col-lg-2"> <div class="col-lg-2">
<a href="javascript:void(0)" class="clearSearch"> <a href="javascript:void(0)" class="clearSearch">
Очистить фильтр Очистить фильтр
</a> </a>
</div> </div>
</div> </div>
<div class="resSearchF1"> <div class="resSearchF1">
<div class="col-lg-3"> <div class="col-lg-3">
<p class="titleResF1">Расширенный поиск</p> <p class="titleResF1">Расширенный поиск</p>
<button class="resButtonF1"> <button class="resButtonF1">
<span class="glyphicon glyphicon-arrow-up" aria-hidden="true"></span> <span class="glyphicon glyphicon-arrow-up" aria-hidden="true"></span>
</button> </button>
</div> </div>
<div class="col-lg-9"> <div class="col-lg-9">
<div class="borderS1"></div> <div class="borderS1"></div>
</div> </div>
</div> </div>
<div class="slideRes disTab activeSlide"> <div class="slideRes disTab activeSlide">
<div class="titleF1 disTab"> <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 class="col-lg-3"></div>
<div class="col-lg-3">Специализации:</div> <div class="col-lg-3">Специализации:</div>
</div> </div>
<div class="polsF1 polsF2 disTab"> <div class="polsF1 polsF2 disTab">
<div class="col-lg-3"> <div class="col-lg-3">
<select class="selectpicker"> <select class="selectpicker">
<option>Mustard</option> <option>Mustard</option>
</select> </select>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<select class="selectpicker"> <select class="selectpicker">
<option>Mustard</option> <option>Mustard</option>
</select> </select>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<select class="selectpicker"> <select class="selectpicker">
<option>Mustard</option> <option>Mustard</option>
</select> </select>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<select class="selectpicker"> <select class="selectpicker">
<option>Mustard</option> <option>Mustard</option>
</select> </select>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="galleryWork disTab"> <div class="galleryWork disTab">
{% for work in object_list %} {% 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="col-lg-3">
<div class="insetCol box-sizing disTab"> <div class="insetCol box-sizing disTab">
{% thumbnail work.img "265x265" crop="center" as im %} <a href="{% url 'work_sell:detail' work.pk %}">
<div class="imgGal" style="background: url('{{ im.url }}') no-repeat center;"> {% thumbnail work.img "265x265" crop="center" as im %}
<div class="imgFigure"></div> <div class="imgGal" style="background: url('{{ im.url }}') no-repeat center;">
</div> <div class="imgFigure"></div>
{% endthumbnail %} </div>
<div class="cenaImg box-sizing"> {% endthumbnail %}
<div class="cenaImgInset"> </a>
{{ work.price }} <i class="fa fa-rub"></i> <div class="cenaImg box-sizing">
</div> <div class="cenaImgInset">
</div> {{ work.price }} <i class="fa fa-rub"></i>
</div> </div>
<div class="insetCol2 box-sizing disTab"> </div>
<p>{{ work }}</p> </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="buttonsImg" disTab> <div class="insetBI insetBI1">
<div class="insetBI insetBI1"> <i class="fa fa-pencil"></i>
<i class="fa fa-pencil"></i> </div>
</div> <div class="insetBI insetBI2">
<div class="insetBI insetBI2"> <i class="fa fa-times"></i>
<i class="fa fa-times"></i> </div>
</div> </div>
</div> </div>
</div> </div>
</div>
{% endfor %} {% endfor %}
</div> </div>
<div class="col-lg-12 pagin"> {% if is_paginated %}
<nav> <div class="col-lg-12 pagin">
<ul class="pagination"> <nav>
<li> <ul class="pagination">
<a href="#" aria-label="Previous"> {% if page_obj.has_previous %}
<span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span> <li>
</a> <a href="?page={{ page_obj.previous_page_number }}" aria-label="Previous">
</li> <span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
<li class="active"><a href="#">1</a></li> </a>
<li><a href="#">2</a></li> </li>
<li><a href="#">3</a></li> {% endif %}
<li><a href="#">4</a></li> {% for page_number in paginator.page_range %}
<li><a href="#">5</a></li> {% if page_number == page_obj.number %}
<li>...</li> <li class="active"><a href="#">{{ page_number }}</a></li>
<li><a href="#">17</a></li> {% else %}
<li> <li><a href="?page={{ page_number }}">{{ page_number }}</a></li>
<a href="#" aria-label="Next"> {% endif %}
<span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span> {% endfor %}
</a>
</li> {% if page_obj.has_next %}
</ul> <li>
</nav> <a href="?page={{ page_obj.next_page_number }}" aria-label="Next">
</div> <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
</a>
</li>
{% endif %}
</ul>
</nav>
</div>
{% endif %}
{% include 'partials/footer.html' %} {% include 'partials/footer.html' %}
</div> </div>
</div> </div>
{% endblock %} {% endblock %}

@ -1,5 +1,5 @@
from django.shortcuts import render 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 from .models import WorkSell
@ -7,8 +7,26 @@ from .models import WorkSell
class WorkSellsView(ListView): class WorkSellsView(ListView):
model = WorkSell model = WorkSell
template_name = 'worksells_list.html' template_name = 'worksells_list.html'
paginate_by = 20
class WorkSellDetail(DetailView): class WorkSellDetail(DetailView):
model = WorkSell model = WorkSell
template_name = 'worksell_detail.html' 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