remotes/origin/setup
ArturBaybulatov 10 years ago
parent d369019f30
commit 6909abe875
  1. 6
      projects/forms.py
  2. 1
      projects/models.py
  3. 38
      projects/templates/project_filter.html
  4. 5
      projects/views.py
  5. 250
      templates/partials/header.html
  6. 50
      templates/partials/pagination.html
  7. 19
      templates/trash/contractor-filter.html
  8. 56
      users/forms.py
  9. 1
      users/models.py
  10. 261
      users/templates/contractor_filter.html
  11. 7
      users/templates/contractor_list.html
  12. 16
      users/urls.py
  13. 138
      users/views.py
  14. 296
      work_sell/templates/worksells_list.html

@ -10,11 +10,6 @@ from common.models import Location
from users.models import User from users.models import User
# RealtyFormSet = inlineformset_factory(Project, Realty)
class ProjectFilterForm(forms.ModelForm): class ProjectFilterForm(forms.ModelForm):
PROJECT_ORDER_CHOICES = ( # "Упорядочить по"... PROJECT_ORDER_CHOICES = ( # "Упорядочить по"...
('name', 'названию'), ('name', 'названию'),
@ -50,7 +45,6 @@ class ProjectFilterForm(forms.ModelForm):
self.fields['work_type'].initial = '' self.fields['work_type'].initial = ''
self.fields['specialization'].required = False self.fields['specialization'].required = False
self.fields['specialization'].queryset = Specialization.objects.root_nodes()[0].get_descendants() self.fields['specialization'].queryset = Specialization.objects.root_nodes()[0].get_descendants()

@ -6,6 +6,7 @@ from django.utils import timezone
from users.models import User from users.models import User
from specializations.models import Specialization from specializations.models import Specialization
CURRENCIES = ( CURRENCIES = (
('rur', 'RUR'), ('rur', 'RUR'),
('usd', 'USD'), ('usd', 'USD'),

@ -234,44 +234,14 @@
<div class="col-lg-12 pagin"> <div class="col-lg-12 pagin">
{% if is_paginated %} {% include 'partials/pagination.html' %}
<nav>
<ul class="pagination">
{% if projects.has_previous %}
<li>
<button type="submit" name="page" value="{{ projects.previous_page_number }}">Previous</button>
</li>
{% endif %}
{% for n in projects.paginator.page_range %}
{% if n == projects.number %}
<li class="i active">
<button type="submit" name="page" value="{{ n }}" class="i" disabled>{{ n }}</button>
</li>
{% else %}
<li>
<button type="submit" name="page" value="{{ n }}">{{ n }}</button>
</li>
{% endif %}
{% endfor %}
{% if projects.has_next %}
<li>
<button type="submit" name="page" value="{{ projects.next_page_number }}">Next</button>
</li>
{% endif %}
</ul>
</nav>
{% else %}
{% include 'partials/pagination.html' %}
{% endif %}
</div> </div>
</form> </form>
{% include 'partials/footer.html' %} {% include 'partials/footer.html' %}
</div> </div>
</div> </div>

@ -10,7 +10,7 @@ from django.views.generic import ListView, DetailView, CreateView, View, UpdateV
from django.views.generic.base import ContextMixin from django.views.generic.base import ContextMixin
from pprint import pprint, pformat from pprint import pprint, pformat
import json import json
import pydash as _ import pydash as _; _.map = _.map_; _.filter = _.filter_
import re import re
from .mixins import LastAccessMixin from .mixins import LastAccessMixin
@ -131,13 +131,12 @@ class ProjectFilterView(BaseMixin, View):
except EmptyPage: except EmptyPage:
projects = paginator.page(paginator.num_pages) projects = paginator.page(paginator.num_pages)
# import code; code.interact(local=dict(globals(), **locals()))
context.update({ context.update({
'form': form, 'form': form,
'realty_form': realty_form, 'realty_form': realty_form,
'projects': projects, 'projects': projects,
'is_paginated': True, 'is_paginated': True,
'page_obj': projects,
'display_msg': display_msg, 'display_msg': display_msg,
}) })

@ -1,131 +1,137 @@
{% load staticfiles %} {% load staticfiles %}
{% load thumbnail %} {% load thumbnail %}
<div class="wrTop {% if request.user.is_authenticated %} disTab {% endif %}">
<div class="container-fluid topMain"> <div class="wrTop {% if request.user.is_authenticated %} disTab {% endif %}">
<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">
<ul class="mainMenu"> {% if request.user.is_authenticated %}
<li class="icon_tm1"> <div class="col-lg-7">
<a href="{% url 'projects:project-filter' %}">Биржа проектов</a> <ul class="mainMenu">
<span></span> <li class="icon_tm1">
</li> <a href="{% url 'projects:project-filter' %}">Биржа проектов</a>
<span></span>
</li>
{% if request.user.is_contractor %} {% if request.user.is_contractor %}
<li class="officeList icon_tml"> <li class="officeList icon_tml">
<a href="{% url 'users:contractor-office' pk=request.user.pk %}">Мой офис</a> <a href="{% url 'users:contractor-office' pk=request.user.pk %}">Мой офис</a>
<span></span> <span></span>
</li> </li>
{% endif%} {% endif%}
{% if request.user.is_customer %} {% if request.user.is_customer %}
<li class="icon_tm2"> <li class="icon_tm2">
<a href="{% url 'users:contractor-list' %}">Поиск исполнителей</a> <a href="{% url 'users:contractor-filter' %}">Поиск исполнителей</a>
<span></span> <span></span>
</li> </li>
<li class="icon_tm3"> <li class="icon_tm3">
<a href="{% url 'users:contractor-list' %}">Работы на продажу</a> <a href="#">Работы на продажу</a>
<span></span> <span></span>
</li> </li>
{% endif %} {% endif %}
</ul> </ul>
</div> </div>
{% else %} {% else %}
<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:project-filter' %}">Биржа проектов</a> <a href="{% url 'projects:project-filter' %}">Биржа проектов</a>
<span></span> <span></span>
</li> </li>
<li class="icon_tm2"> <li class="icon_tm2">
<a href="{% url 'users:contractor-list' %}">Поиск исполнителей</a> <a href="{% url 'users:contractor-filter' %}">Поиск исполнителей</a>
<span></span> <span></span>
</li> </li>
<li class="icon_tm3"> <li class="icon_tm3">
<a href="{% url 'users:contractor-list' %}">Работы на продажу</a> <a href="#">Работы на продажу</a>
<span></span> <span></span>
</li> </li>
</ul> </ul>
</div> </div>
{% endif %} {% endif %}
{% if request.user.is_authenticated %}
<div class="col-lg-2"> {% if request.user.is_authenticated %}
<div class="imgProfile"> <div class="col-lg-2">
{% if request.user.is_contractor %} <div class="imgProfile">
<a href="{% url 'users:contractor-profile' pk=request.user.pk %}"> {% if request.user.is_contractor %}
{% thumbnail request.user.avatar "75x75" crop="center" as im %} <a href="{% url 'users:contractor-profile' pk=request.user.pk %}">
<img src="{{ im.url }}" alt="profile-image"> {% thumbnail request.user.avatar "75x75" crop="center" as im %}
{% endthumbnail %} <img src="{{ im.url }}" alt="profile-image">
</a> {% endthumbnail %}
{% elif request.user.is_customer %} </a>
<a href="{% url 'users:customer-profile-open-projects' pk=request.user.pk %}"> {% elif request.user.is_customer %}
{% thumbnail request.user.avatar "75x75" crop="center" as im %} <a href="{% url 'users:customer-profile-open-projects' pk=request.user.pk %}">
<img src="{{ im.url }}" alt="profile-image"> {% thumbnail request.user.avatar "75x75" crop="center" as im %}
{% endthumbnail %} <img src="{{ im.url }}" alt="profile-image">
</a> {% endthumbnail %}
{% endif %} </a>
</div> {% endif %}
<div class="infoProfile disTab"> </div>
<div class="btn-group" role="group">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <div class="infoProfile disTab">
<span class="glyphicon glyphicon-menu-hamburger" aria-hidden="true"></span> <div class="btn-group" role="group">
</button> <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<ul class="dropdown-menu menu-drop-new"> <span class="glyphicon glyphicon-menu-hamburger" aria-hidden="true"></span>
<li class="icon_mm1"> </button>
<a href="{% url 'auth_login' %}"> <ul class="dropdown-menu menu-drop-new">
Войти заказчиком <li class="icon_mm1">
<span></span> <a href="{% url 'auth_login' %}">
</a> Войти заказчиком
</li> <span></span>
<li class="icon_mm2"> </a>
<a href="{% url 'auth_login' %}"> </li>
Войти исполнителем <li class="icon_mm2">
<span></span> <a href="{% url 'auth_login' %}">
</a> Войти исполнителем
</li> <span></span>
<li class="icon_mm3"> </a>
<a href="#"> </li>
Сообщения <li class="icon_mm3">
<span></span> <a href="#">
</a> Сообщения
</li> <span></span>
<li class="icon_mm4"> </a>
<a href="#"> </li>
Счет <li class="icon_mm4">
<span></span> <a href="#">
</a> Счет
</li> <span></span>
<li class="icon_mm5"> </a>
<a href="#"> </li>
Настройки <li class="icon_mm5">
<span></span> <a href="#">
</a> Настройки
</li> <span></span>
<li class="icon_mm6"> </a>
<a href="#"> </li>
FAQ <li class="icon_mm6">
<span></span> <a href="#">
</a> FAQ
</li> <span></span>
</ul> </a>
</div> </li>
</div> </ul>
</div>
</div>
{% if request.user.is_contractor %} {% if request.user.is_contractor %}
<div class="rating"> <div class="rating">
<div class="ratingInset"></div> <div class="ratingInset"></div>
<div class="iconRating"></div> <div class="iconRating"></div>
</div> </div>
<p class="ratingPer">45%</p> <p class="ratingPer">45%</p>
{% endif %} {% endif %}
</div> </div>
{% else %} {% else %}
<div class="col-lg-2"> <div class="col-lg-2">
<a href="{% url 'registration_register' %}" class="reg">Регистрация</a> <a href="{% url 'registration_register' %}" class="reg">Регистрация</a>
<div class="lock"></div> <div class="lock"></div>
</div> </div>
{% endif %} {% endif %}
</div> </div>
</div> </div>
</div> </div>

@ -1,21 +1,29 @@
<nav> {% if is_paginated %}
<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> <button type="submit" name="page" value="{{ page_obj.previous_page_number }}">Previous</button>
</li> </li>
<li class="active"><a href="#">1</a></li> {% endif %}
<li><a href="#">2</a></li>
<li><a href="#">3</a></li> {% for n in page_obj.paginator.page_range %}
<li><a href="#">4</a></li> {% if n == page_obj.number %}
<li><a href="#">5</a></li> <li class="i active">
<li>...</li> <button type="submit" name="page" value="{{ n }}" class="i" disabled>{{ n }}</button>
<li><a href="#">17</a></li> </li>
<li> {% else %}
<a href="#" aria-label="Next"> <li>
<span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span> <button type="submit" name="page" value="{{ n }}">{{ n }}</button>
</a> </li>
</li> {% endif %}
</ul> {% endfor %}
</nav>
{% if page_obj.has_next %}
<li>
<button type="submit" name="page" value="{{ page_obj.next_page_number }}">Next</button>
</li>
{% endif %}
</ul>
</nav>
{% endif %}

@ -21,6 +21,7 @@
<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">
@ -37,6 +38,7 @@
</li> </li>
</ul> </ul>
</div> </div>
<div class="mLeft"> <div class="mLeft">
<div class="imgProfile"> <div class="imgProfile">
<img src="img/profile.jpg" alt="profile-image"> <img src="img/profile.jpg" alt="profile-image">
@ -95,11 +97,15 @@
</div> </div>
</div> </div>
</div> </div>
<div class="container mainScore"> <div class="container mainScore">
<div class="row"> <div class="row">
<div class="col-lg-12"> <div class="col-lg-12">
<p class="titleScore">Поиск исполнителей</p> <p class="titleScore">Поиск исполнителей</p>
</div> </div>
<div class="col-lg-12"> <div class="col-lg-12">
<div class="filter clearfix"> <div class="filter clearfix">
<div class="triangle1"></div> <div class="triangle1"></div>
@ -171,6 +177,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="buttonGP disTab"> <div class="buttonGP disTab">
<div class="btn-group valProject valProject2" role="group" aria-label="..."> <div class="btn-group valProject valProject2" role="group" aria-label="...">
<button type="button" class="btn btn-default">Все</button> <button type="button" class="btn btn-default">Все</button>
@ -187,6 +194,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="executorBlock clearfix"> <div class="executorBlock clearfix">
<div class="col-lg-4"> <div class="col-lg-4">
<a href="#" class="aLinkExe"><div class="imgExecutor"> <a href="#" class="aLinkExe"><div class="imgExecutor">
@ -305,6 +313,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="executorBlock clearfix"> <div class="executorBlock clearfix">
<div class="col-lg-4"> <div class="col-lg-4">
<a href="#" class="aLinkExe"><div class="imgExecutor"> <a href="#" class="aLinkExe"><div class="imgExecutor">
@ -423,6 +432,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="executorBlock clearfix"> <div class="executorBlock clearfix">
<div class="col-lg-4"> <div class="col-lg-4">
<a href="#" class="aLinkExe"><div class="imgExecutor"> <a href="#" class="aLinkExe"><div class="imgExecutor">
@ -541,6 +551,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="executorBlock clearfix"> <div class="executorBlock clearfix">
<div class="col-lg-4"> <div class="col-lg-4">
<a href="#" class="aLinkExe"><div class="imgExecutor"> <a href="#" class="aLinkExe"><div class="imgExecutor">
@ -659,6 +670,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="col-lg-12 pagin"> <div class="col-lg-12 pagin">
<nav> <nav>
<ul class="pagination"> <ul class="pagination">
@ -682,6 +694,7 @@
</ul> </ul>
</nav> </nav>
</div> </div>
<footer class="disTab"> <footer class="disTab">
<div class="col-lg-4"> <div class="col-lg-4">
<div class="logoF" onclick="window.location='/'"></div> <div class="logoF" onclick="window.location='/'"></div>
@ -734,10 +747,14 @@
</footer> </footer>
</div> </div>
</div> </div>
<script src="js/jquery-2.2.3.min.js"></script> <script src="js/jquery-2.2.3.min.js"></script>
<script src="js/bootstrap.min.js"></script> <script src="js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.10.0/js/bootstrap-select.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.10.0/js/bootstrap-select.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.10.0/js/i18n/defaults-*.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.10.0/js/i18n/defaults-*.min.js"></script>
<script src="js/main.js"></script> <script src="js/main.js"></script>
</body> </body>
</html> </html>

@ -1,20 +1,22 @@
from django import forms from django import forms
from django.forms import ModelForm from django.forms import ModelForm
from specializations.models import Specialization
from .models import User, ContractorFinancialInfo from .models import User, ContractorFinancialInfo
from common.models import Location
from specializations.models import Specialization
class UserEditForm(ModelForm): class UserEditForm(ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
# import code; code.interact(local=dict(globals(), **locals()))
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
if kwargs.get('instance'): if kwargs.get('instance'):
if kwargs.get('instance').is_contractor(): if kwargs.get('instance').is_contractor():
self.fields['contractor_specializations'].queryset = kwargs.get('instance').contractor_specializations.all() self.fields['contractor_specializations'].queryset = kwargs.get('instance').contractor_specializations.all()
class Meta: class Meta:
model = User model = User
fields = ( fields = (
'first_name', 'first_name',
'last_name', 'last_name',
@ -36,8 +38,56 @@ class UserEditForm(ModelForm):
} }
class ContractorFinancicalInfoForm(ModelForm): class ContractorFilterForm(forms.ModelForm):
# PROJECT_ORDER_CHOICES = ( # "Упорядочить по"...
# ('name', 'названию'),
# ('budget', 'цене'),
# ('created', 'дате размещения'),
# ('views', 'просмотрам'),
# )
#
# order_by = forms.ChoiceField(required=False, choices=PROJECT_ORDER_CHOICES)
# last_order_by = forms.ChoiceField(required=False, choices=PROJECT_ORDER_CHOICES)
# reverse_order = forms.BooleanField(required=False)
# keywords = forms.CharField(required=False, max_length=255)
specialization = forms.ModelChoiceField(
queryset=Specialization.objects.root_nodes()[0].get_descendants(),
required=False,
)
location = forms.ModelChoiceField(
queryset=Location.objects.root_nodes()[0].get_descendants(),
required=False,
)
class Meta:
model = User
fields = (
# 'cro',
# 'specialization',
# 'work_type',
)
# widgets = {
# 'work_type': forms.Select(attrs={'class': 'selectpicker'}),
# }
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request')
super().__init__(*args, **kwargs)
# self.fields['work_type'].choices = tuple(itertools.chain((('',''),), self.fields['work_type'].choices))
# self.fields['work_type'].required = False
# self.fields['work_type'].initial = ''
#
# self.fields['specialization'].required = False
#
# self.fields['specialization'].queryset = Specialization.objects.root_nodes()[0].get_descendants()
class ContractorFinancicalInfoForm(ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.fields['residency'].choices = self.fields['residency'].choices[1:] self.fields['residency'].choices = self.fields['residency'].choices[1:]

@ -176,7 +176,6 @@ class User(AbstractBaseUser, PermissionsMixin):
def is_owner_profile(self, user_id): def is_owner_profile(self, user_id):
pass pass
# return
class Team(models.Model): class Team(models.Model):

@ -0,0 +1,261 @@
{% extends 'partials/base.html' %}
{% load common_tags %}
{% block content %}
{% include 'partials/header.html' %}
<div class="container mainScore">
<div class="row">
<div class="col-lg-12">
<p class="titleScore">Поиск исполнителей</p>
</div>
<form action="{% url 'users:contractor-filter' %}" method="GET" novalidate>
<div class="col-lg-12">
<div class="filter clearfix">
<div class="triangle1"></div>
<div class="titleF1 disTab">
<div class="col-lg-3">Специализации</div>
</div>
<div class="polsF1 disTab">
<div class="col-lg-3">
<input type="hidden" class="-spec-select -spec-select-level-1" style="width: 100%">
</div>
<div class="col-lg-3">
<input type="hidden" class="-spec-select -spec-select-level-2" style="width: 100%">
</div>
<div class="col-lg-3">
<input type="hidden" class="-spec-select -spec-select-level-3" style="width: 100%">
</div>
<div class="col-lg-3">
<input type="hidden" class="-spec-select -spec-select-level-4" style="width: 100%">
</div>
<input type="hidden" id="chosenSpecId" name="{{ form.specialization.html_name }}" value="{{ form.specialization.value }}">
</div>
<div class="titleF1 titleF2 disTab">
<div class="col-lg-3">Местоположение</div>
</div>
<div class="searchF1 polsF1 polsFF polsF3">
<div class="col-lg-3">
<input type="hidden" class="-location-select -location-select-country" style="width: 100%">
</div>
<div class="col-lg-3">
<input type="hidden" class="-location-select -location-select-region" style="width: 100%">
</div>
<div class="col-lg-3">
<input type="hidden" class="-location-select -location-select-city" style="width: 100%">
</div>
<input type="hidden" id="chosenLocationId" name="{{ form.location.html_name }}" value="{{ form.location.value }}">
<div class="col-lg-3">
<a href="#" class="findReal" onclick="$(this).closest('form').submit(); return false">
найти исполнителя
</a>
</div>
<div class="col-lg-3">
<a href="{% url 'users:contractor-filter' %}" 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>
</div>
<div class="buttonGP disTab">
<div class="btn-group valProject valProject2" role="group" aria-label="...">
<button type="button" class="btn btn-default">Все</button>
<button type="button" class="btn btn-default">Группы</button>
<button type="button" class="btn btn-default">Исполнители</button>
</div>
<div class="polsF1 disTab polsSearch">
<div class="col-lg-3">
<select class="selectpicker">
<option>Mustard</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
</div>
</div>
</div>
{% for contractor in contractors %}
<div class="executorBlock clearfix">
<div class="col-lg-4">
<a href="#" class="aLinkExe"><div class="imgExecutor">
<img src="img/profile.jpg" alt="execitor-image">
</div></a>
<p class="nameExecutor">
<a href="#">{{ contractor.get_full_name }} [{{ contractor.username }}]</a>
</p>
<p class="navv2">На сайте 8 лет и 3 месяца</p>
<div class="statusUser">Свободен</div>
</div>
<div class="col-lg-2">
<ul class="listExecutor">
<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">
<div class="dashedCol4 dashedCol44">
<p class="specUser">
Специализации:
</p>
<div class="insetSpec">
<span>Интерьеры</span>
<span>2-й</span>
</div>
<div class="insetSpec">
<span>Визуализация/3D</span>
<span>45-й</span>
</div>
<div class="insetSpec">
<span>Экстерьеры</span>
<span>10-й</span>
</div>
<div class="showSpec">
<div class="insetSpec">
<span>Архитектура</span>
<span>3-й</span>
</div>
<div class="insetSpec">
<span>3D Моделирование</span>
<span>100-й</span>
</div>
</div>
<button class="showPress">
</button>
</div>
</div>
<div class="col-lg-3 retts">
<ul class="rettList restList2">
<li>Рейтинг: <span> 1245</span></li>
<li>Безопасные сделки: <span> 5</span></li>
<li>
<a href="javascript:void(0)">Отзывы:
<span> + 385</span>
<small> 0</small>
<mark> - 0</mark>
</a>
</li>
</ul>
<div class="sroUser sroExecutor">
<div class="iconSRO"></div>
<p>Есть допуск СРО</p>
</div>
</div>
<div class="gallMini disTab">
<div class="col-lg-3">
<a href="#" class="linkInsetCol">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
<div class="imgFigure"></div>
</div>
</div>
</a>
</div>
<div class="col-lg-3">
<a href="#" class="linkInsetCol">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
<div class="imgFigure"></div>
</div>
</div>
</a>
</div>
<div class="col-lg-3">
<a href="#" class="linkInsetCol">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
<div class="imgFigure"></div>
</div>
</div>
</a>
</div>
<div class="col-lg-3">
<a href="#" class="linkInsetCol">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
<div class="imgFigure"></div>
</div>
</div>
</a>
</div>
</div>
</div>
{% endfor %}
<div class="col-lg-12 pagin">
{% include 'partials/pagination.html' %}
</div>
</form>
{% include 'partials/footer.html' %}
</div>
</div>
{% endblock %}

@ -1,7 +0,0 @@
{% extends 'partials/base.html' %}
{% block content %}
<h1>Исполнители</h1>
{% endblock %}

@ -3,21 +3,21 @@ from django.conf.urls import include
from django.contrib.auth.views import login, logout from django.contrib.auth.views import login, logout
from .views import ( from .views import (
ContractorListView, # UserDetailView,
# UserInfoListView,
# UserView,
ContractorFilterView,
ContractorFinancialInfoEdit,
ContractorOfficeDetailView, ContractorOfficeDetailView,
ContractorProfileDetailView, ContractorProfileDetailView,
ContractorProfileEditView, ContractorProfileEditView,
CustomerProfileCurrentProjectsView, CustomerProfileCurrentProjectsView,
CustomerProfileEditView,
CustomerProfileOpenProjectsView, CustomerProfileOpenProjectsView,
CustomerProfileReviewsView, CustomerProfileReviewsView,
CustomerProfileTrashedProjectsView, CustomerProfileTrashedProjectsView,
ContractorFinancialInfoEdit,
CustomerProfileEditView,
# UserDetailView,
# UserInfoListView,
UserListView,
# UserView,
send_mail_test, send_mail_test,
UserListView,
) )
@ -30,13 +30,13 @@ urlpatterns = [
urls.url(r'^customers/(?P<pk>\d+)/current-projects/$', CustomerProfileCurrentProjectsView.as_view(), name='customer-profile-current-projects'), urls.url(r'^customers/(?P<pk>\d+)/current-projects/$', CustomerProfileCurrentProjectsView.as_view(), name='customer-profile-current-projects'),
urls.url(r'^customers/(?P<pk>\d+)/reviews/$', CustomerProfileReviewsView.as_view(), name='customer-profile-reviews'), urls.url(r'^customers/(?P<pk>\d+)/reviews/$', CustomerProfileReviewsView.as_view(), name='customer-profile-reviews'),
urls.url(r'contractors/$', ContractorFilterView.as_view(), name='contractor-filter'),
urls.url(r'^contractors/(?P<pk>\d+)/$', ContractorProfileDetailView.as_view(), name='contractor-profile'), urls.url(r'^contractors/(?P<pk>\d+)/$', ContractorProfileDetailView.as_view(), name='contractor-profile'),
urls.url(r'^contractor-office/(?P<pk>\d+)/$', ContractorOfficeDetailView.as_view(), name='contractor-office'), urls.url(r'^contractor-office/(?P<pk>\d+)/$', ContractorOfficeDetailView.as_view(), name='contractor-office'),
# urls.url(r'^profile/$', UserDetailView.as_view(), name='user-detail'), # urls.url(r'^profile/$', UserDetailView.as_view(), name='user-detail'),
urls.url(r'^$', UserListView.as_view(), name='users_list'), urls.url(r'^$', UserListView.as_view(), name='users_list'),
urls.url(r'^test/$', send_mail_test), urls.url(r'^test/$', send_mail_test),
# urls.url(r'^info$', UserInfoListView.as_view(), name='users_info_list'), # urls.url(r'^info$', UserInfoListView.as_view(), name='users_info_list'),
urls.url(r'contractors/$', ContractorListView.as_view(), name='contractor-list'),
# urls.url(r'^(?P<pk>\d+)/$', UserView.as_view(), name='user_view'), # urls.url(r'^(?P<pk>\d+)/$', UserView.as_view(), name='user_view'),
urls.url(r'contractors/(?P<pk>\d+)/edit/$', ContractorProfileEditView.as_view(), name='contractor-edit'), urls.url(r'contractors/(?P<pk>\d+)/edit/$', ContractorProfileEditView.as_view(), name='contractor-edit'),
urls.url(r'customers/(?P<pk>\d+)/edit/$', CustomerProfileEditView.as_view(), name='customers-edit'), urls.url(r'customers/(?P<pk>\d+)/edit/$', CustomerProfileEditView.as_view(), name='customers-edit'),

@ -1,21 +1,23 @@
from django.shortcuts import render, get_object_or_404, redirect from django.conf import settings
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.models import Group from django.contrib.auth.models import Group
from django.views.generic import ListView, DetailView, View, UpdateView, CreateView from django.core.mail import send_mail
from django.views.generic.base import TemplateView from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.http import HttpResponse
from django.shortcuts import render, get_object_or_404, redirect
from django.views.generic import ListView, DetailView, View, UpdateView, CreateView
from pprint import pprint, pformat
import pydash as _; _.map = _.map_; _.filter = _.filter_
from .forms import UserEditForm, ContractorFilterForm, ContractorFinancicalInfoForm
from .mixins import CheckForUserMixin
from .models import User, ContractorFinancialInfo
from archilance.mixins import BaseMixin from archilance.mixins import BaseMixin
from common.utils import get_or_none from common.utils import get_or_none
from projects.forms import PortfolioForm
from specializations.models import Specialization from specializations.models import Specialization
from work_sell.forms import WorkSellForm from work_sell.forms import WorkSellForm
from projects.forms import PortfolioForm
from .models import User, ContractorFinancialInfo
from .mixins import CheckForUserMixin
from .forms import UserEditForm, ContractorFinancicalInfoForm
from django.http import HttpResponse
from django.core.mail import send_mail
def send_mail_test(request): def send_mail_test(request):
@ -29,10 +31,118 @@ class UserListView(ListView):
context_object_name = 'users' context_object_name = 'users'
class ContractorListView(ListView): class ContractorFilterView(BaseMixin, View):
model = User template_name = 'contractor_filter.html'
template_name = 'contractor_list.html' form_class = ContractorFilterForm
context_object_name = 'contractor' # realty_form = ProjectFilterRealtyForm
def get(self, request, *args, **kwargs):
form = self.form_class(request.GET, request=request)
# realty_form = self.realty_form(request.GET, request=request, prefix='realty_form')
context = self.get_context_data(**_.merge({}, request.GET, kwargs))
contractors = User.contractor_objects
# if form.is_valid() and realty_form.is_valid():
if form.is_valid():
# keywords = form.cleaned_data.get('keywords')
# cro = form.cleaned_data.get('cro')
# work_type = form.cleaned_data.get('work_type')
# specialization = form.cleaned_data.get('specialization')
#
# building_classification = realty_form.cleaned_data.get('building_classification')
# construction_type = realty_form.cleaned_data.get('construction_type')
# location = realty_form.cleaned_data.get('location')
#
# if keywords:
# keywords = tuple(filter(None, re.split(r'\s|,|;', keywords)))
#
# for k in keywords:
# projects = projects.filter(Q(name__icontains=k) | Q(text__icontains=k))
#
# projects = projects.filter(cro=cro)
#
# if work_type:
# projects = projects.filter(work_type=work_type)
#
# if specialization:
# projects = projects.filter(
# specialization__lft__gte=specialization.lft,
# specialization__rght__lte=specialization.rght,
# )
#
# if building_classification:
# projects = projects.filter(realty__building_classification=building_classification)
#
# if construction_type:
# projects = projects.filter(realty__construction_type=construction_type)
#
# if location:
# projects = projects.filter(
# realty__location__lft__gte=location.lft,
# realty__location__rght__lte=location.rght,
# )
#
# order_by = form.cleaned_data.get('order_by')
# last_order_by = form.cleaned_data.get('last_order_by')
# reverse_order = form.cleaned_data.get('reverse_order')
#
# if order_by:
# if order_by == last_order_by:
# reverse_order = not reverse_order
# else:
# reverse_order = False
#
# projects = projects.order_by('-%s' % order_by if reverse_order else order_by)
# last_order_by = order_by
# elif last_order_by:
# projects = projects.order_by('-%s' % last_order_by if reverse_order else last_order_by)
#
# context.update({
# 'last_order_by': last_order_by,
# 'reverse_order': reverse_order,
# })
#
# project_count = projects.count()
# display_msg = 'Найдено %s проектов' % project_count if project_count > 0 else 'Ничего не найдено'
messages.info(request, 'Форма норм') # Tmp
else:
# display_msg = 'Пожалуйста, введите корректные данные'
if form.errors:
messages.info(request, (
'<p>Произошла ошибка (form)</p>'
'<pre>{form}</pre>'
).format(form=pformat(form.errors)))
# if realty_form and realty_form.errors:
# messages.info(request, (
# '<p>Произошла ошибка (realty_form)</p>'
# '<pre>{realty_form}</pre>'
# ).format(realty_form=pformat(realty_form.errors)))
paginator = Paginator(contractors.all(), settings.PAGE_SIZE)
page = request.GET.get('page')
try:
contractors = paginator.page(page)
except PageNotAnInteger:
contractors = paginator.page(1)
except EmptyPage:
contractors = paginator.page(paginator.num_pages)
context.update({
'form': form,
# 'realty_form': realty_form,
'contractors': contractors,
'is_paginated': True,
'page_obj': contractors,
# 'display_msg': display_msg,
})
return render(request, self.template_name, context)
class ContractorProfileDetailView(DetailView): class ContractorProfileDetailView(DetailView):

@ -9,171 +9,183 @@
<div class="col-lg-12"> <div class="col-lg-12">
<p class="titleScore">Работы на продажу</p> <p class="titleScore">Работы на продажу</p>
</div> </div>
<form>
<div class="col-lg-12">
<div class="filter clearfix"> <form action="{{ request.path }}" method="GET" novalidate>
<div class="triangle1"></div> <div class="col-lg-12">
<div class="titleF1 disTab"> <div class="filter clearfix">
<div class="col-lg-3">Специализации:</div> <div class="triangle1"></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">
<input type='hidden' class="-spec-select -spec-select-level-1" style="width: 100%">
</div>
<div class="col-lg-3">
<input type='hidden' class="-spec-select -spec-select-level-2" style="width: 100%">
</div>
<div class="col-lg-3">
<input type='hidden' class="-spec-select -spec-select-level-3" style="width: 100%">
</div>
<div class="col-lg-3">
<input type='hidden' class="-spec-select -spec-select-level-4" style="width: 100%">
</div>
</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="От" name="from_budget" class="box-sizing otInp">
<input type="text" placeholder="До" name="to_budget" class="box-sizing otInp">
<select class="selectpicker2 valul">
<option>&#36;</option>
<option>&#36;</option>
<option>&#36;</option>
</select>
</div>
<div class="col-lg-3">
</div>
<div class="col-lg-3">
<button type="submit" class="findReal">Поиск</button>
</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="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 disTab">
<div class="col-lg-3"> <div class="col-lg-3">
<select class="selectpicker" name="building_classification"> <input type='hidden' class="-spec-select -spec-select-level-1" style="width: 100%">
{% for bc in building_classifications %}
<option>{{ bc }}</option>
{% endfor %}
</select>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<select class="selectpicker"> <input type='hidden' class="-spec-select -spec-select-level-2" style="width: 100%">
{% for ct in construction_types %}
<option>{{ ct }}</option>
{% endfor %}
</select>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<select class="selectpicker"> <input type='hidden' class="-spec-select -spec-select-level-3" style="width: 100%">
<option>Mustard</option>
</select>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<select class="selectpicker"> <input type='hidden' class="-spec-select -spec-select-level-4" style="width: 100%">
<option>Mustard</option> </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="От" name="from_budget" class="box-sizing otInp">
<input type="text" placeholder="До" name="to_budget" class="box-sizing otInp">
<select class="selectpicker2 valul">
<option>&#36;</option>
<option>&#36;</option>
<option>&#36;</option>
</select> </select>
</div> </div>
<div class="col-lg-3">
</div>
<div class="col-lg-3">
<button type="submit" class="findReal">Поиск</button>
</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" name="building_classification">
{% for bc in building_classifications %}
<option>{{ bc }}</option>
{% endfor %}
</select>
</div>
<div class="col-lg-3">
<select class="selectpicker">
{% for ct in construction_types %}
<option>{{ ct }}</option>
{% endfor %}
</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>
</div> </div>
</div>
</form> <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="col-lg-3"> <div class="insetCol box-sizing disTab">
<div class="insetCol box-sizing disTab"> <a href="{% url 'work_sell:detail' work.pk %}">
<a href="{% url 'work_sell:detail' work.pk %}"> {% thumbnail work.img "265x265" crop="center" as im %}
{% thumbnail work.img "265x265" crop="center" as im %} <div class="imgGal" style="background: url('{{ im.url }}') no-repeat center;">
<div class="imgGal" style="background: url('{{ im.url }}') no-repeat center;"> <div class="imgFigure"></div>
<div class="imgFigure"></div> </div>
{% endthumbnail %}
</a>
<div class="cenaImg box-sizing">
<div class="cenaImgInset">
{{ work.budget }} <i class="fa fa-rub"></i>
</div> </div>
{% endthumbnail %}
</a>
<div class="cenaImg box-sizing">
<div class="cenaImgInset">
{{ work.budget }} <i class="fa fa-rub"></i>
</div> </div>
</div> </div>
</div> <div class="insetCol2 box-sizing disTab">
<div class="insetCol2 box-sizing disTab"> <p>{{ work }}</p>
<p>{{ work }}</p>
<div class="buttonsImg" disTab>
<div class="buttonsImg" disTab> <a href="{% url 'work_sell:edit' work.pk %}">
<a href="{% url 'work_sell:edit' work.pk %}"> <div class="insetBI insetBI1">
<div class="insetBI insetBI1"> <i class="fa fa-pencil"></i>
<i class="fa fa-pencil"></i> </div>
</div> </a>
</a> <a href="{% url 'work_sell:delete' work.pk %}">
<a href="{% url 'work_sell:delete' work.pk %}"> <div class="insetBI insetBI2">
<div class="insetBI insetBI2"> <i class="fa fa-times"></i>
<i class="fa fa-times"></i> </div>
</a>
</div> </div>
</a>
</div> </div>
</div> </div>
</div> {% endfor %}
{% endfor %} </div>
</div>
{% if is_paginated %}
{# {% 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 %}#}
<div class="col-lg-12 pagin"> <div class="col-lg-12 pagin">
<nav> {% include 'partials/pagination.html' %}
<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> </div>
{% endif %} </form>
{% include 'partials/footer.html' %} {% include 'partials/footer.html' %}
</div> </div>

Loading…
Cancel
Save