diff --git a/archilance/settings/base.py b/archilance/settings/base.py index a812022..376ea03 100644 --- a/archilance/settings/base.py +++ b/archilance/settings/base.py @@ -25,6 +25,7 @@ DJANGO_APPS = [ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + 'django.contrib.humanize', ] THIRD_PARTY_APPS = [ diff --git a/data.xlsx b/data.xlsx new file mode 100644 index 0000000..13dce20 Binary files /dev/null and b/data.xlsx differ diff --git a/projects/forms.py b/projects/forms.py index 4117525..f614e95 100644 --- a/projects/forms.py +++ b/projects/forms.py @@ -1,5 +1,5 @@ from django import forms -from django.forms import ModelForm, HiddenInput, Form +from django.forms import ModelForm, HiddenInput, Form, Select from django.forms.models import inlineformset_factory from .models import Project, Portfolio, Answer, Realty, PortfolioPhoto @@ -60,6 +60,8 @@ class AnswerForm(ModelForm): ) widgets = { 'project': HiddenInput(), + 'cost_type': Select(attrs={'class':'selectpicker'}), + 'term_type': Select(attrs={'class':'selectpicker'}), } from django.forms.models import inlineformset_factory diff --git a/projects/migrations/0013_auto_20160602_1203.py b/projects/migrations/0013_auto_20160602_1203.py new file mode 100644 index 0000000..538672d --- /dev/null +++ b/projects/migrations/0013_auto_20160602_1203.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.6 on 2016-06-02 12:03 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('projects', '0012_auto_20160530_1355'), + ] + + operations = [ + migrations.AlterField( + model_name='answer', + name='term', + field=models.IntegerField(default=0), + ), + ] diff --git a/projects/migrations/0014_auto_20160602_1559.py b/projects/migrations/0014_auto_20160602_1559.py new file mode 100644 index 0000000..40f79c9 --- /dev/null +++ b/projects/migrations/0014_auto_20160602_1559.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.6 on 2016-06-02 15:59 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('projects', '0013_auto_20160602_1203'), + ] + + operations = [ + migrations.AlterModelOptions( + name='answer', + options={'ordering': ('-created',), 'verbose_name': 'Ответ к проекту', 'verbose_name_plural': 'Ответы к проектам'}, + ), + migrations.AlterField( + model_name='order', + name='cost', + field=models.DecimalField(decimal_places=0, max_digits=10), + ), + migrations.AlterField( + model_name='project', + name='price', + field=models.DecimalField(decimal_places=0, max_digits=10), + ), + ] diff --git a/projects/migrations/0015_auto_20160602_1606.py b/projects/migrations/0015_auto_20160602_1606.py new file mode 100644 index 0000000..e4caee6 --- /dev/null +++ b/projects/migrations/0015_auto_20160602_1606.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.6 on 2016-06-02 16:06 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('projects', '0014_auto_20160602_1559'), + ] + + operations = [ + migrations.AlterField( + model_name='answer', + name='cost', + field=models.DecimalField(decimal_places=0, max_digits=10), + ), + ] diff --git a/projects/models.py b/projects/models.py index 6d23272..5b2ca32 100644 --- a/projects/models.py +++ b/projects/models.py @@ -35,7 +35,7 @@ class Project(models.Model): ) name = models.CharField(max_length=255) - price = models.DecimalField(max_digits=10, decimal_places=2) + price = models.DecimalField(max_digits=10, decimal_places=0) specialization = models.ForeignKey(Specialization, related_name='projects') text = models.TextField(blank=True) user = models.ForeignKey(User, related_name='projects') @@ -58,7 +58,7 @@ class Project(models.Model): class Order(models.Model): project = models.OneToOneField(Project, related_name='order') contractor = models.ForeignKey(User) - cost = models.DecimalField(max_digits=10, decimal_places=2) + cost = models.DecimalField(max_digits=10, decimal_places=0) term = models.IntegerField(default=1) created = models.DateTimeField(default=timezone.now, editable=False) status = models.BooleanField(default=False) @@ -84,10 +84,10 @@ class Answer(models.Model): ('month', 'month'), ) - cost = models.DecimalField(max_digits=10, decimal_places=2) + cost = models.DecimalField(max_digits=10, decimal_places=0) cost_type = models.CharField(max_length=5, choices=COST_TYPE_CHOICES, default='rur') text = models.TextField() - term = models.DecimalField(max_digits=10, decimal_places=2) + term = models.IntegerField(default=0) term_type = models.CharField(max_length=10, choices=TERM_TYPE_CHOICES, default='hour') project = models.ForeignKey(Project, related_name='answers') user = models.ForeignKey(User, related_name='answers') @@ -99,6 +99,7 @@ class Answer(models.Model): class Meta: verbose_name = 'Ответ к проекту' verbose_name_plural = 'Ответы к проектам' + ordering = ('-created',) class Candidate(models.Model): diff --git a/projects/templates/projects/project_detail.html b/projects/templates/projects/project_detail.html index 503381d..5bce86c 100644 --- a/projects/templates/projects/project_detail.html +++ b/projects/templates/projects/project_detail.html @@ -1,13 +1,15 @@ {% extends "base.html" %} {% block content %} + {% load humanize %} + {% load l10n %}

{{ object }}

-

{{ object.price }}

+

{{ object.price | intcomma }}

@@ -15,15 +17,16 @@ execitor-image
+

- {{ object.user.get_full_name }}[ivanov_petr] + {{ object.user.get_full_name }}[ivanov_petr]

- +
+ {% if object.secure_transaction %}
-

Есть допуск СРО

+ +

Есть допуск СРО

+
+ {% endif %}
@@ -66,22 +70,19 @@
  • - Местоположение: Россия, Москва + Местоположение: {{ object.realty.country }},{{ object.realty.city }}
  • - Классификация здания: Коттедж + Классификация здания: {{ object.realty.building_classification }}
  • - Вид строительства: Новое + Вид строительства: {{ object.realty.type_construction }}

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida - dolor sit amet lacus accumsan et viverra justo commodo. Proin sodales pulvinar tempor. Cum sociis natoque - penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam fermentum, nulla luctus pharetra - vulputate, felis tellus mollis orci, sed rhoncus sapien nunc eget odio. + {{ object.text }}

@@ -100,28 +101,95 @@
{% if perms.projects.add_answer %} - -

Оставить ответ

-
+ {{ form.errors }} {% csrf_token %} - {% for field in form %} -
-

{{ field.label }}

- {{ field }} -
+
+ +
+
+

{{ form.cost.label }}

+ + +
+
+
+
+

{{ form.cost_type.label }}

+ {{ form.cost_type }} +
+
+ +
+
+
+
+
+

{{ form.term.label }}

+ +
+
+ +
+
+

{{ form.term_type.label }}

+ {{ form.term_type }} +
+
+ +
+
+
+
+
+

{{ form.text.label }}

+ {{ form.project }} +
+
+
+
+
+
+
- {% endfor %} -
{% endif %}
+ + {% if not perms.projects.add_answer %} +
+
+

Исполнители

+
+
+
+ + + +
+
+
+
+
+

Сравнить кандидатов

+
+
+ {% endif %} +
-
+ {% for answer in object.answers.all %} + +
@@ -129,17 +197,17 @@

- Иванов Петр Иванович [ivanov_petr] + {{ answer.user.get_full_name }}

- +
    -
  • Рейтинг: 1245
  • -
  • Безопасные сделки: 5
  • +
  • Рейтинг: 0
  • +
  • Безопасные сделки: 0
  • Отзывы: - + 385 + + 0 0 - 0 @@ -151,14 +219,13 @@
-

Цена: - 35 000 +

Цена: {{ answer.cost| intcomma }}

- Срок: 3 недели + Срок: {{ answer.term }} {{ answer.term_type }}

-

Опубликован: 22.04.2016

+

Опубликован: {{ answer.created }}

-
+ {% endfor %} +
diff --git a/test.py b/test.py new file mode 100644 index 0000000..d3f7e44 --- /dev/null +++ b/test.py @@ -0,0 +1,5 @@ +import xlrd +rb = xlrd.open_workbook('data.xlsx') +sheet = rb.sheet_by_index(0) +for rx in range(sheet.nrows): + print(sheet.row(rx)) diff --git a/users/migrations/0009_auto_20160602_1213.py b/users/migrations/0009_auto_20160602_1213.py new file mode 100644 index 0000000..d614b22 --- /dev/null +++ b/users/migrations/0009_auto_20160602_1213.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.6 on 2016-06-02 12:13 +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 = [ + ('users', '0008_auto_20160525_1527'), + ] + + operations = [ + migrations.AddField( + model_name='user', + name='nickname', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='team', + name='owner', + field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='team', to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/users/models.py b/users/models.py index a3e4908..f6fe5ea 100644 --- a/users/models.py +++ b/users/models.py @@ -32,6 +32,7 @@ class CustomerUserManager(models.Manager): 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) email = models.EmailField(max_length=255, unique=True, db_index=True) diff --git a/users/templates/users/contractor.html b/users/templates/users/contractor.html index efad0e5..166f23b 100644 --- a/users/templates/users/contractor.html +++ b/users/templates/users/contractor.html @@ -2,6 +2,7 @@ {% block content %} +

{{ object }}

{{ user }}

{{ user.groups.all }}

diff --git a/users/urls.py b/users/urls.py index 43ef580..21be00a 100755 --- a/users/urls.py +++ b/users/urls.py @@ -1,13 +1,16 @@ from django.conf import urls from django.contrib.auth.views import login, logout -from .views import UserListView, UserDetailView, UserInfoListView, UserView +from .views import UserListView, UserDetailView, UserInfoListView, CustomerView, UserView, ContractorDetailView + +app_name = 'users' urlpatterns = [ urls.url(r'^profile/$', UserDetailView.as_view(), name='user-detail'), # urls.url(r'^login/?$', login, {'template_name': 'users/login.html'}), # urls.url(r'^logout/?$', logout), urls.url(r'^$', UserListView.as_view(), name='users_list'), urls.url(r'^info$', UserInfoListView.as_view(), name='users_info_list'), - urls.url(r'^contractor/(?P\d+)$$', UserView.as_view(), name='user_view'), + urls.url(r'^contractor/(?P\d+)$$', ContractorDetailView.as_view(), name='contactor_view'), + urls.url(r'^customer/(?P\d+)$$', CustomerView.as_view(), name='customer_view'), urls.url(r'^(?P\d+)$', UserView.as_view(), name='user_view'), ] diff --git a/users/views.py b/users/views.py index da84eff..0430440 100644 --- a/users/views.py +++ b/users/views.py @@ -27,29 +27,41 @@ class UserDetailView(DetailView): class UserView(View): - template_name = 'users/contractor.html' + pass + # template_name = 'users/contractor.html' + # + # def get(self, request, pk): + # user = User.objects.get(pk=pk) + # user_group = user.groups.all().first() + # if 'Заказчики' in user_group.name: + # self.template_name = 'users/customer.html' + # + # return render(request, self.template_name, {'user': user}) + # # import code; code.interact(local=dict(globals(), **locals())) - def get(self, request, pk): - user = User.objects.get(pk=pk) - user_group = user.groups.all().first() - if 'Заказчики' in user_group.name: - self.template_name = 'users/customer.html' - return render(request, self.template_name, {'user': user}) - # import code; code.interact(local=dict(globals(), **locals())) +class UserUpdateView(UpdateView): + model = User +from django.http import Http404 +from django.shortcuts import redirect -class UserUpdateView(UpdateView): +class ContractorDetailView(DetailView): model = User + template_name = 'users/contractor.html' -# class ContractorDetailView(DetailView): -# model = User -# template_name = 'users/contractor.html' -# -# def get_queryset(self): -# qs = super().get_queryset() -# return User.contractor_objects.get(self.pk) + def get_object(self, queryset=None): + object = super().get_object() + user_group = object.groups.all().first() + if 'Исполнители' not in user_group.name: + return redirect('/projects/') + return object + + +class CustomerView(View): + template_name = 'users/customer.html' + + def get(self, request, *args, **kwargs): + return render(request, self.template_name) -class CustomerDetailView(DetailView): - model = User diff --git a/worksell/migrations/0001_initial.py b/worksell/migrations/0001_initial.py new file mode 100644 index 0000000..44b56cc --- /dev/null +++ b/worksell/migrations/0001_initial.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.6 on 2016-06-02 12:03 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='WorkSell', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255)), + ('description', models.TextField(blank=True)), + ('img', models.ImageField(upload_to='worksell/worksell')), + ], + ), + ]