remotes/origin/setup
ArturBaybulatov 10 years ago
commit 91414a8151
  1. 1
      archilance/settings/base.py
  2. 0
      common/__init__.py
  3. 9
      common/admin.py
  4. 5
      common/apps.py
  5. 66
      common/migrations/0001_initial.py
  6. 31
      common/migrations/0002_auto_20160615_1625.py
  7. 0
      common/migrations/__init__.py
  8. 21
      common/models.py
  9. 3
      common/tests.py
  10. 3
      common/views.py
  11. 4
      projects/admin.py
  12. 4
      projects/forms.py
  13. 52
      projects/migrations/0032_auto_20160615_1610.py
  14. 27
      projects/models.py
  15. 278
      projects/templates/_trash/project_form.html
  16. 18
      projects/templates/_trash/testport.html
  17. 2
      projects/templates/contractor_project_detail.html
  18. 1
      projects/views.py
  19. 28
      users/migrations/0014_auto_20160615_1611.py
  20. 78
      users/migrations/0015_auto_20160615_1747.py
  21. 57
      users/models.py
  22. 144
      users/templates/contractor_profile_edit.html
  23. 1
      users/templates/name_snippet.html
  24. 6
      users/urls.py
  25. 10
      users/views.py

@ -38,6 +38,7 @@ THIRD_PARTY_APPS = [
LOCAL_APPS = [
'api',
'common',
'archilance',
'projects',
'specializations',

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

@ -0,0 +1,5 @@
from django.apps import AppConfig
class CommonConfig(AppConfig):
name = 'common'

@ -0,0 +1,66 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.6 on 2016-06-15 12:56
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
import django.db.models.manager
import mptt.fields
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='City',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=255)),
],
options={
'verbose_name_plural': 'Города',
'verbose_name': 'Город',
},
),
migrations.CreateModel(
name='Country',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=255)),
],
options={
'verbose_name_plural': 'Страны',
'verbose_name': 'Страна',
},
),
migrations.CreateModel(
name='Location',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=50)),
('type', models.CharField(blank=True, choices=[('country', 'Страна'), ('region', 'Регион'), ('town', 'Город')], max_length=20, null=True)),
('lft', models.PositiveIntegerField(db_index=True, editable=False)),
('rght', models.PositiveIntegerField(db_index=True, editable=False)),
('tree_id', models.PositiveIntegerField(db_index=True, editable=False)),
('level', models.PositiveIntegerField(db_index=True, editable=False)),
('parent', mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='common.Location')),
],
options={
'verbose_name_plural': 'Местоположения',
'verbose_name': 'Местоположение',
},
managers=[
('_default_manager', django.db.models.manager.Manager()),
],
),
migrations.AddField(
model_name='city',
name='country',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='cities', to='common.Country'),
),
]

@ -0,0 +1,31 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.6 on 2016-06-15 13:25
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('common', '0001_initial'),
]
operations = [
migrations.RemoveField(
model_name='city',
name='country',
),
migrations.AlterField(
model_name='location',
name='type',
field=models.CharField(choices=[('_root', 'Корень'), ('country', 'Страна'), ('region', 'Регион'), ('town', 'Город')], default=None, max_length=20),
preserve_default=False,
),
migrations.DeleteModel(
name='City',
),
migrations.DeleteModel(
name='Country',
),
]

@ -0,0 +1,21 @@
from django.db import models
from mptt.models import TreeForeignKey, MPTTModel
class Location(MPTTModel):
TYPES = (
('_root', 'Корень'),
('country', 'Страна'),
('region', 'Регион'),
('town', 'Город'),
)
name = models.CharField(max_length=50)
parent = TreeForeignKey('self', blank=True, null=True, related_name='children', db_index=True)
type = models.CharField(max_length=20, choices=TYPES)
def __str__(self):
return self.name
class Meta:
verbose_name = 'Местоположение'
verbose_name_plural = 'Местоположения'

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

@ -0,0 +1,3 @@
from django.shortcuts import render
# Create your views here.

@ -1,7 +1,7 @@
from django.contrib import admin
from .models import Project, Portfolio, PortfolioPhoto, \
Answer, Realty, Candidate, Order, Stage, Country, City,\
Answer, Realty, Candidate, Order, Stage,\
BuildingClassfication, ConstructionType, ProjectFile
@ -16,8 +16,6 @@ admin.site.register(Realty)
admin.site.register(Order)
admin.site.register(Candidate)
admin.site.register(Stage)
admin.site.register(Country)
admin.site.register(City)
admin.site.register(BuildingClassfication)
admin.site.register(ConstructionType)
admin.site.register(Project, ProjectAdmin)

@ -46,8 +46,6 @@ class RealtyForm(ModelForm):
model = Realty
fields = (
'country',
'city',
'building_classification',
'construction_type',
'name',
@ -56,8 +54,6 @@ class RealtyForm(ModelForm):
widgets = {
'construction_type': Select(attrs={'class':'selectpicker'}),
'building_classification': Select(attrs={'class':'selectpicker'}),
'city': Select(attrs={'class':'selectpicker'}),
'country': Select(attrs={'class':'selectpicker'}),
}
class Realty1Form(Form):

@ -0,0 +1,52 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.6 on 2016-06-15 13:10
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
import mptt.fields
class Migration(migrations.Migration):
dependencies = [
('common', '0001_initial'),
('projects', '0031_auto_20160610_1434'),
]
operations = [
migrations.RemoveField(
model_name='city',
name='country',
),
migrations.RemoveField(
model_name='realty',
name='city',
),
migrations.RemoveField(
model_name='realty',
name='country',
),
migrations.AddField(
model_name='realty',
name='location',
field=mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='realties', to='common.Location'),
),
migrations.AlterField(
model_name='order',
name='created',
field=models.DateTimeField(default=django.utils.timezone.now),
),
migrations.AlterField(
model_name='project',
name='state',
field=models.CharField(choices=[('active', 'Активный'), ('trashed', 'В корзине'), ('deleted', 'Удален')], default='active', max_length=20),
),
migrations.DeleteModel(
name='City',
),
migrations.DeleteModel(
name='Country',
),
]

@ -1,3 +1,4 @@
from mptt.models import TreeForeignKey
from datetime import datetime
from django.db import models
from django.utils import timezone
@ -40,34 +41,10 @@ class ConstructionType(models.Model):
verbose_name_plural = 'Виды строительства'
class Country(models.Model):
name = models.CharField(max_length=255)
def __str__(self):
return self.name
class Meta:
verbose_name = 'Страна'
verbose_name_plural = 'Страны'
class City(models.Model):
name = models.CharField(max_length=255)
country = models.ForeignKey(Country, related_name='cities')
def __str__(self):
return self.name
class Meta:
verbose_name = 'Город'
verbose_name_plural = 'Города'
class Realty(models.Model):
building_classification = models.ForeignKey(BuildingClassfication, related_name='realties')
city = models.ForeignKey(City, related_name='realties')
construction_type = models.ForeignKey(ConstructionType, related_name='realties')
country = models.ForeignKey(Country, related_name='realties')
location = TreeForeignKey('common.Location', related_name='realties', null=True, blank=True)
name = models.CharField(max_length=255)
user = models.ForeignKey(User, related_name='realties')

@ -0,0 +1,278 @@
{% extends 'partials/base.html' %}
{% block content %}
<div class="col-lg-12 allProjects">
<p class="titleScore">Новый заказ</p>
</div>
<form method="post">
{% csrf_token %}
{{ form_project.errors }}
{{ form_realty.errors }}
<div class="chatBlock new-rass new-rass2 disTab">
{{ project_form.errors }}
<div class="col-lg-9">
<p class="new-pp new-pp3">Формирование заказа</p>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Название заказа</p>
<input type="text" class="box-sizing" name="{{ project_form.name.name }}"/>
{{ project_form.name.errors }}
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Подробно опишите задание</p>
<textarea name="{{ project_form.text.name }}" id="text-new"></textarea>
</div>
</div>
<div class="col-lg-3 wrChat1">
<div class="messageBlock box-sizing disTab">
<p>Дополнительно</p>
</div>
<div class="col-lg-12 documentsChat">
{# <form action="" method="post">#}
{# <div class="upload">#}
{# <input type="file" name="upload"/>#}
{# <p>+ добавить файл (до 100 файлов)</p>#}
{# </div>#}
{# <input type="submit" value="Submit" />#}
{# </form>#}
<ul class="list-new-new">
<li>
Архитерурное 2.jpg
<span>7мб</span>
<div></div>
</li>
</ul>
</div>
<p class="type-work">Тип работы:</p>
<div class="mail-block type-work-inset">
<div class="inset-mb">
<label><input type="radio" value="1" name="{{ project_form.type_work.name }}"><span></span></label>
<p>Проектирование</p>
</div>
<div class="inset-mb">
<label><input type="radio" value="2" name="{{ project_form.type_work.name }}"><span></span></label>
<p>Техническое сопровождение</p>
</div>
</div>
<div class="textAreaBlock2 box-sizing disTab">
<a href="javascriptt:void(0)" class="new-link new-lw">+ Добавить раздел</a>
</div>
</div>
</div>
<div class="col-lg-12 new-filter">
<div class="filter clearfix">
<div class="titleF1 disTab">
<div class="col-lg-3">Специализация проекта:</div>
<div class="col-lg-3"></div>
<div class="col-lg-3"></div>
<div class="col-lg-3"></div>
</div>
<div class="polsF1 disTab">
<div class="col-lg-3">
<select id="specialization1" name="{{ project_form.specialization.name }}">
</select>
{# {{ project_form.specialization }}#}
</div>
<div class="col-lg-3">
<select class="selectpicker">
<option>Mustard</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
</div>
<div class="col-lg-3">
{# <select class="selectpicker">#}
{# <option>Mustard</option>#}
{# <option>Ketchup</option>#}
{# <option>Relish</option>#}
{# </select>#}
</div>
<div class="col-lg-3">
{# <select class="selectpicker">#}
{# <option>Mustard</option>#}
{# <option>Ketchup</option>#}
{# <option>Relish</option>#}
{# </select>#}
</div>
</div>
<div class="titleF1 titleF2 disTab">
<div class="col-lg-4">Бюджет</div>
<div class="col-lg-8"></div>
</div>
<div class="searchF1 polsF1 polsFF">
<div class="col-lg-4">
<input type="text" name="{{ project_form.price.name }}" class="box-sizing surr">
<select class="selectpicker2 valul">
<option>&#36;</option>
<option>&#36;</option>
<option>&#36;</option>
</select>
</div>
<div class="col-lg-3">
<select class="selectpicker">
<option>За проект</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
</div>
<div class="col-lg-5 dog-new">
<label><input type="checkbox" name="dogovor"><span></span></label>
<p>или по договоренности</p>
</div>
</div>
<div class="searchF1 polsF1 polsFF make-new">
<label><input type="checkbox" name="dogovor"><span></span></label>
<p>Сделать для исполнителей обязательным для заполнения поля цена и срок</p>
</div>
<div class="titleF1 titleF2 disTab">
<div class="col-lg-12">Способ оплаты</div>
</div>
<div class="searchF1 polsF1 polsFF radio-afer">
<div class="col-lg-6">
<label><input type="radio" name="afer"><span></span></label>
<p class="text-afer">
Безопасная сделка (с резервированием бюджета)
</p>
<p class="des-afer">
Текст
</p>
</div>
<div class="col-lg-6">
<label><input type="radio" name="afer"><span></span></label>
<p class="text-afer">
Прямая оплата Исполнителю на его кошелек/счет
</p>
<p class="des-afer">
Текст
</p>
</div>
</div>
<div class="resSearchF1">
<div class="col-lg-3">
<p class="titleResF1">Расширенный поиск</p>
<button class="resButtonF1">
<span class="glyphicon glyphicon-arrow-up" aria-hidden="true"></span>
</button>
</div>
<div class="col-lg-9">
<div class="borderS1"></div>
</div>
</div>
<div class="slideRes disTab activeSlide">
<div class="titleF1 disTab">
<div class="col-lg-3">Выбор объекта:</div>
<div class="col-lg-3">Наименование:</div>
<div class="col-lg-3">Классификация здания:</div>
<div class="col-lg-3">Вид строительства:</div>
</div>
<div class="polsF1 polsF2 disTab">
<div class="col-lg-3">
<select class="selectpicker" >
<option>Mustard</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
</div>
<div class="col-lg-3">
<input type="text" class="box-sizing surr surr2" name="{{ realty_form.name.name }}">
</div>
<div class="col-lg-3">
<select class="selectpicker" name="{{ realty_form.building_classification.name }}">
<option>Mustard</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
</div>
<div class="col-lg-3">
<select class="selectpicker" name="{{ realty_form.type_construction.name }}">
<option>Mustard</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
</div>
</div>
<div class="titleF1 disTab">
<div class="col-lg-12">Местоположение:</div>
</div>
<div class="polsF1 polsF2 disTab">
<div class="col-lg-3">
<select class="selectpicker" name="{{ realty_form.country.name }}">
<option>Страна</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
</div>
<div class="col-lg-3">
<select class="selectpicker" {{ realty_form.city.name }}>
<option>Город</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
</div>
<div class="col-lg-6 make-new">
<label><input type="checkbox" name="dogovor"><span></span></label>
<p>Требуется допуск СРО</p>
</div>
</div>
<div class="searchF1 polsF1 polsFF links-filter">
<input style="border-radius: 40px;
font-family: 'pfdintextcomppro-regular', sans-serif;color: black;font-size: 16px;padding: 17px 33px 17px 33px;
float: left;margin: 0 15px 48px 15px;border: 1px solid #DFDFDF;text-transform: uppercase;
letter-spacing: 2px;color: #42B476;border: 1px solid #42B476" type="submit" value="Разместить проект" />
<a href="javascript:void(0)">Сохранить</a>
</div>
</div>
</div>
</div>
</form>
{% endblock %}
{% block js_block %}
<script type="text/javascript">
$(function () {
function updateSelectData(){
}
$.ajax({
url: '/api/specializations?parent=1',
type: 'GET',
dataType: 'json',
success: function (json) {
console.log(json.results);
var out = ''
$.each(json.results, function (i, v) {
$('#specialization1')
.append($("<option></option>")
.attr("value", v.name)
.text(v.name));
});
$("#specialization1").addClass("selectpicker");
$('.selectpicker').selectpicker({
style: 'btn-info',
size: 4,
width: '237px'
});
}
});
$("#specialization1").on("change",function(){
});
});
</script>
{% endblock %}

@ -0,0 +1,18 @@
<form method="post" action="">{% csrf_token %}
{{ form.as_p }}
<fieldset>
<legend>Photos</legend>
{{ portfolio_photo_form.management_form }}
{{ portfolio_photo_form.non_form_errors }}
{% for form in portfolio_photo_form %}
{{ form.id }}
<div class="inline {{ portfolio_photo_form.prefix }}">
{{ form.img.errors }}
{{ form.img.label_tag }}
{{ form.img }}
</div>
{% endfor %}
</fieldset>
<input type="submit" value="Add portfolio" class="submit" />
</form>

@ -72,7 +72,7 @@
<div class="col-lg-10 col-lg-offset-1">
<ul class="listProjectIn">
<li>
<span>Местоположение:</span> {{ project.realty.country }}, {{ project.realty.city }}
<span>Местоположение:</span>
</li>
<li>
<span>Классификация здания:</span> {{ project.realty.building_classification }}

@ -26,6 +26,7 @@ from .mixins import LastAccessMixin
class ProjectsView(ListView):
model = Project
template_name = 'project_list.html'
class ProjectView(LastAccessMixin, View):

@ -0,0 +1,28 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.6 on 2016-06-15 13:11
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
import mptt.fields
class Migration(migrations.Migration):
dependencies = [
('common', '0001_initial'),
('users', '0013_auto_20160610_1703'),
]
operations = [
migrations.AddField(
model_name='user',
name='location',
field=mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='users', to='common.Location'),
),
migrations.AddField(
model_name='user',
name='patronym',
field=models.CharField(blank=True, max_length=255),
),
]

@ -0,0 +1,78 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.6 on 2016-06-15 14:47
from __future__ import unicode_literals
import datetime
from django.db import migrations, models
import django.db.models.deletion
from django.utils.timezone import utc
class Migration(migrations.Migration):
dependencies = [
('users', '0014_auto_20160615_1611'),
]
operations = [
migrations.CreateModel(
name='ContractorFinancialInfo',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('fio', models.CharField(max_length=255)),
('date_of_birth', models.DateTimeField()),
('phone', models.CharField(max_length=30)),
('residency', models.CharField(choices=[('russian_resident', 'Резидент РФ'), ('non_russian_resident', 'Нерезидент РФ'), ('refugee', 'Беженец'), ('russian_stay_permit', 'Вид на жительство')], max_length=50)),
('legal_status', models.CharField(choices=[('individual', 'Физическое лицо'), ('legal_entity', 'ИП и Юридическое лицо')], max_length=30)),
('passport_series', models.CharField(max_length=6)),
('passport_number', models.CharField(max_length=10)),
('subdivision_code', models.CharField(max_length=10)),
('passport_issued_by', models.CharField(max_length=255)),
('passport_issue_date', models.DateTimeField()),
('inn', models.CharField(max_length=100)),
('yandex_money', models.CharField(max_length=50)),
('credit_card_number', models.CharField(max_length=50)),
('passport_scan', models.ImageField(upload_to='users/contractors/')),
],
options={
'verbose_name': 'Финансовая информация',
'verbose_name_plural': 'Финансовая информация',
},
),
migrations.AddField(
model_name='user',
name='avatar',
field=models.ImageField(blank=True, upload_to='users/avatars/'),
),
migrations.AddField(
model_name='user',
name='cro',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='user',
name='date_of_birth',
field=models.DateTimeField(default=datetime.datetime(2016, 6, 15, 14, 47, 5, 758769, tzinfo=utc)),
preserve_default=False,
),
migrations.AddField(
model_name='user',
name='gender',
field=models.CharField(blank=True, choices=[('male', 'Мужской'), ('female', 'Женский')], max_length=30),
),
migrations.AddField(
model_name='user',
name='skype',
field=models.CharField(blank=True, max_length=100),
),
migrations.AddField(
model_name='user',
name='website',
field=models.CharField(blank=True, max_length=255),
),
migrations.AddField(
model_name='user',
name='contractor_financial_info',
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='contractor', to='users.ContractorFinancialInfo'),
),
]

@ -1,3 +1,4 @@
from mptt.models import TreeForeignKey
from datetime import datetime
from django.db import models
from django.utils import timezone
@ -5,7 +6,6 @@ from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, Abstra
from specializations.models import Specialization
class UserManager(BaseUserManager):
def create_user(self, email, password=None):
if not email:
@ -32,6 +32,48 @@ class CustomerUserManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(groups__name='Заказчики')
GENDERS = (
('male', 'Мужской'),
('female', 'Женский'),
)
class ContractorFinancialInfo(models.Model):
RESIDENCIES = (
('russian_resident', 'Резидент РФ'),
('non_russian_resident', 'Нерезидент РФ'),
('refugee', 'Беженец'),
('russian_stay_permit', 'Вид на жительство'),
)
LEGAL_STATUSES = (
('individual', 'Физическое лицо'),
('legal_entity', 'ИП и Юридическое лицо'),
)
fio = models.CharField(max_length=255)
date_of_birth = models.DateTimeField()
phone = models.CharField(max_length=30)
residency = models.CharField(max_length=50,choices=RESIDENCIES)
legal_status = models.CharField(max_length=30, choices=LEGAL_STATUSES)
passport_series = models.CharField(max_length=6)
passport_number = models.CharField(max_length=10)
subdivision_code = models.CharField(max_length=10)
passport_issued_by = models.CharField(max_length=255)
passport_issue_date = models.DateTimeField()
inn = models.CharField(max_length=100)
yandex_money = models.CharField(max_length=50)
credit_card_number = models.CharField(max_length=50)
passport_scan = models.ImageField(upload_to='users/contractors/')
def __str__(self):
return self.fio
class Meta:
verbose_name = 'Финансовая информация'
verbose_name_plural = 'Финансовая информация'
class User(AbstractBaseUser, PermissionsMixin):
STATUSES = (
@ -42,13 +84,22 @@ class User(AbstractBaseUser, PermissionsMixin):
nickname = models.CharField(max_length=50, blank=True,null=True)
first_name = models.CharField(max_length=255, blank=True)
last_name = models.CharField(max_length=255, blank=True)
patronym = models.CharField(max_length=255, blank=True)
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)
contractor_specializations = models.ManyToManyField(Specialization, related_name='contractors', blank=True)
contractor_status = models.CharField(default='free', max_length=20, choices=STATUSES)
contractor_financial_info = models.OneToOneField(ContractorFinancialInfo, related_name='contractor',blank=True, null=True)
location = TreeForeignKey('common.Location', related_name='users', null=True, blank=True)
skype = models.CharField(max_length=100, blank=True)
gender = models.CharField(max_length=30, choices=GENDERS, blank=True)
cro = models.BooleanField(default=False)
website = models.CharField(max_length=255, blank=True)
date_of_birth = models.DateTimeField()
avatar = models.ImageField(upload_to='users/avatars/', blank=True)
@property
def is_staff(self):
return self.is_superuser
@ -57,7 +108,6 @@ class User(AbstractBaseUser, PermissionsMixin):
def is_free(self):
return self.contractor_status == 'free'
def __str__(self):
return self.email
@ -85,6 +135,7 @@ class User(AbstractBaseUser, PermissionsMixin):
class Team(models.Model):
name = models.CharField(max_length=255)
users = models.ManyToManyField(User, related_name ='teams', blank=True)

@ -0,0 +1,144 @@
{% extends 'partials/base.html' %}
{% load staticfiles %}
{% block content %}
{% include 'partials/header.html' %}
<div class="container mainScore">
<div class="row">
<div class="projectsBlock disTab">
<div class="col-lg-12">
<div class="col-lg-3 divCol3">
<div class="avatar">
<div class="avatarInset">
<img src="img/profile.jpg" alt="profile-image">
</div>
</div>
<div class="menuUser upload-img disTab">
<div class="upload2 up-l1">
<input type="file" name="upload">
<p>Загрузить фотографию</p>
</div>
</div>
</div>
<div class="col-lg-9 divCol9">
<div class="col-lg-4">
<p class="name-edit-p">ФИО:</p>
<input type="text" value="{{ contractor.get_full_name }}" class="box-sizing inp-edit">
<input type="text" value="{{ contractor.last_name }}" class="box-sizing inp-edit">
<input type="text" value="{{ contractor. }}" class="box-sizing inp-edit">
</div>
<div class="col-lg-4">
<p class="name-edit-p">Специализация:</p>
<div class="polsF1 pols-edit disTab">
<select class="selectpicker4">
<option>Mustard</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
<select class="selectpicker4">
<option>Mustard</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
<a href="javascript:void(0)" class="add-edit">
Добавить еще
</a>
</div>
</div>
<div class="col-lg-4">
<p class="name-edit-p">Местоположение:</p>
<div class="polsF1 pols-edit disTab">
<select class="selectpicker4">
<option>Страна</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
<select class="selectpicker4">
<option>Город</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
</div>
</div>
</div>
</div>
</div>
<div class="buttonGP btn-edit 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>
</div>
</div>
<div class="col-lg-12 col12 new-filter">
<div class="filter clearfix">
<div class="titleF1 disTab">
<div class="col-lg-7">Дата рождения:</div>
<div class="col-lg-5">Пол:</div>
</div>
<div class="polsF1 disTab">
<div class="col-lg-7">
<select class="selectpicker2 valul">
<option>1</option>
<option>2</option>
<option>3</option>
</select>
<select class="selectpicker left-edit">
<option>Января</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
<select class="selectpicker5 valul left-edit">
<option>1996</option>
<option>1995</option>
<option>1995</option>
</select>
</div>
<div class="col-lg-5 dog-new ed-new">
<label><input type="radio" name="sex"><span></span></label>
<p>Мужской</p>
<label class="woman"><input type="radio" name="sex"><span></span></label>
<p>Женский</p>
</div>
</div>
<div class="titleF1 titleF2 disTab">
<div class="col-lg-3">Сайт:</div>
<div class="col-lg-3">Skype:</div>
<div class="col-lg-3">Электронная почта:</div>
<div class="col-lg-3">Телефон:</div>
</div>
<div class="searchF1 polsF1 polsFF polsF3">
<div class="col-lg-3">
<input type="text" class="box-sizing surr surr2" placeholder="beeg.com">
</div>
<div class="col-lg-3">
<input type="text" class="box-sizing surr surr2" placeholder="nokia770">
</div>
<div class="col-lg-3">
<input type="text" class="box-sizing surr surr2" placeholder="example@gmail.com">
</div>
<div class="col-lg-3">
<input type="text" class="box-sizing surr surr2" placeholder="+7 999 999 44 02">
</div>
</div>
<div class="col-lg-12">
<div class="col-lg-12 make-new make-eed">
<label><input type="checkbox" name="dogovor"><span></span></label>
<p>Есть допуск СРО</p>
</div>
</div>
<div class="searchF1 polsF1 polsFF links-filter">
<a href="javascript:void(0)">Сохранить</a>
</div>
</div>
<div>
{% include 'partials/footer.html' %}
</div>
</div>
</div>
</div>
{% endblock %}

@ -0,0 +1 @@
{{ greeting }}, {{ person|default:"friend" }}!

@ -5,13 +5,14 @@ from .views import (
ContractorListView,
ContractorOfficeDetailView,
ContractorProfileDetailView,
ContractorProfileEditView,
CustomerProfileCurrentProjectsView,
CustomerProfileOpenProjectsView,
CustomerProfileReviewsView,
CustomerProfileTrashedProjectsView,
# UserDetailView,
# UserInfoListView,
# UserListView,
UserListView,
# UserView,
)
@ -27,8 +28,9 @@ urlpatterns = [
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'^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'^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'contractors/(?P<pk>\d+)/edit/$', ContractorProfileEditView.as_view(), name='contractor-edit' ),
]

@ -1,4 +1,4 @@
from django.shortcuts import render
from django.shortcuts import render, get_object_or_404
from django.contrib.auth.models import Group
from django.views.generic import ListView, DetailView, View, UpdateView
from django.views.generic.base import TemplateView
@ -63,3 +63,11 @@ class CustomerProfileReviewsView(BaseMixin, DetailView):
model = User
template_name = 'customer_profile_reviews.html'
context_object_name = 'customer'
class ContractorProfileEditView(BaseMixin, View):
template_name = 'contractor_profile_edit.html'
def get(self, request, *args, **kwargs):
contractor = get_object_or_404(User, pk=kwargs.get('pk'))
return render(request, self.template_name, {'contractor': contractor})

Loading…
Cancel
Save