add contractor and customer profile

remotes/origin/setup
Mukhtar 10 years ago
parent 8119b1bd55
commit 4573742355
  1. 2
      archilance/settings/base.py
  2. 26
      projects/migrations/0016_auto_20160603_1140.py
  3. 4
      projects/models.py
  4. 66
      projects/templates/projects/comparison.html
  5. 490
      projects/templates/projects/project_detail.html
  6. 5
      projects/urls.py
  7. 8
      projects/utils.py
  8. 35
      projects/views.py
  9. 7
      templates/base.html
  10. 15
      templates/base2.html
  11. 21
      users/migrations/0010_user_last_time_visit.py
  12. 8
      users/models.py
  13. 2
      users/templates/users/contractor.html
  14. 7
      users/templates/users/contractor_list.html
  15. 136
      users/templates/users/customer.html
  16. 10
      users/urls.py
  17. 22
      users/views.py

@ -123,7 +123,7 @@ AUTHENTICATION_BACKENDS = (
LANGUAGE_CODE = 'ru-ru'
TIME_ZONE = 'UTC'
TIME_ZONE = 'Europe/Moscow'
USE_I18N = True

@ -0,0 +1,26 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.6 on 2016-06-03 11:40
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('projects', '0015_auto_20160602_1606'),
]
operations = [
migrations.RemoveField(
model_name='candidate',
name='user',
),
migrations.AddField(
model_name='candidate',
name='answer',
field=models.ForeignKey(default='', on_delete=django.db.models.deletion.CASCADE, related_name='candidates', to='projects.Answer'),
preserve_default=False,
),
]

@ -103,12 +103,12 @@ class Answer(models.Model):
class Candidate(models.Model):
user = models.ForeignKey(User, related_name='candidates')
answer = models.ForeignKey(Answer, related_name='candidates')
project = models.ForeignKey(Project, related_name='candidates')
status = models.BooleanField(default=False)
def __str__(self):
pass
return self.user.get_full_name()
class Meta:
verbose_name = 'Кандидат'

@ -0,0 +1,66 @@
{% extends "base.html" %}
{% load staticfiles %}
{% block content %}
<div class="col-lg-12">
<p class="titleScore">Сравнение кандидатов по проекту</p>
</div>
<div class="titleBlockComparison disTab">
<div class="triangle1"></div>
<p>{{ object }}</p>
<table class="compTable">
<tr>
<th></th>
<th>Кандидат</th>
<th>Цена</th>
<th>Срок</th>
<th>Описание</th>
<th>Рейтинги/отзывы</th>
<th>Безопасные сделки</th>
<th>Решение</th>
</tr>
{% for cand in object.candidates.all %}
<tr>
<td>1</td>
<td>
{{ cand.answer.user.get_full_name }}
</td>
<td>{{ cand.answer.cost }} <i class="fa fa-rub"></i></td>
<td>
{{ cand.answer.term }}<br> <span>недели</span>
</td>
<td>
<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
</td>
<td>
<ul>
<li><span>23 560</span></li>
<li>
<span>+385</span>
0
<small> - 0</small>
</li>
<li>
СРО
</li>
</ul>
</td>
<td>
<span>5</span><br>
Готов работать по безопасной сделке
</td>
<td>
<div class="tableButtons disTab">
<div class="btnTab btnTab1"></div>
<div class="btnTab btnTab2"></div>
<div class="btnTab btnTab3"></div>
<div class="btnTab btnTab4"></div>
</div>
</td>
</tr>
{% endfor %}
</table>
</div>
{% endblock %}

@ -1,286 +1,290 @@
{% extends "base.html" %}
{% load staticfiles %}
{% block content %}
{% load humanize %}
{% load humanize %}
{% load l10n %}
<div class="col-lg-12">
<p class="titleScore">{{ object }}</p>
</div>
<div class="doneBlock new-done disTab">
<div class="triangle1"></div>
<div class="col-lg-12 new-p">
<p>{{ object.price | intcomma }} <i class="fa fa-rub"></i></p>
<div class="col-lg-12">
<p class="titleScore">{{ object }}</p>
</div>
<div class="col-lg-4">
<a href="#" class="aLinkExe">
<div class="imgExecutor">
<img src="img/profile.jpg" alt="execitor-image">
</div>
</a>
<div class="doneBlock new-done disTab">
<div class="triangle1"></div>
{% if user.is_contractor %}
<div class="col-lg-12 new-p">
<p>{{ object.price | intcomma }} <i class="fa fa-rub"></i></p>
</div>
{% endif %}
<p class="nameExecutor">
<a href="{% url 'users:customer_view' object.user.pk %}">{{ object.user.get_full_name }}[ivanov_petr]</a>
</p>
<p class="navv2">{{ object.created | naturaltime}}</p>
</div>
<div class="col-lg-3 retts">
<ul class="rettList restList2">
<li>Рейтинг: <span> 0</span></li>
<li>Безопасные сделки: <span> 0</span></li>
<li>
<a href="">Отзывы:
<span> 0 </span>
<small> 0</small>
<mark> - 0</mark>
</a>
</li>
</ul>
</div>
<div class="col-lg-2 new-dashed">
<div class="dashedCol4 dashedCol44 dashedColColor">
<p class="specUser">
Специализации:
<div class="col-lg-4">
<a href="#" class="aLinkExe">
<div class="imgExecutor">
<img src="{% static 'img/profile.jpg' %}" alt="execitor-image">
</div>
</a>
<p class="nameExecutor">
<a href="{% url 'users:customer-view' object.user.pk %}">{{ object.user.get_full_name }}[ivanov_petr]</a>
</p>
<div class="insetSpec">
<span>{{ object.specialization }}</span>
<p class="navv2">{{ object.created | naturaltime }}</p>
</div>
<div class="col-lg-3 retts">
<ul class="rettList restList2">
<li>Рейтинг: <span> 0</span></li>
<li>Безопасные сделки: <span> 0</span></li>
<li>
<a href="">Отзывы:
<span> 0 </span>
<small> 0</small>
<mark> - 0</mark>
</a>
</li>
</ul>
</div>
<div class="col-lg-2 new-dashed">
<div class="dashedCol4 dashedCol44 dashedColColor">
<p class="specUser">
Специализации:
</p>
<div class="insetSpec">
<span>{{ object.specialization }}</span>
</div>
</div>
</div>
</div>
<div class="col-lg-3 retts new-list">
<ul class="desListPro">
<li>
{{ object.created }}
</li>
<li>
{{ object.type_work }}
</li>
</ul>
{% if object.secure_transaction %}
<div class="sroUser sroExecutor sroPro">
<div class="iconSRO"></div>
<div class="col-lg-3 retts new-list">
<ul class="desListPro">
<li>
{{ object.created }}
</li>
<li>
{{ object.type_work }}
</li>
</ul>
{% if object.secure_transaction %}
<div class="sroUser sroExecutor sroPro">
<div class="iconSRO"></div>
<p>Есть допуск СРО</p>
<p>Есть допуск СРО</p>
</div>
{% endif %}
</div>
{% endif %}
</div>
</div>
<div class="infoProjectBlock info-new disTab">
<div class="triangle2"></div>
<div class="col-lg-10 col-lg-offset-1">
<ul class="listProjectIn">
<li>
<span>Местоположение:</span> {{ object.realty.country }},{{ object.realty.city }}
</li>
<li>
<span>Классификация здания:</span> {{ object.realty.building_classification }}
</li>
<li>
<span>Вид строительства:</span> {{ object.realty.type_construction }}
</li>
</ul>
</div>
<div class="col-lg-10 col-lg-offset-1">
<p class="textProIn">
{{ object.text }}
</p>
</div>
<div class="col-lg-10 col-lg-offset-1">
<a href="javascript:void(0)" class="new-answer">
Ответить на проект
</a>
<div class="polsF1 pols-new disTab">
<div class="col-lg-3">
<select class="selectpicker">
<option>Mustard</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
<div class="infoProjectBlock info-new disTab">
<div class="triangle2"></div>
<div class="col-lg-10 col-lg-offset-1">
<ul class="listProjectIn">
<li>
<span>Местоположение:</span> {{ object.realty.country }},{{ object.realty.city }}
</li>
<li>
<span>Классификация здания:</span> {{ object.realty.building_classification }}
</li>
<li>
<span>Вид строительства:</span> {{ object.realty.type_construction }}
</li>
</ul>
</div>
<div class="col-lg-10 col-lg-offset-1">
<p class="textProIn">
{{ object.text }}
</p>
</div>
<div class="col-lg-10 col-lg-offset-1">
<a href="javascript:void(0)" class="new-answer">
Ответить на проект
</a>
<div class="polsF1 pols-new disTab">
<div class="col-lg-3">
<select class="selectpicker">
<option>Mustard</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
</div>
</div>
</div>
</div>
{% if perms.projects.add_answer %}
<form method="post">
{{ form.errors }}
{% csrf_token %}
<div class="polsF1 disTab">
{% if perms.projects.add_answer %}
<form method="post">
{{ form.errors }}
{% csrf_token %}
<div class="polsF1 disTab">
<div class="col-lg-3">
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>{{ form.cost.label }}</p>
<input type="text" class="box-sizing" name="{{ form.cost.name }}" />
<div class="col-lg-3">
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Стоимость</p>
<input type="text" class="box-sizing" name="{{ form.cost.name }}"/>
</div>
</div>
</div>
<div class="col-lg-3">
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>{{ form.cost_type.label }}</p>
{{ form.cost_type }}
<div class="col-lg-3">
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Бюджет</p>
{{ form.cost_type }}
</div>
</div>
<div class="col-lg-6"></div>
</div>
<div class="polsF1 disTab">
<div class="col-lg-3">
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Срок</p>
<input type="text" class="box-sizing" name="{{ form.term.name }}"/>
<div class="col-lg-6"></div>
</div>
<div class="polsF1 disTab">
<div class="col-lg-3">
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>{{ form.term.label }}</p>
<input type="text" class="box-sizing" name="{{ form.term.name }}" />
</div>
</div>
<div class="col-lg-3">
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Тип срока</p>
{{ form.term_type }}
</div>
</div>
</div>
<div class="col-lg-3">
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>{{ form.term_type.label }}</p>
{{ form.term_type }}
<div class="col-lg-6"></div>
</div>
<div class="polsF1 disTab">
<div class="col-lg-9">
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Текст</p>
<textarea name="{{ form.text.name }}" id="text-new"></textarea>{{ form.project }}
</div>
</div>
<div class="col-lg-3"></div>
</div>
<div class="polsF1 disTab">
<div class="col-lg-3"><input type="submit" value="Создать"/></div>
</div>
<div class="col-lg-6"></div>
</div>
<div class="polsF1 disTab">
<div class="col-lg-9">
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>{{ form.text.label }}</p>
<textarea name="{{ form.text.name }}" id="text-new"></textarea>{{ form.project }}
</div>
</div>
<div class="col-lg-3"></div>
</div>
<div class="polsF1 disTab">
<div class="col-lg-3"><input type="submit" value="Создать" /></div>
</div>
</form>
{% endif %}
</form>
{% endif %}
</div>
</div>
{% if not perms.projects.add_answer %}
<div class="exBigBlock disTab">
<div class="col-lg-12">
<p class="titleEx">Исполнители</p>
</div>
<div class="col-lg-12 exButton">
<div class="btn-group" role="group" aria-label="...">
<button type="button" class="btn btn-default">
Новые <span>+7</span>
</button>
<button type="button" class="btn btn-default">
Кандидаты <span>7</span>
</button>
<button type="button" class="btn btn-default">
Отказал <span>7</span>
</button>
</div>
</div>
</div>
<div class="col-lg-12 compareBlock">
<div class="col-lg-2 col-lg-offset-5">
<p>Сравнить кандидатов</p>
</div>
</div>
{% if user.is_customer %}
<div class="exBigBlock disTab">
<div class="col-lg-12">
<p class="titleEx">Исполнители</p>
</div>
<div class="col-lg-12 exButton">
<div class="btn-group" role="group" aria-label="...">
<button type="button" class="btn btn-default">
Новые <span>+0</span>
</button>
<button type="button" class="btn btn-default">
Кандидаты <span>{{ object.candidates.count }}</span>
</button>
<button type="button" class="btn btn-default">
Отказал <span>0</span>
</button>
</div>
</div>
</div>
<a href="{% url 'projects:comparison' object.id %}">
<div class="col-lg-12 compareBlock">
<div class="col-lg-2 col-lg-offset-5">
<p>Сравнить кандидатов</p>
</div>
</div>
</a>
{% endif %}
<div class="candidateBlock disTab">
{% for answer in object.answers.all %}
<div class="candidateBlock disTab">
{% for answer in object.answers.all %}
<div class="candidate can-new">
<div class="col-lg-4">
<a href="#" class="aLinkExe">
<div class="imgExecutor">
<img src="img/profile.jpg" alt="execitor-image">
</div>
</a>
<p class="nameExecutor">
<a href="#">{{ answer.user.get_full_name }}</a>
</p>
<p class="navv2">{{ answer.user.created }}</p>
</div>
<div class="col-lg-3 retts">
<ul class="rettList restList2">
<li>Рейтинг: <span>0</span></li>
<li>Безопасные сделки: <span> 0</span></li>
<li>
<a href="javascript:void(0)">Отзывы:
<span> + 0 </span>
<small> 0</small>
<mark> - 0</mark>
<div class="col-lg-4">
<a href="#" class="aLinkExe">
<div class="imgExecutor">
<img src="{% static 'img/profile.jpg' %}" alt="execitor-image">
</div>
</a>
</li>
</ul>
<div class="sroUser sroExecutor">
<div class="iconSRO"></div>
<p>Есть допуск СРО</p>
</div>
</div>
<div class="col-lg-2 listCens">
<p>Цена:<span> {{ answer.cost| intcomma }}</span>
<i class="fa fa-rub"></i>
</p>
<p>
Срок: <span>{{ answer.term }} {{ answer.term_type }}</span>
</p>
<p>Опубликован: {{ answer.created }}</p>
</div>
<div class="col-lg-3 retts">
<a href="javascript:void(0)" class="candLink candLink3">
отказ
</a>
</div>
<div class="commBlock44 comm-new disTab">
<div class="comm44 disTab">
<div class="col-lg-10 col-lg-offset-1">
<p class="nameComm">
Иванов Петр Иванович
<p class="nameExecutor">
<a href="#">{{ answer.user.get_full_name }}</a>
</p>
<span class="dateComm44">13.0.2016 / 21:05</span>
<div class="stars box-sizing">
<span class="glyphicon glyphicon-star starAct" aria-hidden="true"></span>
<span class="glyphicon glyphicon-star starAct" aria-hidden="true"></span>
<span class="glyphicon glyphicon-star starAct" aria-hidden="true"></span>
<span class="glyphicon glyphicon-star" aria-hidden="true"></span>
<span class="glyphicon glyphicon-star" aria-hidden="true"></span>
<p class="navv2">{{ answer.user.created }}</p>
</div>
<div class="col-lg-3 retts">
<ul class="rettList restList2">
<li>Рейтинг: <span>0</span></li>
<li>Безопасные сделки: <span> 0</span></li>
<li>
<a href="javascript:void(0)">Отзывы:
<span> + 0 </span>
<small> 0</small>
<mark> - 0</mark>
</a>
</li>
</ul>
<div class="sroUser sroExecutor">
<div class="iconSRO"></div>
<p>Есть допуск СРО</p>
</div>
<p class="textComm44">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin
gravida dolor sit amet lacus accumsan et viverra justo commodo. Proin sodales pulvinar tempor.
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam
fermentum, nulla luctus pharetra vulputate, felis tellus mollis orci, sed rhoncus sapien nunc
eget odio.
</div>
<div class="col-lg-2 listCens">
<p>Цена:<span> {{ answer.cost| intcomma }}</span>
<i class="fa fa-rub"></i>
</p>
<p>
Срок: <span>{{ answer.term }} {{ answer.term_type }}</span>
</p>
<p>Опубликован: {{ answer.created }}</p>
</div>
<div class="col-lg-3 retts">
{% if user.is_customer %}
<a class="candLink candLink1" href="{% url 'projects:add-candidate' answer_id=answer.id project_id=object.id %}">Кандидат</a>
<a class="candLink candLink2" href="javascript:void(0)"> предложить проект </a>
{% endif %}
<a href="javascript:void(0)" class="candLink candLink3">отказ</a>
</div>
<div class="commBlock44 comm-new disTab">
<div class="comm44 disTab">
<div class="col-lg-10 col-lg-offset-1">
<p class="nameComm">
Иванов Петр Иванович
</p>
<span class="dateComm44">13.0.2016 / 21:05</span>
<div class="stars box-sizing">
<span class="glyphicon glyphicon-star starAct" aria-hidden="true"></span>
<span class="glyphicon glyphicon-star starAct" aria-hidden="true"></span>
<span class="glyphicon glyphicon-star starAct" aria-hidden="true"></span>
<span class="glyphicon glyphicon-star" aria-hidden="true"></span>
<span class="glyphicon glyphicon-star" aria-hidden="true"></span>
</div>
<p class="textComm44">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum
laoreet.
</p>
</div>
</div>
</div>
</div>
</div>
</div>
{% endfor %}
{% endfor %}
</div>
<div class="col-lg-12 pagin">
<nav>
<ul class="pagination">
<li>
<a href="#" aria-label="Previous">
<span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
</a>
</li>
<li class="active"><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#">4</a></li>
<li><a href="#">5</a></li>
<li>...</li>
<li><a href="#">17</a></li>
<li>
<a href="#" aria-label="Next">
<span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
</a>
</li>
</ul>
</nav>
</div>
</div>
<div class="col-lg-12 pagin">
<nav>
<ul class="pagination">
<li>
<a href="#" aria-label="Previous">
<span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
</a>
</li>
<li class="active"><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#">4</a></li>
<li><a href="#">5</a></li>
<li>...</li>
<li><a href="#">17</a></li>
<li>
<a href="#" aria-label="Next">
<span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
</a>
</li>
</ul>
</nav>
</div>
{% endblock %}

@ -3,13 +3,14 @@ from django.views.generic import TemplateView
from .views import ProjectListView, ProjectDetailView, \
ProjectCreateView, PortfolioCreateView,\
TestProjectView, manage_articles, TestView
ProjectComparisonView, add_candidate, TestView
app_name = 'projects'
urlpatterns = [
urls.url(r'^$', ProjectListView.as_view(), name='list'),
urls.url(r'^porttest/$', manage_articles, name='portfolio'),
urls.url(r'^candidate/add/(?P<answer_id>(\d+))/(?P<project_id>(\d+))/$', add_candidate, name='add-candidate'),
urls.url(r'^candidate/comparison/(?P<pk>\d+)$', ProjectComparisonView.as_view(), name='comparison'),
urls.url(r'^create/$', ProjectCreateView.as_view(), name='project-create'),
urls.url(r'^test/$', TestView.as_view(), name='project-test'),
urls.url(r'^portfolio/create/$', PortfolioCreateView.as_view(), name='portfolio-create'),

@ -0,0 +1,8 @@
from django.utils import timezone
class LastAccessMixin(object):
def dispatch(self, request, *args, **kwargs):
if request.user.is_authenticated():
request.user.last_time_visit = timezone.now()
request.user.save(update_fields=['last_time_visit'])
return super().dispatch(request, *args, **kwargs)

@ -1,11 +1,15 @@
from django.http import HttpResponseForbidden, HttpResponseRedirect
from django.shortcuts import render
from django.http import HttpResponseForbidden, HttpResponseRedirect, HttpResponse
from django.core.urlresolvers import reverse
from django.contrib.auth.mixins import PermissionRequiredMixin
from django.views.generic import ListView, DetailView, CreateView, View, TemplateView
from django.views.generic.edit import FormMixin
from .models import Project, Portfolio
from users.models import User
from .models import Project, Portfolio, Candidate, Answer
from .forms import ProjectForm, PortfolioForm, AnswerForm, RealtyForm
from .utils import LastAccessMixin
class ProjectListView(ListView):
@ -17,7 +21,7 @@ class ProjectListView(ListView):
return context
class ProjectDetailView(FormMixin, DetailView):
class ProjectDetailView(LastAccessMixin, FormMixin, DetailView):
model = Project
form_class = AnswerForm
@ -164,16 +168,21 @@ class TestProjectView(View):
self.get_context_data(form=form,
realty_form=realty_form))
from django.shortcuts import render
from .forms import PortfolioPhotoFormSet
def manage_articles(request):
form = PortfolioForm
portfolio_photo_form = PortfolioPhotoFormSet()
if request.method == "POST":
form = PortfolioForm(request.POST)
portfolio_photo_form = PortfolioPhotoFormSet(request.POST, request.FILES)
import code; code.interact(local=dict(globals(), **locals()))
class ProjectComparisonView(DetailView):
model = Project
template_name = 'projects/comparison.html'
def get_context_data(self, **kwargs):
context = super().get_context_data()
return context
return render(request, 'projects/testport.html', {'form': form, 'portfolio_photo_form': portfolio_photo_form})
def add_candidate(request, answer_id, project_id):
answer = Answer.objects.get(pk=answer_id)
project = Project.objects.get(pk=project_id)
candidate = Candidate.objects.create(answer=answer, project=project)
return HttpResponseRedirect(reverse('projects:detail',args=[project_id]))

@ -29,8 +29,13 @@
<li>
<a href="{% url 'projects:list' %}">Биржа проектов</a>
</li>
<li class="officeList">
<a href="">Мой офис</a>
{% if user.is_contractor %}
<a href="{% url 'users:contractor-view' user.id %}">Мой офис</a>
{% elif user.is_customer %}
<a href="{% url 'users:customer-view' user.id %}">Мой офис</a>
{% endif %}
</li>
</ul>
</div>

@ -28,11 +28,18 @@
<a href="{% url 'projects:list' %}">Биржа проектов</a>
</li>
<li>
<a href="javascript:void(0)">Поиск исполнителей</a>
</li>
<li>
<a href="javascript:void(0)">Работы на продажу</a>
<a href="{% url 'users:contractor-list' %}">Поиск исполнителей</a>
</li>
<li>
{% if user.is_contractor %}
<a href="{% url 'users:contractor-view' user.id %}">Мой офис</a>
{% elif user.is_customer %}
<a href="{% url 'users:customer-view' user.id %}">Мой офис</a>
{% endif %}
</li>
{# <li>#}
{# <a href="javascript:void(0)">Работы на продажу</a>#}
{# </li>#}
</ul>
</div>
<div class="col-lg-2">

@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.6 on 2016-06-03 12:15
from __future__ import unicode_literals
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('users', '0009_auto_20160602_1213'),
]
operations = [
migrations.AddField(
model_name='user',
name='last_time_visit',
field=models.DateTimeField(default=django.utils.timezone.now),
),
]

@ -38,6 +38,7 @@ class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(max_length=255, unique=True, db_index=True)
is_active = models.BooleanField(default=True)
created = models.DateTimeField(default=timezone.now)
last_time_visit = models.DateTimeField(default=timezone.now)
@property
def is_staff(self):
@ -62,6 +63,13 @@ class User(AbstractBaseUser, PermissionsMixin):
verbose_name = 'Пользователь'
verbose_name_plural = 'Пользователи'
def is_contractor(self):
return self.groups.filter(name='Исполнители').exists()
def is_customer(self):
return self.groups.filter(name='Заказчики').exists()
class Team(models.Model):
name = models.CharField(max_length=255)

@ -52,7 +52,7 @@
<p class="cityUser">Россия, Москва</p>
<p class="navv">На сайте 8 лет и 3 месяца</p>
<div class="statusUser">Свободен</div>
<a href="javascript:void(0)" class="showCon">показать контакты</a>
<a href="" class="showCon">показать контакты</a>
</div>
<div class="col-lg-4">
<div class="dashedCol4">

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

@ -1,4 +1,138 @@
{% extends 'base.html' %}
{% block content %}
<h1>Заказчик</h1>
<div class="col-lg-12">
<div class="col-lg-3 divCol3">
<div class="avatar new-mar">
<div class="avatarInset">
<img src="img/profile.jpg" alt="profile-image">
</div>
</div>
</div>
<div class="col-lg-9 divCol9">
<div class="col-lg-4">
<p class="nameUser">
{{ object.get_full_name }} [ivanov_petr]
</p>
<p class="cityUser">Россия, Москва</p>
<p class="navv">На сайте {{ object.created }}</p>
</div>
<div class="col-lg-4 new-er">
<ul class="rettList">
<li><a href="javascript:void(0)">Рейтинг: <span> 0</span></a></li>
<li><a href="javascript:void(0)">Безопасные сделки: <span> 0</span></a></li>
<li>
<a href="javascript:void(0)">
Отзывы:
<span> + 0</span>
<small> 0</small>
<mark> - 0</mark>
</a>
</li>
</ul>
</div>
<div class="col-lg-4">
<a href="javascript:void(0)" class="new-prop new-prop1">показать контакты</a>
<a href="javascript:void(0)" class="new-prop new-prop2">написать сообщение</a>
<a href="javascript:void(0)" class="new-red">редактировать профиль</a>
</div>
</div>
<div class="col-lg-9 divCol9 new-mar2">
<div class="profileTabs2 tabs-new">
<ul class="nav nav-tabs nav-justified">
<li role="presentation" class="active">
<a href="#">Открытые проекты</a>
</li>
<li role="presentation">
<a href="#">Текущие проекты</a>
<div class="roundsCount">
<div class="countR">0</div>
<div class="countG">0</div>
</div>
</li>
<li role="presentation">
<a href="#">Отзывы</a>
<div class="roundsCount">
<div class="countG">0</div>
</div>
</li>
</ul>
</div>
</div>
</div>
<div class="buttonGP disTab">
<div class="btn-group valProject2" role="group" aria-label="...">
<button type="button" class="btn btn-default">
Открытые проекты
<span><mark>2</mark> / <span>35</span></span>
</button>
<button type="button" class="btn btn-default">
Корзина
<span><mark></mark><span>7</span></span>
</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 class="col-lg-3 col-lg-offset-1">
<p class="addWork add-work-new">Разместить заказ</p>
</div>
</div>
<div class="projectsBlock new-pro-block disTab">
{% for proj in object.projects.all %}
<div class="projectPro clearfix">
<div class="col-lg-9 leftPro">
<p class="titlePro">
<a href="{% url 'projects:detail' proj.id %}">{{ proj.name }}</a>
</p>
<ul class="desPro">
<li>
Объект "{{ proj.realty.name }}"
</li>
<li>
<span>0</span> ответ от имени группы
</li>
</ul>
<ul class="color-menu">
<li>
<a href="#">Новые: 0</a>
</li>
<li>
<a href="#">Кандидаты: 0</a>
</li>
<li>
<a href="#">Отказал: 0</a>
</li>
</ul>
<p class="textPro">
{{ proj.text }}
</p>
<ul class="listPro">
<li>{{ proj.created}}</li>
<li>0</li>
<li>0</li>
<li>{{ object.get_full_name }}</li>
</ul>
</div>
<div class="col-lg-3 rightPro right-pro-red">
<p class="cenaPro">
{{ proj.price }} <i class="fa fa-rub"></i>
</p>
<ul>
<li>
Редактировать
</li>
<li>
Переместить в корзину
</li>
</ul>
</div>
</div>
{% endfor %}
</div>
{% endblock %}

@ -1,16 +1,16 @@
from django.conf import urls
from django.contrib.auth.views import login, logout
from .views import UserListView, UserDetailView, UserInfoListView, CustomerView, UserView, ContractorDetailView
from .views import UserListView, UserDetailView, UserInfoListView, CustomerView,\
UserView, ContractorDetailView, ContractorListView
app_name = 'users'
urlpatterns = [
urls.url(r'^profile/$', UserDetailView.as_view(), name='user-detail'),
# urls.url(r'^login/?$', login, {'template_name': 'users/login.html'}),
# urls.url(r'^logout/?$', logout),
urls.url(r'^$', UserListView.as_view(), name='users_list'),
urls.url(r'^info$', UserInfoListView.as_view(), name='users_info_list'),
urls.url(r'^contractor/(?P<pk>\d+)$$', ContractorDetailView.as_view(), name='contactor_view'),
urls.url(r'^customer/(?P<pk>\d+)$$', CustomerView.as_view(), name='customer_view'),
urls.url(r'contractors/$', ContractorListView.as_view(), name='contractor-list' ),
urls.url(r'^contractor/(?P<pk>\d+)$', ContractorDetailView.as_view(), name='contractor-view'),
urls.url(r'^customer/(?P<pk>\d+)$', CustomerView.as_view(), name='customer-view'),
urls.url(r'^(?P<pk>\d+)$', UserView.as_view(), name='user_view'),
]

@ -46,22 +46,26 @@ class UserUpdateView(UpdateView):
from django.http import Http404
from django.shortcuts import redirect
class ContractorListView(ListView):
model = User
template_name = 'users/contractor_list.html'
class ContractorDetailView(DetailView):
model = User
template_name = 'users/contractor.html'
def get_object(self, queryset=None):
object = super().get_object()
user_group = object.groups.all().first()
if 'Исполнители' not in user_group.name:
return redirect('/projects/')
return object
# def get_object(self, queryset=None):
# object = super().get_object()
# user_group = object.groups.all().first()
# if 'Исполнители' not in user_group.name:
# return redirect('/projects/')
# return object
class CustomerView(View):
class CustomerView(DetailView):
model = User
template_name = 'users/customer.html'
def get(self, request, *args, **kwargs):
return render(request, self.template_name)

Loading…
Cancel
Save