commit
78938cd9e9
64 changed files with 2738 additions and 527 deletions
@ -0,0 +1,20 @@ |
||||
from django.contrib.auth.models import Group, Permission |
||||
from django.contrib.contenttypes.models import ContentType |
||||
from django.core.management import BaseCommand |
||||
from django.utils import timezone |
||||
import pydash as _; _.map = _.map_; _.filter = _.filter_ |
||||
import random |
||||
|
||||
from archilance import util |
||||
from common.models import Location |
||||
from specializations.models import Specialization |
||||
from users.models import User, GENDERS, Team |
||||
|
||||
|
||||
class Command(BaseCommand): |
||||
def handle(self, *args, **options): |
||||
print('---------------------------------------') |
||||
print('Generating something...') |
||||
print('---------------------------------------') |
||||
|
||||
pass |
||||
@ -0,0 +1,18 @@ |
||||
from django.contrib.auth.models import Group, Permission |
||||
from django.contrib.contenttypes.models import ContentType |
||||
from django.core.management import BaseCommand |
||||
from django.utils import timezone |
||||
import pydash as _; _.map = _.map_; _.filter = _.filter_ |
||||
import random |
||||
|
||||
from archilance import util |
||||
from projects.models import BuildingClassfication |
||||
|
||||
|
||||
class Command(BaseCommand): |
||||
def handle(self, *args, **options): |
||||
print('---------------------------------------') |
||||
print('Generating building classifications...') |
||||
print('---------------------------------------') |
||||
|
||||
_.times(lambda i: BuildingClassfication.objects.create(name='Build. classif. %s' % i), 100) |
||||
@ -0,0 +1,18 @@ |
||||
from django.contrib.auth.models import Group, Permission |
||||
from django.contrib.contenttypes.models import ContentType |
||||
from django.core.management import BaseCommand |
||||
from django.utils import timezone |
||||
import pydash as _; _.map = _.map_; _.filter = _.filter_ |
||||
import random |
||||
|
||||
from archilance import util |
||||
from projects.models import ConstructionType |
||||
|
||||
|
||||
class Command(BaseCommand): |
||||
def handle(self, *args, **options): |
||||
print('---------------------------------------') |
||||
print('Generating construction types...') |
||||
print('---------------------------------------') |
||||
|
||||
_.times(lambda i: ConstructionType.objects.create(name='Constr. type %s' % i), 100) |
||||
@ -0,0 +1,71 @@ |
||||
from django.contrib.auth.models import Group, Permission |
||||
from django.contrib.contenttypes.models import ContentType |
||||
from django.core.management import BaseCommand |
||||
from django.utils import timezone |
||||
import pydash as _; _.map = _.map_; _.filter = _.filter_ |
||||
import random |
||||
|
||||
from archilance import util |
||||
from common.models import Location |
||||
from projects.models import Portfolio, PortfolioPhoto, CURRENCIES, TERMS, BuildingClassfication , ConstructionType |
||||
from specializations.models import Specialization |
||||
from users.models import User, Team, GENDERS |
||||
|
||||
|
||||
class Command(BaseCommand): |
||||
def handle(self, *args, **options): |
||||
print('---------------------------------------') |
||||
print('Generating portfolios...') |
||||
print('---------------------------------------') |
||||
|
||||
|
||||
# ('photos', 'Relation? True', 'Null? True', '(relation)', 'Hidden? False'), |
||||
# ('budget', 'Relation? False', 'Null? True', 'Blank? True', 'Hidden? False'), |
||||
# ('building_classification', 'Relation? True', 'Null? True', '(relation)', 'Hidden? False'), |
||||
# ('construction_type', 'Relation? True', 'Null? True', '(relation)', 'Hidden? False'), |
||||
# ('currency', 'Relation? False', 'Null? True', 'Blank? True', 'Hidden? False'), |
||||
# ('description', 'Relation? False', 'Null? False', 'Blank? False', 'Hidden? False'), |
||||
# ('location', 'Relation? True', 'Null? True', '(relation)', 'Hidden? False'), |
||||
# ('name', 'Relation? False', 'Null? False', 'Blank? False', 'Hidden? False'), |
||||
# ('specialization', 'Relation? True', 'Null? True', '(relation)', 'Hidden? False'), |
||||
# ('team', 'Relation? True', 'Null? True', '(relation)', 'Hidden? False'), |
||||
# ('term', 'Relation? False', 'Null? True', 'Blank? True', 'Hidden? False'), |
||||
# ('term_type', 'Relation? False', 'Null? True', 'Blank? True', 'Hidden? False'), |
||||
# ('user', 'Relation? True', 'Null? True', '(relation)', 'Hidden? False'), |
||||
# ('worksell', 'Relation? False', 'Null? False', 'Blank? True', 'Hidden? False'), |
||||
|
||||
|
||||
def create_portfolio(i): |
||||
portf = Portfolio( |
||||
name='Portforlio %s' % i, |
||||
description="Portforlio %s's description" % i, |
||||
budget=util.random_amount(), |
||||
currency=_.sample(CURRENCIES)[0], |
||||
term=_.random(0, 20), |
||||
term_type=_.sample(TERMS)[0], |
||||
worksell=_.sample((True, False)), |
||||
) |
||||
|
||||
portf.save() |
||||
|
||||
if _.sample((True, False)): |
||||
portf.user = User.contractor_objects.order_by('?').first() |
||||
else: |
||||
portf.team = Team.objects.order_by('?').first() |
||||
|
||||
portf.building_classification = BuildingClassfication.objects.order_by('?').first() |
||||
portf.construction_type = ConstructionType.objects.order_by('?').first() |
||||
portf.location = Location.objects.root_nodes()[0].get_descendants().order_by('?').first() |
||||
portf.specialization = Specialization.objects.root_nodes()[0].get_descendants().order_by('?').first() |
||||
|
||||
pic_names = _.split('a.png b.png c.jpg d.png e.jpg f.png g.png h.jpg i.png j.png k.jpg l.png m.png n.png o.png p.png q.jpg', ' ') |
||||
|
||||
_.times( |
||||
lambda i_: portf.photos.create(img='_sample_files/%s' % util.take_one_random(pic_names)), |
||||
_.random(1, 15), |
||||
) |
||||
|
||||
portf.save() |
||||
return portf |
||||
|
||||
_.times(create_portfolio, 1000) |
||||
@ -0,0 +1,41 @@ |
||||
from django.contrib.auth.models import Group, Permission |
||||
from django.contrib.contenttypes.models import ContentType |
||||
from django.core.management import BaseCommand |
||||
from django.utils import timezone |
||||
import pydash as _; _.map = _.map_; _.filter = _.filter_ |
||||
import random |
||||
|
||||
from archilance import util |
||||
from projects.models import Project, Portfolio |
||||
from specializations.models import Specialization |
||||
from users.models import User, GENDERS, Team |
||||
from reviews.models import Review |
||||
|
||||
|
||||
class Command(BaseCommand): |
||||
def handle(self, *args, **options): |
||||
print('---------------------------------------') |
||||
print('Generating reviews...') |
||||
print('---------------------------------------') |
||||
|
||||
def create_review(i): |
||||
review = Review() |
||||
|
||||
review.project = Project.objects.order_by('?').first() |
||||
review.stars = _.random(1, 5) |
||||
review.text = 'This is a review %s text' % i |
||||
review.is_secured = _.sample((True, False)) |
||||
|
||||
review.save() |
||||
|
||||
if _.sample((True, False)): |
||||
review.from_contractor = User.contractor_objects.order_by('?').first() |
||||
review.target_customer = User.customer_objects.order_by('?').first() |
||||
else: |
||||
review.from_customer = User.customer_objects.order_by('?').first() |
||||
review.target_contractor = User.contractor_objects.order_by('?').first() |
||||
|
||||
review.save() |
||||
return review |
||||
|
||||
_.times(create_review, 300) |
||||
@ -0,0 +1,46 @@ |
||||
from django.contrib.auth.models import Group, Permission |
||||
from django.contrib.contenttypes.models import ContentType |
||||
from django.core.management import BaseCommand |
||||
from django.utils import timezone |
||||
import pydash as _; _.map = _.map_; _.filter = _.filter_ |
||||
import random |
||||
|
||||
from archilance import util |
||||
from projects.models import Portfolio |
||||
from specializations.models import Specialization |
||||
from users.models import User, GENDERS, Team |
||||
|
||||
|
||||
class Command(BaseCommand): |
||||
def handle(self, *args, **options): |
||||
print('---------------------------------------') |
||||
print('Generating teams...') |
||||
print('---------------------------------------') |
||||
|
||||
|
||||
# ('name', 'Relation? False', 'Null? False', 'Blank? False', 'Hidden? False'), |
||||
|
||||
# ('portfolios', 'Relation? True', 'Null? True', '(relation)', 'Hidden? False'), |
||||
# ('owner', 'Relation? True', 'Null? True', '(relation)', 'Hidden? False'), |
||||
# ('users', 'Relation? True', 'Null? False', '(relation)', 'Hidden? False'), |
||||
# ('specializations', 'Relation? True', 'Null? False', '(relation)', 'Hidden? False'), |
||||
|
||||
|
||||
contractors = list(User.contractor_objects.order_by('?')) |
||||
|
||||
owners = util.take(contractors, len(contractors) // 2) |
||||
members = contractors |
||||
i = 0 |
||||
|
||||
for owner in owners: |
||||
team = Team(name='Team %s' % i) |
||||
team.save() |
||||
|
||||
team.owner = owner |
||||
team.users = _.sample(members, _.random(1, 5)) |
||||
|
||||
team.specializations = Specialization.objects.root_nodes()[0].get_descendants().order_by('?')[:_.random(1, 5)] |
||||
team.portfolios = Portfolio.objects.order_by('?')[:_.random(1, 10)] |
||||
|
||||
team.save() |
||||
i += 1 |
||||
@ -0,0 +1,28 @@ |
||||
from django.contrib.auth.models import Group, Permission |
||||
from django.contrib.contenttypes.models import ContentType |
||||
from django.core.management import BaseCommand |
||||
from django.utils import timezone |
||||
import pydash as _; _.map = _.map_; _.filter = _.filter_ |
||||
import random |
||||
|
||||
from archilance import util |
||||
from common.models import Location |
||||
from projects.models import Project, Order, CURRENCIES, TERMS, Specialization, Realty |
||||
from users.models import User, Team |
||||
|
||||
|
||||
class Command(BaseCommand): |
||||
def handle(self, *args, **options): |
||||
# for user in User.objects.all(): |
||||
# user.location = Location.objects.root_nodes()[0].get_descendants().order_by('?').first() |
||||
# user.cro = _.sample((True, False)) |
||||
# |
||||
# user.save() |
||||
|
||||
#------------------------------------------ |
||||
|
||||
for team in Team.objects.all(): |
||||
# team.specializations = Specialization.objects.root_nodes()[0].get_descendants().order_by('?')[:_.random(1, 5)] |
||||
team.created = util.random_date() |
||||
|
||||
team.save() |
||||
@ -0,0 +1,42 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.9.7 on 2016-07-21 15:08 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.db import migrations, models |
||||
import django.utils.timezone |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
initial = True |
||||
|
||||
dependencies = [ |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.CreateModel( |
||||
name='Message', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('text', models.TextField()), |
||||
('created', models.DateTimeField(default=django.utils.timezone.now)), |
||||
('private_type', models.BooleanField(default=False)), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Сообщение', |
||||
'verbose_name_plural': 'Сообщения', |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='Notes', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('text', models.TextField()), |
||||
('created', models.DateTimeField(default=django.utils.timezone.now)), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Заметка', |
||||
'verbose_name_plural': 'Заметки', |
||||
}, |
||||
), |
||||
] |
||||
@ -0,0 +1,24 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.9.7 on 2016-07-21 15:08 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.db import migrations, models |
||||
import django.db.models.deletion |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
initial = True |
||||
|
||||
dependencies = [ |
||||
('chat', '0001_initial'), |
||||
('projects', '0001_initial'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AddField( |
||||
model_name='notes', |
||||
name='order', |
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='order_notes', to='projects.Order'), |
||||
), |
||||
] |
||||
@ -0,0 +1,46 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.9.7 on 2016-07-21 15:08 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.conf import settings |
||||
from django.db import migrations, models |
||||
import django.db.models.deletion |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
initial = True |
||||
|
||||
dependencies = [ |
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL), |
||||
('projects', '0001_initial'), |
||||
('chat', '0002_notes_order'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AddField( |
||||
model_name='notes', |
||||
name='recipent', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='recipent_notes', to=settings.AUTH_USER_MODEL), |
||||
), |
||||
migrations.AddField( |
||||
model_name='notes', |
||||
name='sender', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sender_notes', to=settings.AUTH_USER_MODEL), |
||||
), |
||||
migrations.AddField( |
||||
model_name='message', |
||||
name='order', |
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='order_messages', to='projects.Order'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='message', |
||||
name='recipent', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='recipent_messages', to=settings.AUTH_USER_MODEL), |
||||
), |
||||
migrations.AddField( |
||||
model_name='message', |
||||
name='sender', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sender_messages', to=settings.AUTH_USER_MODEL), |
||||
), |
||||
] |
||||
@ -0,0 +1,62 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.9.7 on 2016-07-21 15:08 |
||||
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='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(choices=[('_root', 'Корень'), ('country', 'Страна'), ('region', 'Регион'), ('town', 'Город')], max_length=20)), |
||||
('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': 'Местоположение', |
||||
'verbose_name_plural': 'Местоположения', |
||||
}, |
||||
managers=[ |
||||
('_default_manager', django.db.models.manager.Manager()), |
||||
], |
||||
), |
||||
migrations.CreateModel( |
||||
name='MainPage', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('contractor_text', models.TextField()), |
||||
('customer_text', models.TextField()), |
||||
('video_code', models.TextField()), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Главная страница', |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='Settings', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('time_notification', models.IntegerField(default=180)), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Настройки сайта', |
||||
'verbose_name_plural': 'Настройки сайта', |
||||
}, |
||||
), |
||||
] |
||||
@ -0,0 +1,114 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.9.7 on 2016-07-21 15:08 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.conf import settings |
||||
from django.db import migrations, models |
||||
import django.db.models.deletion |
||||
import mptt.fields |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
initial = True |
||||
|
||||
dependencies = [ |
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL), |
||||
('users', '0001_initial'), |
||||
('common', '0001_initial'), |
||||
('projects', '0001_initial'), |
||||
('specializations', '0001_initial'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AddField( |
||||
model_name='realty', |
||||
name='user', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='realties', to=settings.AUTH_USER_MODEL), |
||||
), |
||||
migrations.AddField( |
||||
model_name='projectfile', |
||||
name='project', |
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='files', to='projects.Project'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='project', |
||||
name='customer', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='projects', to=settings.AUTH_USER_MODEL), |
||||
), |
||||
migrations.AddField( |
||||
model_name='project', |
||||
name='realty', |
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='projects', to='projects.Realty'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='project', |
||||
name='specialization', |
||||
field=mptt.fields.TreeForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='projects', to='specializations.Specialization'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='portfoliophoto', |
||||
name='portfolio', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='photos', to='projects.Portfolio'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='portfolio', |
||||
name='building_classification', |
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='portfolios', to='projects.BuildingClassfication'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='portfolio', |
||||
name='construction_type', |
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='portfolios', to='projects.ConstructionType'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='portfolio', |
||||
name='location', |
||||
field=mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='portfolios', to='common.Location'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='portfolio', |
||||
name='specialization', |
||||
field=mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='portfolios', to='specializations.Specialization'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='portfolio', |
||||
name='team', |
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='portfolios', to='users.Team'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='portfolio', |
||||
name='user', |
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='portfolios', to=settings.AUTH_USER_MODEL), |
||||
), |
||||
migrations.AddField( |
||||
model_name='order', |
||||
name='contractor', |
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='orders', to=settings.AUTH_USER_MODEL), |
||||
), |
||||
migrations.AddField( |
||||
model_name='order', |
||||
name='project', |
||||
field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='order', to='projects.Project'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='candidate', |
||||
name='answer', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='candidates', to='projects.Answer'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='candidate', |
||||
name='project', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='candidates', to='projects.Project'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='answer', |
||||
name='contractor', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='answers', to=settings.AUTH_USER_MODEL), |
||||
), |
||||
migrations.AddField( |
||||
model_name='answer', |
||||
name='project', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='answers', to='projects.Project'), |
||||
), |
||||
] |
||||
@ -0,0 +1,176 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.9.7 on 2016-07-21 15:08 |
||||
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): |
||||
|
||||
initial = True |
||||
|
||||
dependencies = [ |
||||
('common', '0001_initial'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.CreateModel( |
||||
name='Answer', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('budget', models.DecimalField(decimal_places=0, max_digits=10)), |
||||
('created', models.DateTimeField(default=django.utils.timezone.now)), |
||||
('currency', models.CharField(choices=[('rur', 'RUR'), ('usd', 'USD'), ('eur', 'EUR')], default='rur', max_length=5)), |
||||
('term', models.IntegerField(default=0)), |
||||
('term_type', models.CharField(choices=[('project', 'За проект'), ('hour', 'За час'), ('day', 'За день'), ('month', 'За месяц')], default='hour', max_length=10)), |
||||
('text', models.TextField()), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Ответ к проекту', |
||||
'ordering': ('-created',), |
||||
'verbose_name_plural': 'Ответы к проектам', |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='BuildingClassfication', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('name', models.CharField(max_length=255)), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Тип здания', |
||||
'verbose_name_plural': 'Типы зданий', |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='Candidate', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('status', models.BooleanField(default=False)), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Кандидат', |
||||
'verbose_name_plural': 'Кандидаты', |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='ConstructionType', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('name', models.CharField(max_length=255)), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Вид строительства', |
||||
'verbose_name_plural': 'Виды строительства', |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='Order', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('created', models.DateTimeField(default=django.utils.timezone.now)), |
||||
('secure', models.BooleanField(default=False)), |
||||
('status', models.BooleanField(default=False)), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Заказ', |
||||
'verbose_name_plural': 'Заказы', |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='Portfolio', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('budget', models.DecimalField(blank=True, decimal_places=0, default=0, max_digits=10, null=True)), |
||||
('currency', models.CharField(blank=True, choices=[('rur', 'RUR'), ('usd', 'USD'), ('eur', 'EUR')], default='rur', max_length=20, null=True)), |
||||
('description', models.TextField()), |
||||
('name', models.CharField(max_length=255)), |
||||
('term', models.IntegerField(blank=True, default=0, null=True)), |
||||
('term_type', models.CharField(blank=True, choices=[('project', 'За проект'), ('hour', 'За час'), ('day', 'За день'), ('month', 'За месяц')], default='hour', max_length=20, null=True)), |
||||
('worksell', models.BooleanField(default=False)), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Портфолио', |
||||
'verbose_name_plural': 'Портфолио', |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='PortfolioPhoto', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('img', models.ImageField(upload_to='projects/portfolio')), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Фото портфолио', |
||||
'verbose_name_plural': 'Фото портфолио', |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='Project', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('budget', models.DecimalField(decimal_places=0, max_digits=10)), |
||||
('budget_by_agreement', models.BooleanField(default=False)), |
||||
('created', models.DateTimeField(default=django.utils.timezone.now)), |
||||
('cro', models.BooleanField(default=False)), |
||||
('currency', models.CharField(choices=[('rur', 'RUR'), ('usd', 'USD'), ('eur', 'EUR')], default='rur', max_length=20)), |
||||
('deal_type', models.CharField(choices=[('secure_deal', 'Безопасная сделка (с резервированием бюджета) '), ('direct_payment', 'Прямая оплата Исполнителю на его кошелек/счет')], default='secure_deal', max_length=20)), |
||||
('name', models.CharField(max_length=255)), |
||||
('price_and_term_required', models.BooleanField(default=False)), |
||||
('state', models.CharField(choices=[('active', 'Активный'), ('trashed', 'В корзине'), ('deleted', 'Удален')], default='active', max_length=20)), |
||||
('term', models.IntegerField(default=0)), |
||||
('term_type', models.CharField(choices=[('project', 'За проект'), ('hour', 'За час'), ('day', 'За день'), ('month', 'За месяц')], default='hour', max_length=20)), |
||||
('text', models.TextField(blank=True)), |
||||
('work_type', models.IntegerField(choices=[(1, 'Проектирование'), (2, 'Техническое сопровождение')], default=1)), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Проект', |
||||
'verbose_name_plural': 'Проекты', |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='ProjectFile', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('file', models.FileField(upload_to='projects/project_files')), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Файл проекта', |
||||
'verbose_name_plural': 'Файлы проектов', |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='Realty', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('name', models.CharField(max_length=255)), |
||||
('building_classification', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='realties', to='projects.BuildingClassfication')), |
||||
('construction_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='realties', to='projects.ConstructionType')), |
||||
('location', mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='realties', to='common.Location')), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Объект', |
||||
'verbose_name_plural': 'Объекты', |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='Stage', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('cost', models.DecimalField(decimal_places=0, max_digits=10)), |
||||
('cost_type', models.CharField(choices=[('rur', 'RUR'), ('usd', 'USD'), ('eur', 'EUR')], default='rur', max_length=5)), |
||||
('name', models.CharField(max_length=255)), |
||||
('result', models.CharField(max_length=255)), |
||||
('term', models.IntegerField(default=0)), |
||||
('term_type', models.CharField(choices=[('project', 'За проект'), ('hour', 'За час'), ('day', 'За день'), ('month', 'За месяц')], default='hour', max_length=10)), |
||||
('order', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='stages', to='projects.Order')), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Этап', |
||||
'verbose_name_plural': 'Этапы', |
||||
}, |
||||
), |
||||
] |
||||
@ -0,0 +1,114 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.9.7 on 2016-07-21 15:08 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.conf import settings |
||||
from django.db import migrations, models |
||||
import django.db.models.deletion |
||||
import mptt.fields |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
initial = True |
||||
|
||||
dependencies = [ |
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL), |
||||
('users', '0001_initial'), |
||||
('common', '0001_initial'), |
||||
('projects', '0001_initial'), |
||||
('specializations', '0001_initial'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AddField( |
||||
model_name='realty', |
||||
name='user', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='realties', to=settings.AUTH_USER_MODEL), |
||||
), |
||||
migrations.AddField( |
||||
model_name='projectfile', |
||||
name='project', |
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='files', to='projects.Project'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='project', |
||||
name='customer', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='projects', to=settings.AUTH_USER_MODEL), |
||||
), |
||||
migrations.AddField( |
||||
model_name='project', |
||||
name='realty', |
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='projects', to='projects.Realty'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='project', |
||||
name='specialization', |
||||
field=mptt.fields.TreeForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='projects', to='specializations.Specialization'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='portfoliophoto', |
||||
name='portfolio', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='photos', to='projects.Portfolio'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='portfolio', |
||||
name='building_classification', |
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='portfolios', to='projects.BuildingClassfication'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='portfolio', |
||||
name='construction_type', |
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='portfolios', to='projects.ConstructionType'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='portfolio', |
||||
name='location', |
||||
field=mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='portfolios', to='common.Location'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='portfolio', |
||||
name='specialization', |
||||
field=mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='portfolios', to='specializations.Specialization'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='portfolio', |
||||
name='team', |
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='portfolios', to='users.Team'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='portfolio', |
||||
name='user', |
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='portfolios', to=settings.AUTH_USER_MODEL), |
||||
), |
||||
migrations.AddField( |
||||
model_name='order', |
||||
name='contractor', |
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='orders', to=settings.AUTH_USER_MODEL), |
||||
), |
||||
migrations.AddField( |
||||
model_name='order', |
||||
name='project', |
||||
field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='order', to='projects.Project'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='candidate', |
||||
name='answer', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='candidates', to='projects.Answer'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='candidate', |
||||
name='project', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='candidates', to='projects.Project'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='answer', |
||||
name='contractor', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='answers', to=settings.AUTH_USER_MODEL), |
||||
), |
||||
migrations.AddField( |
||||
model_name='answer', |
||||
name='project', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='answers', to='projects.Project'), |
||||
), |
||||
] |
||||
@ -0,0 +1,46 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.9.7 on 2016-07-21 15:08 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.conf import settings |
||||
from django.db import migrations, models |
||||
import django.db.models.deletion |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
initial = True |
||||
|
||||
dependencies = [ |
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL), |
||||
('reviews', '0001_initial'), |
||||
('projects', '0002_auto_20160721_1808'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AddField( |
||||
model_name='review', |
||||
name='from_contractor', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='customer_reviews', to=settings.AUTH_USER_MODEL), |
||||
), |
||||
migrations.AddField( |
||||
model_name='review', |
||||
name='from_customer', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='contractor_reviews', to=settings.AUTH_USER_MODEL), |
||||
), |
||||
migrations.AddField( |
||||
model_name='review', |
||||
name='project', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reviews', to='projects.Project'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='review', |
||||
name='target_contractor', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reviews_by_customer', to=settings.AUTH_USER_MODEL), |
||||
), |
||||
migrations.AddField( |
||||
model_name='review', |
||||
name='target_customer', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reviews_by_contractor', to=settings.AUTH_USER_MODEL), |
||||
), |
||||
] |
||||
@ -0,0 +1,46 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.9.7 on 2016-07-21 15:08 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.conf import settings |
||||
from django.db import migrations, models |
||||
import django.db.models.deletion |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
initial = True |
||||
|
||||
dependencies = [ |
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL), |
||||
('reviews', '0001_initial'), |
||||
('projects', '0002_auto_20160721_1808'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AddField( |
||||
model_name='review', |
||||
name='from_contractor', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='customer_reviews', to=settings.AUTH_USER_MODEL), |
||||
), |
||||
migrations.AddField( |
||||
model_name='review', |
||||
name='from_customer', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='contractor_reviews', to=settings.AUTH_USER_MODEL), |
||||
), |
||||
migrations.AddField( |
||||
model_name='review', |
||||
name='project', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reviews', to='projects.Project'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='review', |
||||
name='target_contractor', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reviews_by_customer', to=settings.AUTH_USER_MODEL), |
||||
), |
||||
migrations.AddField( |
||||
model_name='review', |
||||
name='target_customer', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reviews_by_contractor', to=settings.AUTH_USER_MODEL), |
||||
), |
||||
] |
||||
@ -0,0 +1,41 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.9.7 on 2016-07-21 17:21 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.conf import settings |
||||
from django.db import migrations, models |
||||
import django.db.models.deletion |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('reviews', '0002_auto_20160721_1808'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AlterField( |
||||
model_name='review', |
||||
name='from_contractor', |
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='customer_reviews', to=settings.AUTH_USER_MODEL), |
||||
), |
||||
migrations.AlterField( |
||||
model_name='review', |
||||
name='from_customer', |
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='contractor_reviews', to=settings.AUTH_USER_MODEL), |
||||
), |
||||
migrations.AlterField( |
||||
model_name='review', |
||||
name='target_contractor', |
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='reviews_by_customer', to=settings.AUTH_USER_MODEL), |
||||
), |
||||
migrations.AlterField( |
||||
model_name='review', |
||||
name='target_customer', |
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='reviews_by_contractor', to=settings.AUTH_USER_MODEL), |
||||
), |
||||
migrations.AlterUniqueTogether( |
||||
name='review', |
||||
unique_together=set([('from_customer', 'target_contractor', 'project'), ('from_contractor', 'target_customer', 'project')]), |
||||
), |
||||
] |
||||
@ -0,0 +1,34 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.9.7 on 2016-07-21 15:08 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.db import migrations, models |
||||
import django.db.models.deletion |
||||
import mptt.fields |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
initial = True |
||||
|
||||
dependencies = [ |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.CreateModel( |
||||
name='Specialization', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('name', models.CharField(max_length=100)), |
||||
('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='specializations.Specialization')), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Специализация', |
||||
'verbose_name_plural': 'Специализации', |
||||
}, |
||||
), |
||||
] |
||||
@ -1,131 +1,137 @@ |
||||
{% load staticfiles %} |
||||
{% load thumbnail %} |
||||
<div class="wrTop {% if request.user.is_authenticated %} disTab {% endif %}"> |
||||
<div class="container-fluid topMain"> |
||||
<div class="row"> |
||||
<div class="col-lg-3"> |
||||
<div class="logo" onClick="window.location='/'"></div> |
||||
</div> |
||||
{% if request.user.is_authenticated %} |
||||
<div class="col-lg-7"> |
||||
<ul class="mainMenu"> |
||||
<li class="icon_tm1"> |
||||
<a href="{% url 'projects:project-filter' %}">Биржа проектов</a> |
||||
<span></span> |
||||
</li> |
||||
{% load staticfiles %} |
||||
{% load thumbnail %} |
||||
|
||||
<div class="wrTop {% if request.user.is_authenticated %} disTab {% endif %}"> |
||||
<div class="container-fluid topMain"> |
||||
<div class="row"> |
||||
<div class="col-lg-3"> |
||||
<div class="logo" onClick="window.location='/'"></div> |
||||
</div> |
||||
|
||||
{% if request.user.is_authenticated %} |
||||
<div class="col-lg-7"> |
||||
<ul class="mainMenu"> |
||||
<li class="icon_tm1"> |
||||
<a href="{% url 'projects:project-filter' %}">Биржа проектов</a> |
||||
<span></span> |
||||
</li> |
||||
|
||||
{% if request.user.is_contractor %} |
||||
<li class="officeList icon_tml"> |
||||
<a href="{% url 'users:contractor-office' pk=request.user.pk %}">Мой офис</a> |
||||
<span></span> |
||||
</li> |
||||
<li class="officeList icon_tml"> |
||||
<a href="{% url 'users:contractor-office' pk=request.user.pk %}">Мой офис</a> |
||||
<span></span> |
||||
</li> |
||||
{% endif%} |
||||
|
||||
{% if request.user.is_customer %} |
||||
<li class="icon_tm2"> |
||||
<a href="{% url 'users:contractor-list' %}">Поиск исполнителей</a> |
||||
<span></span> |
||||
</li> |
||||
<li class="icon_tm3"> |
||||
<a href="{% url 'users:contractor-list' %}">Работы на продажу</a> |
||||
<span></span> |
||||
</li> |
||||
<a href="{% url 'users:contractor-filter' %}">Поиск исполнителей</a> |
||||
<span></span> |
||||
</li> |
||||
<li class="icon_tm3"> |
||||
<a href="#">Работы на продажу</a> |
||||
<span></span> |
||||
</li> |
||||
{% endif %} |
||||
</ul> |
||||
</div> |
||||
{% else %} |
||||
</ul> |
||||
</div> |
||||
{% else %} |
||||
<div class="col-lg-7"> |
||||
<ul class="mainMenu"> |
||||
<li class="icon_tm1"> |
||||
<a href="{% url 'projects:project-filter' %}">Биржа проектов</a> |
||||
<span></span> |
||||
</li> |
||||
<li class="icon_tm2"> |
||||
<a href="{% url 'users:contractor-list' %}">Поиск исполнителей</a> |
||||
<span></span> |
||||
</li> |
||||
<li class="icon_tm3"> |
||||
<a href="{% url 'users:contractor-list' %}">Работы на продажу</a> |
||||
<span></span> |
||||
</li> |
||||
</ul> |
||||
</div> |
||||
{% endif %} |
||||
{% if request.user.is_authenticated %} |
||||
<div class="col-lg-2"> |
||||
<div class="imgProfile"> |
||||
{% if request.user.is_contractor %} |
||||
<a href="{% url 'users:contractor-profile' pk=request.user.pk %}"> |
||||
{% thumbnail request.user.avatar "75x75" crop="center" as im %} |
||||
<img src="{{ im.url }}" alt="profile-image"> |
||||
{% endthumbnail %} |
||||
</a> |
||||
{% elif request.user.is_customer %} |
||||
<a href="{% url 'users:customer-profile-open-projects' pk=request.user.pk %}"> |
||||
{% thumbnail request.user.avatar "75x75" crop="center" as im %} |
||||
<img src="{{ im.url }}" alt="profile-image"> |
||||
{% endthumbnail %} |
||||
</a> |
||||
{% endif %} |
||||
</div> |
||||
<div class="infoProfile disTab"> |
||||
<div class="btn-group" role="group"> |
||||
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> |
||||
<span class="glyphicon glyphicon-menu-hamburger" aria-hidden="true"></span> |
||||
</button> |
||||
<ul class="dropdown-menu menu-drop-new"> |
||||
<li class="icon_mm1"> |
||||
<a href="{% url 'auth_login' %}"> |
||||
Войти заказчиком |
||||
<span></span> |
||||
</a> |
||||
</li> |
||||
<li class="icon_mm2"> |
||||
<a href="{% url 'auth_login' %}"> |
||||
Войти исполнителем |
||||
<span></span> |
||||
</a> |
||||
</li> |
||||
<li class="icon_mm3"> |
||||
<a href="#"> |
||||
Сообщения |
||||
<span></span> |
||||
</a> |
||||
</li> |
||||
<li class="icon_mm4"> |
||||
<a href="#"> |
||||
Счет |
||||
<span></span> |
||||
</a> |
||||
</li> |
||||
<li class="icon_mm5"> |
||||
<a href="#"> |
||||
Настройки |
||||
<span></span> |
||||
</a> |
||||
</li> |
||||
<li class="icon_mm6"> |
||||
<a href="#"> |
||||
FAQ |
||||
<span></span> |
||||
</a> |
||||
</li> |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
<ul class="mainMenu"> |
||||
<li class="icon_tm1"> |
||||
<a href="{% url 'projects:project-filter' %}">Биржа проектов</a> |
||||
<span></span> |
||||
</li> |
||||
<li class="icon_tm2"> |
||||
<a href="{% url 'users:contractor-filter' %}">Поиск исполнителей</a> |
||||
<span></span> |
||||
</li> |
||||
<li class="icon_tm3"> |
||||
<a href="#">Работы на продажу</a> |
||||
<span></span> |
||||
</li> |
||||
</ul> |
||||
</div> |
||||
{% endif %} |
||||
|
||||
{% if request.user.is_authenticated %} |
||||
<div class="col-lg-2"> |
||||
<div class="imgProfile"> |
||||
{% if request.user.is_contractor %} |
||||
<a href="{% url 'users:contractor-profile' pk=request.user.pk %}"> |
||||
{% thumbnail request.user.avatar "75x75" crop="center" as im %} |
||||
<img src="{{ im.url }}" alt="profile-image"> |
||||
{% endthumbnail %} |
||||
</a> |
||||
{% elif request.user.is_customer %} |
||||
<a href="{% url 'users:customer-profile-open-projects' pk=request.user.pk %}"> |
||||
{% thumbnail request.user.avatar "75x75" crop="center" as im %} |
||||
<img src="{{ im.url }}" alt="profile-image"> |
||||
{% endthumbnail %} |
||||
</a> |
||||
{% endif %} |
||||
</div> |
||||
|
||||
<div class="infoProfile disTab"> |
||||
<div class="btn-group" role="group"> |
||||
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> |
||||
<span class="glyphicon glyphicon-menu-hamburger" aria-hidden="true"></span> |
||||
</button> |
||||
<ul class="dropdown-menu menu-drop-new"> |
||||
<li class="icon_mm1"> |
||||
<a href="{% url 'auth_login' %}"> |
||||
Войти заказчиком |
||||
<span></span> |
||||
</a> |
||||
</li> |
||||
<li class="icon_mm2"> |
||||
<a href="{% url 'auth_login' %}"> |
||||
Войти исполнителем |
||||
<span></span> |
||||
</a> |
||||
</li> |
||||
<li class="icon_mm3"> |
||||
<a href="#"> |
||||
Сообщения |
||||
<span></span> |
||||
</a> |
||||
</li> |
||||
<li class="icon_mm4"> |
||||
<a href="#"> |
||||
Счет |
||||
<span></span> |
||||
</a> |
||||
</li> |
||||
<li class="icon_mm5"> |
||||
<a href="#"> |
||||
Настройки |
||||
<span></span> |
||||
</a> |
||||
</li> |
||||
<li class="icon_mm6"> |
||||
<a href="#"> |
||||
FAQ |
||||
<span></span> |
||||
</a> |
||||
</li> |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
|
||||
{% if request.user.is_contractor %} |
||||
<div class="rating"> |
||||
<div class="ratingInset"></div> |
||||
<div class="iconRating"></div> |
||||
</div> |
||||
<p class="ratingPer">45%</p> |
||||
<div class="rating"> |
||||
<div class="ratingInset"></div> |
||||
<div class="iconRating"></div> |
||||
</div> |
||||
<p class="ratingPer">45%</p> |
||||
{% endif %} |
||||
</div> |
||||
{% else %} |
||||
<div class="col-lg-2"> |
||||
<a href="{% url 'registration_register' %}" class="reg">Регистрация</a> |
||||
<div class="lock"></div> |
||||
</div> |
||||
{% endif %} |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
{% else %} |
||||
<div class="col-lg-2"> |
||||
<a href="{% url 'registration_register' %}" class="reg">Регистрация</a> |
||||
<div class="lock"></div> |
||||
</div> |
||||
{% endif %} |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
@ -1,21 +1,29 @@ |
||||
<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> |
||||
{% if is_paginated %} |
||||
<nav> |
||||
<ul class="pagination"> |
||||
{% if page_obj.has_previous %} |
||||
<li> |
||||
<button type="submit" name="page" value="{{ page_obj.previous_page_number }}">Previous</button> |
||||
</li> |
||||
{% endif %} |
||||
|
||||
{% for n in page_obj.paginator.page_range %} |
||||
{% if n == page_obj.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 page_obj.has_next %} |
||||
<li> |
||||
<button type="submit" name="page" value="{{ page_obj.next_page_number }}">Next</button> |
||||
</li> |
||||
{% endif %} |
||||
</ul> |
||||
</nav> |
||||
{% endif %} |
||||
|
||||
@ -0,0 +1,149 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.9.7 on 2016-07-21 15:08 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.conf import settings |
||||
from django.db import migrations, models |
||||
import django.db.models.deletion |
||||
import django.utils.timezone |
||||
import mptt.fields |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
initial = True |
||||
|
||||
dependencies = [ |
||||
('auth', '0007_alter_validators_add_error_messages'), |
||||
('common', '0001_initial'), |
||||
('specializations', '0001_initial'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.CreateModel( |
||||
name='User', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('password', models.CharField(max_length=128, verbose_name='password')), |
||||
('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), |
||||
('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), |
||||
('avatar', models.ImageField(blank=True, upload_to='users/avatars/')), |
||||
('contractor_status', models.CharField(choices=[('free', 'Свободен'), ('busy', 'Занят')], default='free', max_length=20)), |
||||
('created', models.DateTimeField(default=django.utils.timezone.now)), |
||||
('cro', models.BooleanField(default=False)), |
||||
('date_joined', models.DateTimeField(default=django.utils.timezone.now)), |
||||
('date_of_birth', models.DateTimeField(blank=True, null=True)), |
||||
('email', models.EmailField(db_index=True, max_length=255, unique=True)), |
||||
('first_name', models.CharField(blank=True, max_length=255)), |
||||
('gender', models.CharField(blank=True, choices=[('male', 'Мужской'), ('female', 'Женский')], max_length=30)), |
||||
('is_active', models.BooleanField(default=True)), |
||||
('last_name', models.CharField(blank=True, max_length=255)), |
||||
('last_time_visit', models.DateTimeField(default=django.utils.timezone.now)), |
||||
('patronym', models.CharField(blank=True, max_length=255)), |
||||
('phone', models.CharField(blank=True, max_length=30, null=True)), |
||||
('skype', models.CharField(blank=True, max_length=100)), |
||||
('username', models.CharField(max_length=50, unique=True)), |
||||
('website', models.CharField(blank=True, max_length=255)), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Пользователь', |
||||
'verbose_name_plural': 'Пользователи', |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='ContractorFinancialInfo', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('credit_card_number', models.CharField(max_length=50)), |
||||
('date_of_birth', models.DateTimeField()), |
||||
('fio', models.CharField(max_length=255)), |
||||
('inn', models.CharField(max_length=100)), |
||||
('legal_status', models.CharField(choices=[('individual', 'Физическое лицо'), ('legal_entity', 'ИП и юридическое лицо')], max_length=30)), |
||||
('passport_issue_date', models.DateTimeField()), |
||||
('passport_issued_by', models.CharField(max_length=255)), |
||||
('passport_number', models.CharField(max_length=10)), |
||||
('passport_scan', models.ImageField(upload_to='users/contractors/')), |
||||
('passport_series', models.CharField(max_length=6)), |
||||
('phone', models.CharField(max_length=30)), |
||||
('residency', models.CharField(choices=[('russian_resident', 'Резидент РФ'), ('non_russian_resident', 'Нерезидент РФ'), ('refugee', 'Беженец'), ('russian_stay_permit', 'Вид на жительство')], max_length=50)), |
||||
('subdivision_code', models.CharField(max_length=10)), |
||||
('yandex_money', models.CharField(max_length=50)), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Финансовая информация', |
||||
'verbose_name_plural': 'Финансовая информация', |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='ContractorResume', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('resume_file', models.FileField(upload_to='users/resume/files/')), |
||||
('text', models.TextField()), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Резюме', |
||||
'verbose_name_plural': 'Резюме', |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='ContractorResumeFiles', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('description', models.TextField(blank=True)), |
||||
('img', models.ImageField(upload_to='users/resume/images/')), |
||||
('title', models.CharField(max_length=255)), |
||||
('type', models.CharField(choices=[('diplom', 'Дипломы/Сертификаты'), ('cro', 'Допуск CPO')], max_length=50)), |
||||
('resume', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='resume_files', to='users.ContractorResume')), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Файлы резюме', |
||||
'verbose_name_plural': 'Файлы резюме', |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='Team', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('created', models.DateTimeField(default=django.utils.timezone.now)), |
||||
('name', models.CharField(max_length=255)), |
||||
('owner', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='team', to=settings.AUTH_USER_MODEL)), |
||||
('specializations', mptt.fields.TreeManyToManyField(blank=True, related_name='teams', to='specializations.Specialization')), |
||||
('users', models.ManyToManyField(blank=True, related_name='teams', to=settings.AUTH_USER_MODEL)), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Команда', |
||||
'verbose_name_plural': 'Команды', |
||||
}, |
||||
), |
||||
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'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='user', |
||||
name='contractor_resume', |
||||
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='contractor', to='users.ContractorResume'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='user', |
||||
name='contractor_specializations', |
||||
field=mptt.fields.TreeManyToManyField(blank=True, related_name='contractors', to='specializations.Specialization'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='user', |
||||
name='groups', |
||||
field=models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups'), |
||||
), |
||||
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='user_permissions', |
||||
field=models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions'), |
||||
), |
||||
] |
||||
@ -0,0 +1,446 @@ |
||||
{% 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">{% if display_msg %}{{ display_msg }}{% else %}Поиск исполнителей{% endif %}</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 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> |
||||
|
||||
<div class="polsF1 disTab"> |
||||
<div class="col-lg-3"> |
||||
{{ form.building_classification }} |
||||
</div> |
||||
|
||||
<div class="col-lg-3"> |
||||
{{ form.work_type }} |
||||
</div> |
||||
|
||||
<div class="col-lg-3"> |
||||
{{ form.construction_type }} |
||||
</div> |
||||
|
||||
<div class="col-lg-3"> |
||||
<label>{{ form.cro }}<span></span></label> |
||||
<p>Требуется допуск (СРО)</p> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
|
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
|
||||
<div class="buttonGP disTab"> |
||||
<div class="btn-group valProject valProject2" role="group" aria-label="..."> |
||||
{% for val, text in form.party_types.field.choices %} |
||||
<button |
||||
type="submit" |
||||
name="{{ form.party_types.html_name }}" |
||||
value="{{ val }}" |
||||
class="{% if val == last_party_types %}active{% endif %} btn btn-default"> |
||||
{{ text }} |
||||
</button> |
||||
{% endfor %} |
||||
</div> |
||||
|
||||
<input type="hidden" name="{{ form.last_party_types.html_name }}" value="{{ last_party_types }}"> |
||||
|
||||
<div class="polsF1 disTab polsSearch"> |
||||
<div class="col-lg-3"> |
||||
<select name="{{ form.order_by.html_name }}" onchange="$(this).closest('form').submit()" class="selectpicker"> |
||||
{% for val, text in form.order_by.field.choices %} |
||||
<option value="{{ val }}">{{ text }}</option> |
||||
{% endfor %} |
||||
</select> |
||||
</div> |
||||
|
||||
<input type="hidden" name="{{ form.last_order_by.html_name }}" value="{{ last_order_by }}"> |
||||
<input type="checkbox" name="{{ form.reverse_order.html_name }}" {% if reverse_order %}checked{% endif %} style="display: none"> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
|
||||
{% for obj in coll %} |
||||
{% if obj|class_name == 'Team' %} |
||||
{% with team=obj %} |
||||
<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="#">{{ team.name }}</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> |
||||
|
||||
|
||||
|
||||
{# {% if TEMPLATE_DEBUG %}#} |
||||
{# <div class="col-lg-12" style="margin-bottom: 20px">#} |
||||
{# <pre><!--#} |
||||
{# --><b>######## Team owner #########</b><br><!--#} |
||||
{# --><br><!--#} |
||||
{# --><b>Specializations:</b> {{ team.owner.contractor_specializations.all }}<br><!--#} |
||||
{# --><br><!--#} |
||||
{# --><b>Location:</b> {{ team.owner.location }}<br><!--#} |
||||
{# --><br><!--#} |
||||
{# --><b>Build. classif-s:</b> {% for o in team.owner.orders.all %}{{ o.project.realty.building_classification }}, {% endfor %}<br><!--#} |
||||
{# --><br><!--#} |
||||
{# --><b>Constr. types:</b> {% for o in team.owner.orders.all %}{{ o.project.realty.construction_type }}, {% endfor %}<br><!--#} |
||||
{# --><br><!--#} |
||||
{# --><b>CRO:</b> {{ team.owner.cro }}<br><!--#} |
||||
{# --><br><!--#} |
||||
{# --><b>Work types:</b> {% for o in team.owner.orders.all %}{{ o.project.work_type }}, {% endfor %}<br><!--#} |
||||
{# --><br><!--#} |
||||
{# --><br><!--#} |
||||
{# --><br><!--#} |
||||
{# --><b>######## Team users #########</b><br><!--#} |
||||
{# --><br><!--#} |
||||
{# --><b>Specializations:</b> {% for u in team.users.all %}{{ u.contractor_specializations.all }}, {% endfor %}<br><!--#} |
||||
{# --><br><!--#} |
||||
{# --><b>Location:</b> {% for u in team.users.all %}{{ u.location }}, {% endfor %}<br><!--#} |
||||
{# --><br><!--#} |
||||
{# --><b>Build. classif-s:</b> {% for u in team.users.all %}{% for o in u.orders.all %}{{ o.project.realty.building_classification }}, {% endfor %}; {% endfor %}<br><!--#} |
||||
{# --><br><!--#} |
||||
{# --><b>Constr. types:</b> {% for u in team.users.all %}{% for o in u.orders.all %}{{ o.project.realty.construction_type }}, {% endfor %}; {% endfor %}<br><!--#} |
||||
{# --><br><!--#} |
||||
{# --><b>CRO:</b> {% for u in team.users.all %}{{ u.cro }}, {% endfor %}<br><!--#} |
||||
{# --><br><!--#} |
||||
{# --><b>Work types:</b> {% for u in team.users.all %}{% for o in u.orders.all %}{{ o.project.work_type }}, {% endfor %}; {% endfor %}<br><!--#} |
||||
{# --></pre>#} |
||||
{# </div>#} |
||||
{# {% endif %}#} |
||||
|
||||
<div class="gallMini disTab"> |
||||
{% for portf in team.portfolios.all|slice:':4' %} |
||||
<div class="col-lg-3"> |
||||
<a href="#" class="linkInsetCol"> |
||||
<div class="insetCol box-sizing disTab"> |
||||
<div class="imgGal" style="background-image: url('{{ portf.photos.first.img.url }}')"> |
||||
<div class="imgFigure"></div> |
||||
</div> |
||||
</div> |
||||
</a> |
||||
</div> |
||||
{% endfor %} |
||||
</div> |
||||
</div> |
||||
{% endwith %} |
||||
{% elif obj|class_name == 'User' %} |
||||
{% with contractor=obj %} |
||||
<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="{% url 'users:contractor-profile' pk=obj.pk %}"> |
||||
смотреть профиль |
||||
</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> |
||||
|
||||
|
||||
{# {% if TEMPLATE_DEBUG %}#} |
||||
{# <div class="col-lg-12">#} |
||||
{# <pre><!--#} |
||||
{# --><b>Specializations:</b> {{ contractor.contractor_specializations.all }}<br><!--#} |
||||
{# --><br><!--#} |
||||
{# --><b>Location:</b> {{ contractor.location }}<br><!--#} |
||||
{# --><br><!--#} |
||||
{# --><b>Build. classif-s:</b> {% for o in contractor.orders.all %}{{ o.project.realty.building_classification }}, {% endfor %}<br><!--#} |
||||
{# --><br><!--#} |
||||
{# --><b>Constr. types:</b> {% for o in contractor.orders.all %}{{ o.project.realty.construction_type }}, {% endfor %}<br><!--#} |
||||
{# --><br><!--#} |
||||
{# --><b>CRO:</b> {{ contractor.cro }}<br><!--#} |
||||
{# --><br><!--#} |
||||
{# --><b>Work types:</b> {% for o in contractor.orders.all %}{{ o.project.work_type }}, {% endfor %}<br><!--#} |
||||
{# --></pre>#} |
||||
{# </div>#} |
||||
{# {% endif %}#} |
||||
|
||||
<div class="gallMini disTab"> |
||||
{% for portf in contractor.portfolios.all|slice:':4' %} |
||||
<div class="col-lg-3"> |
||||
<a href="#" class="linkInsetCol"> |
||||
<div class="insetCol box-sizing disTab"> |
||||
<div class="imgGal" style="background-image: url('{{ portf.photos.first.img.url }}')"> |
||||
<div class="imgFigure"></div> |
||||
</div> |
||||
</div> |
||||
</a> |
||||
</div> |
||||
{% endfor %} |
||||
</div> |
||||
</div> |
||||
{% endwith %} |
||||
{% endif %} |
||||
{% 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 %} |
||||
@ -0,0 +1,69 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.9.7 on 2016-07-21 15:08 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.conf import settings |
||||
from django.db import migrations, models |
||||
import django.db.models.deletion |
||||
import django.utils.timezone |
||||
import mptt.fields |
||||
import sorl.thumbnail.fields |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
initial = True |
||||
|
||||
dependencies = [ |
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL), |
||||
('common', '0001_initial'), |
||||
('projects', '0001_initial'), |
||||
('specializations', '0001_initial'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.CreateModel( |
||||
name='Picture', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('file', models.ImageField(upload_to='worksell/pictures')), |
||||
('slug', models.SlugField(blank=True)), |
||||
], |
||||
), |
||||
migrations.CreateModel( |
||||
name='WorkSell', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('budget', models.DecimalField(blank=True, decimal_places=0, default=0, max_digits=10, null=True)), |
||||
('created', models.DateTimeField(blank=True, default=django.utils.timezone.now, null=True)), |
||||
('currency', models.CharField(blank=True, choices=[('rur', 'RUR'), ('usd', 'USD'), ('eur', 'EUR')], default='rur', max_length=20, null=True)), |
||||
('description', models.TextField(blank=True)), |
||||
('img', sorl.thumbnail.fields.ImageField(blank=True, null=True, upload_to='worksell/worksell')), |
||||
('name', models.CharField(max_length=255)), |
||||
('term', models.IntegerField(blank=True, default=0, null=True)), |
||||
('term_type', models.CharField(blank=True, choices=[('project', 'За проект'), ('hour', 'За час'), ('day', 'За день'), ('month', 'За месяц')], default='hour', max_length=20, null=True)), |
||||
('building_classification', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='worksells', to='projects.BuildingClassfication')), |
||||
('construction_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='worksells', to='projects.ConstructionType')), |
||||
('contractor', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='work_sell', to=settings.AUTH_USER_MODEL)), |
||||
('location', mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='worksells', to='common.Location')), |
||||
('specialization', mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='worksells', to='specializations.Specialization')), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Готовая работа', |
||||
'ordering': ['-created'], |
||||
'verbose_name_plural': 'Готовые работы', |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='WorkSellPhoto', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('img', sorl.thumbnail.fields.ImageField(upload_to='worksell/worksell')), |
||||
('worksell', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='photos', to='work_sell.WorkSell')), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Изображение Готовая работа', |
||||
'verbose_name_plural': 'Изображения Готовые работы', |
||||
}, |
||||
), |
||||
] |
||||
Loading…
Reference in new issue