remotes/origin/setup
ArturBaybulatov 10 years ago
parent d384391782
commit 60c05d0310
  1. 2
      archilance/management/commands/generate_reviews.py
  2. 1
      archilance/management/commands/generate_users.py
  3. 6
      archilance/util.py
  4. 26
      projects/migrations/0004_auto_20160726_1931.py
  5. 7
      templates/home.html
  6. 12
      templates/partials/base.html
  7. 4
      users/admin.py
  8. 6
      users/forms.py
  9. 29
      users/migrations/0003_auto_20160726_1931.py
  10. 1
      users/mixins.py
  11. 4
      users/models.py
  12. 7
      users/templates/contractor_profile.html
  13. 26
      users/templates/contractor_profile_edit.html
  14. 207
      users/templates/customer_profile_edit.html
  15. 4
      users/templates/partials/customer_profile_info_block.html
  16. 4
      users/urls.py
  17. 96
      users/views.py

@ -23,7 +23,7 @@ class Command(BaseCommand):
review.project = Project.objects.order_by('?').first() review.project = Project.objects.order_by('?').first()
review.stars = _.random(1, 5) review.stars = _.random(1, 5)
review.text = util.lorem(_.random(5, 15)) review.text = util.lorem()
review.is_secured = _.sample((True, False)) review.is_secured = _.sample((True, False))
review.save() review.save()

@ -81,6 +81,7 @@ class Command(BaseCommand):
return User.objects.create( return User.objects.create(
first_name='Василий', first_name='Василий',
last_name='Пупкин', last_name='Пупкин',
patronym='Иванович',
username=username, username=username,
email='%s@example.com' % username, email='%s@example.com' % username,
is_active=True, is_active=True,

@ -1,6 +1,7 @@
from django.shortcuts import _get_queryset from django.shortcuts import _get_queryset
from django.utils import timezone from django.utils import timezone
from pprint import pprint, pformat from pprint import pprint, pformat
import natsort
import pydash as _; _.map = _.map_; _.filter = _.filter_ import pydash as _; _.map = _.map_; _.filter = _.filter_
import random import random
@ -59,13 +60,14 @@ def get_attr_or_none(klass, *args, attr=None, **kwargs):
def model_fields(model, width=200): def model_fields(model, width=200):
fields = natsort.natsorted(model._meta.get_fields(), key=lambda f: f.name)
pprint([( pprint([(
f.name, f.name,
'Relation? %s' % f.is_relation, 'Relation? %s' % f.is_relation,
'Null? %s' % f.null, 'Null? %s' % f.null,
'Blank? %s' % f.blank if not f.is_relation else '(relation)', 'Blank? %s' % f.blank if not f.is_relation else '(relation)',
'Hidden? %s' % (f.is_hidden() if hasattr(f, 'is_hidden') else False), ) for f in fields], width=width)
) for f in model._meta.get_fields(include_hidden=True)], width=width)
def lorem(sentences=5): def lorem(sentences=5):

@ -0,0 +1,26 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-07-26 16:31
from __future__ import unicode_literals
import datetime
from django.db import migrations, models
from django.utils.timezone import utc
class Migration(migrations.Migration):
dependencies = [
('projects', '0003_auto_20160725_1606'),
]
operations = [
migrations.AlterModelOptions(
name='stage',
options={'ordering': ['pos'], 'verbose_name': 'Этап', 'verbose_name_plural': 'Этапы'},
),
migrations.AlterField(
model_name='stage',
name='created',
field=models.DateTimeField(default=datetime.datetime(2016, 7, 26, 16, 31, 5, 738741, tzinfo=utc)),
),
]

@ -6,14 +6,7 @@
{% include 'partials/header.html' %} {% include 'partials/header.html' %}
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
{# {% url "password_reset_recover" %}#}
<p class="welcomeMain">Основная задача сайта</p> <p class="welcomeMain">Основная задача сайта</p>
<p style="font-size: 25px; line-height: initial; font-weight: bold">
Authed? {{ request.user.is_authenticated }}<br>
{{ request.user }} ({{ request.user.pk }})<br>
{{ request.user.groups.all }}<br>
</p>
</div> </div>
</div> </div>

@ -31,10 +31,19 @@
<body> <body>
{% if messages %} {% if messages %}
{% for message in messages %} {% for message in messages %}
<div class="c" style='padding: 10px; margin-bottom: 6px'>{{ message | safe }}</div> <div class="c" style="position: relative; padding: 10px; margin-bottom: 6px; z-index: 100">{{ message|safe }}</div>
{% endfor %} {% endfor %}
{% endif %} {% endif %}
<div style="position: absolute; left: 0; top: 0; padding: 6px; color: black; background-color: #BADA55; z-index: 50">
{{ request.user }}<br>
{% if request.user.is_authenticated %}
<b>PK:</b> {{ request.user.pk }}<br>
<b>Groups:</b> {{ request.user.groups.all }}
{% endif %}
</div>
{% block content %}{% endblock %} {% block content %}{% endblock %}
<script src='{% static "lib/lodash/lodash.js" %}'></script> <script src='{% static "lib/lodash/lodash.js" %}'></script>
@ -50,6 +59,7 @@
<script src='{% static "lib/jquery.fileupload/js/jquery.iframe-transport.js" %}'></script> <script src='{% static "lib/jquery.fileupload/js/jquery.iframe-transport.js" %}'></script>
<script src='{% static "lib/jquery.fileupload/js/jquery.fileupload.js" %}'></script> <script src='{% static "lib/jquery.fileupload/js/jquery.fileupload.js" %}'></script>
<script src='{% static "lib/jquery.fileupload/js/jquery.fileupload-process.js" %}'></script> <script src='{% static "lib/jquery.fileupload/js/jquery.fileupload-process.js" %}'></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-jgrowl/1.4.1/jquery.jgrowl.min.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/jquery-jgrowl/1.4.1/jquery.jgrowl.min.js"></script>

@ -1,6 +1,6 @@
from django.contrib import admin from django.contrib import admin
from .models import User, Team, ContractorFinancialInfo, ContractorResume, ContractorResumeFiles from .models import User, Team, UserFinancialInfo, ContractorResume, ContractorResumeFiles
class UserAdmin(admin.ModelAdmin): class UserAdmin(admin.ModelAdmin):
@ -11,7 +11,7 @@ class UserAdmin(admin.ModelAdmin):
return ', '.join(g.name for g in obj.groups.all()) return ', '.join(g.name for g in obj.groups.all())
admin.site.register(User, UserAdmin) admin.site.register(User, UserAdmin)
admin.site.register(ContractorFinancialInfo) admin.site.register(UserFinancialInfo)
admin.site.register(Team) admin.site.register(Team)
admin.site.register(ContractorResume) admin.site.register(ContractorResume)
admin.site.register(ContractorResumeFiles) admin.site.register(ContractorResumeFiles)

@ -3,7 +3,7 @@ from django.forms import ModelForm
import itertools import itertools
import pydash as _; _.map = _.map_; _.filter = _.filter_ import pydash as _; _.map = _.map_; _.filter = _.filter_
from .models import User, ContractorFinancialInfo from .models import User, UserFinancialInfo
from common.models import Location from common.models import Location
from projects.models import Project, Realty, BuildingClassfication, ConstructionType from projects.models import Project, Realty, BuildingClassfication, ConstructionType
from specializations.models import Specialization from specializations.models import Specialization
@ -131,7 +131,7 @@ class CustomerProfileProjectRealtyForm(forms.Form):
) )
class ContractorFinancicalInfoForm(ModelForm): class UserFinancicalInfoForm(ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.fields['residency'].choices = self.fields['residency'].choices[1:] self.fields['residency'].choices = self.fields['residency'].choices[1:]
@ -141,7 +141,7 @@ class ContractorFinancicalInfoForm(ModelForm):
# self.fields['residency'].widget.choices = self.fields['residency'].choices # self.fields['residency'].widget.choices = self.fields['residency'].choices
class Meta: class Meta:
model = ContractorFinancialInfo model = UserFinancialInfo
fields = ( fields = (
'fio', 'fio',

@ -0,0 +1,29 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-07-26 16:31
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('users', '0002_auto_20160725_1605'),
]
operations = [
migrations.RenameModel(
old_name='ContractorFinancialInfo',
new_name='UserFinancialInfo',
),
migrations.RemoveField(
model_name='user',
name='contractor_financial_info',
),
migrations.AddField(
model_name='user',
name='financial_info',
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='user', to='users.UserFinancialInfo'),
),
]

@ -3,7 +3,6 @@ from django.contrib import messages
class CheckForUserMixin(object): class CheckForUserMixin(object):
def dispatch(self, request, *args, **kwargs): def dispatch(self, request, *args, **kwargs):
if request.user.is_authenticated(): if request.user.is_authenticated():
pk = kwargs.get('pk') pk = kwargs.get('pk')

@ -41,7 +41,7 @@ class CustomerUserManager(models.Manager):
return super().get_queryset().filter(groups__name='Заказчики') return super().get_queryset().filter(groups__name='Заказчики')
class ContractorFinancialInfo(models.Model): class UserFinancialInfo(models.Model):
RESIDENCIES = ( RESIDENCIES = (
('russian_resident', 'Резидент РФ'), ('russian_resident', 'Резидент РФ'),
('non_russian_resident', 'Нерезидент РФ'), ('non_russian_resident', 'Нерезидент РФ'),
@ -117,7 +117,6 @@ class User(AbstractBaseUser, PermissionsMixin):
) )
avatar = models.ImageField(upload_to='users/avatars/', blank=True) avatar = models.ImageField(upload_to='users/avatars/', blank=True)
contractor_financial_info = models.OneToOneField(ContractorFinancialInfo, related_name='contractor', blank=True, null=True)
contractor_resume = models.OneToOneField(ContractorResume, related_name='contractor', blank=True, null=True) contractor_resume = models.OneToOneField(ContractorResume, related_name='contractor', blank=True, null=True)
contractor_specializations = TreeManyToManyField(Specialization, related_name='contractors', blank=True) contractor_specializations = TreeManyToManyField(Specialization, related_name='contractors', blank=True)
contractor_status = models.CharField(default='free', max_length=20, choices=STATUSES) contractor_status = models.CharField(default='free', max_length=20, choices=STATUSES)
@ -126,6 +125,7 @@ class User(AbstractBaseUser, PermissionsMixin):
date_joined = models.DateTimeField(default=timezone.now) date_joined = models.DateTimeField(default=timezone.now)
date_of_birth = models.DateTimeField(null=True, blank=True) date_of_birth = models.DateTimeField(null=True, blank=True)
email = models.EmailField(max_length=255, unique=True, db_index=True) email = models.EmailField(max_length=255, unique=True, db_index=True)
financial_info = models.OneToOneField(UserFinancialInfo, related_name='user', blank=True, null=True)
first_name = models.CharField(max_length=255, blank=True) first_name = models.CharField(max_length=255, blank=True)
gender = models.CharField(max_length=30, choices=GENDERS, blank=True) gender = models.CharField(max_length=30, choices=GENDERS, blank=True)
is_active = models.BooleanField(default=True) is_active = models.BooleanField(default=True)

@ -1,6 +1,7 @@
{% extends 'partials/base.html' %} {% extends 'partials/base.html' %}
{% load staticfiles %} {% load projects_tags %}
{% load specializtions_tags %}
{% load thumbnail %} {% load thumbnail %}
@ -70,7 +71,7 @@
<div class="col-lg-9 divCol9"> <div class="col-lg-9 divCol9">
<div class="col-lg-4"> <div class="col-lg-4">
<p class="nameUser"> <p class="nameUser">
{{ contractor.get_full_name }}[{{ contractor.username }}] {{ contractor.get_full_name }} [{{ contractor.username }}]
</p> </p>
<p class="cityUser">Россия, Москва</p> <p class="cityUser">Россия, Москва</p>
<p class="navv">На сайте 8 лет и 3 месяца</p> <p class="navv">На сайте 8 лет и 3 месяца</p>
@ -80,11 +81,9 @@
<a href="javascript:void(0)" class="showCon">показать контакты</a> <a href="javascript:void(0)" class="showCon">показать контакты</a>
</div> </div>
<div class="col-lg-4"> <div class="col-lg-4">
{% load specializtions_tags %}
{% specialization_widget contractor.pk %} {% specialization_widget contractor.pk %}
</div> </div>
<div class="col-lg-4"> <div class="col-lg-4">
{% load projects_tags %}
{% ratings_widget contractor.pk %} {% ratings_widget contractor.pk %}
{% if contractor.cro %} {% if contractor.cro %}

@ -15,19 +15,19 @@
{% load mptt_tags %} {% load mptt_tags %}
{{ form.errors }} {{ form.errors }}
<div class="col-lg-3 divCol3"> <div class="col-lg-3 divCol3">
<div class="avatar"> <div class="avatar">
<div class="avatarInset"> <div class="avatarInset">
<img src="/media/{{ form.avatar.value }}" alt="profile-image"> <img src="/media/{{ form.avatar.value }}" alt="profile-image">
</div> </div>
</div> </div>
<div class="menuUser upload-img disTab"> <div class="menuUser upload-img disTab">
<div class="upload2 up-l1"> <div class="upload2 up-l1">
<input type="file" name="{{ form.avatar.name }}"> <input type="file" name="{{ form.avatar.name }}">
<p>Загрузить фотографию</p> <p>Загрузить фотографию</p>
</div> </div>
</div> </div>
</div> </div>
<div class="col-lg-9 divCol9"> <div class="col-lg-9 divCol9">
<div class="col-lg-4"> <div class="col-lg-4">
<p class="name-edit-p">ФИО:</p> <p class="name-edit-p">ФИО:</p>

@ -1,113 +1,126 @@
{% extends 'partials/base.html' %} {% extends 'partials/base.html' %}
{% load staticfiles %}
{% load thumbnail %} {% load thumbnail %}
{% block content %} {% block content %}
{% include 'partials/header.html' %} {% include 'partials/header.html' %}
<div class="container mainScore"> <div class="container mainScore">
<div class="row"> <div class="row">
<form method="post" enctype="multipart/form-data">{% csrf_token %} <form method="post" enctype="multipart/form-data">
<div class="projectsBlock disTab"> {% csrf_token %}
<div class="col-lg-12">
{{ form.errors }} <div class="projectsBlock disTab">
<div class="col-lg-3 divCol3"> <div class="col-lg-12">
<div class="avatar"> {{ form.errors }}
<div class="avatarInset">
<img src="/media/{{ form.avatar.value }}" alt="profile-image"> <div class="col-lg-3 divCol3">
</div> <div class="avatar">
</div> <div class="avatarInset">
<div class="menuUser upload-img disTab"> <img src="/media/{{ form.avatar.value }}" alt="profile-image">
<div class="upload2 up-l1"> </div>
<input type="file" name="{{ form.avatar.name }}"> </div>
<p>Загрузить фотографию</p> <div class="menuUser upload-img disTab">
</div> <div class="upload2 up-l1">
</div> <input type="file" name="{{ form.avatar.name }}">
</div> <p>Загрузить фотографию</p>
<div class="col-lg-9 divCol9"> </div>
<div class="col-lg-4"> </div>
<p class="name-edit-p">ФИО:</p> </div>
<input type="text" value="{{ form.first_name.value }}" name="{{ form.first_name.name }}" class="box-sizing inp-edit"> <div class="col-lg-9 divCol9">
<input type="text" value="{{ form.last_name.value }}" name="{{ form.last_name.name }}" class="box-sizing inp-edit"> <div class="col-lg-4">
<input type="text" value="{{ form.patronym.value }}" name="{{ form.patronym.name }}" class="box-sizing inp-edit"> <p class="name-edit-p">ФИО:</p>
</div> <input type="text" value="{{ form.first_name.value }}" name="{{ form.first_name.name }}" class="box-sizing inp-edit">
<div class="col-lg-4"> <input type="text" value="{{ form.last_name.value }}" name="{{ form.last_name.name }}" class="box-sizing inp-edit">
<p class="name-edit-p">Местоположение: {{ form.location.value }}</p> <input type="text" value="{{ form.patronym.value }}" name="{{ form.patronym.name }}" class="box-sizing inp-edit">
<div class="polsF1 pols-edit disTab"> </div>
<select id="location-country"> <div class="col-lg-4">
</select> <p class="name-edit-p">Местоположение: {{ form.location.value }}</p>
<div class="polsF1 pols-edit disTab">
<select id="location-region"> <select id="location-country">
</select> </select>
<select id="location-city" name="{{ form.location.name }}"> <select id="location-region">
</select> </select>
</div>
</div> <select id="location-city" name="{{ form.location.name }}">
</div> </select>
</div> </div>
</div> </div>
<div class="buttonGP btn-edit disTab"> </div>
<div class="btn-group valProject valProject2" role="group" aria-label="..."> </div>
<button type="button" class="btn btn-default">Общая информация</button> </div>
</div>
</div> <div class="buttonGP btn-edit disTab">
<div class="col-lg-12 col12 new-filter"> <div class="btn-group valProject valProject2" role="group" aria-label="...">
<div class="filter clearfix"> <button type="button" class="btn btn-default">Общая информация</button>
<div class="titleF1 disTab"> </div>
<div class="col-lg-7">Дата рождения:</div> </div>
<div class="col-lg-5">Пол:</div>
</div> <div class="col-lg-12 col12 new-filter">
<div class="polsF1 disTab"> <div class="filter clearfix">
<div class="col-lg-7"> <div class="titleF1 disTab">
{{ form.date_of_birth }} <div class="col-lg-7">Дата рождения:</div>
</div> <div class="col-lg-5">Пол:</div>
<div class="col-lg-5 dog-new ed-new"> </div>
<label><input type="radio" name="{{ form.gender }}"><span></span></label>
<p>Мужской</p> <div class="polsF1 disTab">
<label class="woman"><input type="radio" name="{{ form.gender }}"><span></span></label> <div class="col-lg-7">
<p>Женский</p> {{ form.date_of_birth }}
</div> </div>
</div> <div class="col-lg-5 dog-new ed-new">
<div class="titleF1 titleF2 disTab"> <label><input type="radio" name="{{ form.gender }}"><span></span></label>
<div class="col-lg-3">Сайт:</div> <p>Мужской</p>
<div class="col-lg-3">Skype:</div> <label class="woman"><input type="radio" name="{{ form.gender }}"><span></span></label>
{# <div class="col-lg-3">Электронная почта:</div>#} <p>Женский</p>
<div class="col-lg-3">Телефон:</div> </div>
</div> </div>
<div class="searchF1 polsF1 polsFF polsF3">
<div class="col-lg-3"> <div class="titleF1 titleF2 disTab">
<input type="text" name="{{ form.website.name }}"class="box-sizing surr surr2" placeholder="beeg.com"> <div class="col-lg-3">Сайт:</div>
</div> <div class="col-lg-3">Skype:</div>
<div class="col-lg-3"> {# <div class="col-lg-3">Электронная почта:</div>#}
<input type="text" name="{{ form.skype.name }}" class="box-sizing surr surr2" placeholder="nokia770"> <div class="col-lg-3">Телефон:</div>
</div> </div>
{# <div class="col-lg-3">#}
{# <input type="text" name="{{ form.phone.name }}" class="box-sizing surr surr2" placeholder="example@gmail.com">#} <div class="searchF1 polsF1 polsFF polsF3">
{# </div>#} <div class="col-lg-3">
<div class="col-lg-3"> <input type="text" name="{{ form.website.name }}"class="box-sizing surr surr2" placeholder="beeg.com">
<input type="text" name="{{ form.phone.name }}" class="box-sizing surr surr2" placeholder="+7 999 999 44 02"> </div>
</div> <div class="col-lg-3">
</div> <input type="text" name="{{ form.skype.name }}" class="box-sizing surr surr2" placeholder="nokia770">
<div class="col-lg-12"> </div>
<div class="col-lg-12 make-new make-eed"> {# <div class="col-lg-3">#}
<label>{{ form.cro }}<span></span></label> {# <input type="text" name="{{ form.phone.name }}" class="box-sizing surr surr2" placeholder="example@gmail.com">#}
<p>Есть допуск СРО</p> {# </div>#}
</div> <div class="col-lg-3">
</div> <input type="text" name="{{ form.phone.name }}" class="box-sizing surr surr2" placeholder="+7 999 999 44 02">
<div class="searchF1 polsF1 polsFF links-filter"> </div>
<input class="btn-submit-link" type="submit" value="Сохранить" /> </div>
</div>
</div> <div class="col-lg-12">
</div> <div class="col-lg-12 make-new make-eed">
<label>{{ form.cro }}<span></span></label>
<p>Есть допуск СРО</p>
</div>
</div>
<div class="searchF1 polsF1 polsFF links-filter">
<input class="btn-submit-link" type="submit" value="Сохранить" />
</div>
</div>
</div>
</form> </form>
{% include 'partials/footer.html' %}
{% include 'partials/footer.html' %}
</div> </div>
</div> </div>
{% endblock %} {% endblock %}
{% block js_block %} {% block js_block %}
<script type="text/javascript"> <script>
$(function(){ $(function(){
function getCookie(name) { function getCookie(name) {

@ -21,13 +21,13 @@
</div> </div>
<div class="col-lg-4 new-er"> <div class="col-lg-4 new-er">
{% ratings_widget customer.pk %} {% ratings_widget pk %}
</div> </div>
<div class="col-lg-4"> <div class="col-lg-4">
<a href="javascript:void(0)" class="new-prop new-prop1">показать контакты</a> <a href="javascript:void(0)" class="new-prop new-prop1">показать контакты</a>
<a href="javascript:void(0)" class="new-prop new-prop2">написать сообщение</a> <a href="javascript:void(0)" class="new-prop new-prop2">написать сообщение</a>
<a href="{% url 'users:customers-edit' pk=customer.pk %}" class="new-red">редактировать профиль</a> <a href="{% url 'users:customers-edit' pk=pk %}" class="new-red">редактировать профиль</a>
</div> </div>
</div> </div>

@ -7,7 +7,7 @@ from .views import (
# UserInfoListView, # UserInfoListView,
# UserView, # UserView,
ContractorFilterView, ContractorFilterView,
ContractorFinancialInfoEdit, UserFinancialInfoEditView,
ContractorOfficeDetailView, ContractorOfficeDetailView,
ContractorProfileDetailView, ContractorProfileDetailView,
ContractorProfileEditView, ContractorProfileEditView,
@ -40,5 +40,5 @@ urlpatterns = [
# urls.url(r'^(?P<pk>\d+)/$', UserView.as_view(), name='user_view'), # urls.url(r'^(?P<pk>\d+)/$', UserView.as_view(), name='user_view'),
urls.url(r'contractors/(?P<pk>\d+)/edit/$', ContractorProfileEditView.as_view(), name='contractor-edit'), urls.url(r'contractors/(?P<pk>\d+)/edit/$', ContractorProfileEditView.as_view(), name='contractor-edit'),
urls.url(r'customers/(?P<pk>\d+)/edit/$', CustomerProfileEditView.as_view(), name='customers-edit'), urls.url(r'customers/(?P<pk>\d+)/edit/$', CustomerProfileEditView.as_view(), name='customers-edit'),
urls.url(r'contractors/(?P<pk>\d+)/financialinfo/edit/$', ContractorFinancialInfoEdit.as_view(), name='contractor-financical'), urls.url(r'contractors/(?P<pk>\d+)/financialinfo/edit/$', UserFinancialInfoEditView.as_view(), name='contractor-financical'),
] ]

@ -14,7 +14,7 @@ import natsort
import pydash as _; _.map = _.map_; _.filter = _.filter_ import pydash as _; _.map = _.map_; _.filter = _.filter_
from .mixins import CheckForUserMixin from .mixins import CheckForUserMixin
from .models import User, Team, ContractorFinancialInfo from .models import User, Team, UserFinancialInfo
from archilance import util from archilance import util
from archilance.mixins import BaseMixin from archilance.mixins import BaseMixin
from projects.forms import PortfolioForm from projects.forms import PortfolioForm
@ -25,7 +25,7 @@ from work_sell.forms import WorkSellForm
from .forms import ( from .forms import (
ContractorFilterForm, ContractorFilterForm,
ContractorFinancicalInfoForm, UserFinancicalInfoForm,
CustomerProfileProjectRealtyForm, CustomerProfileProjectRealtyForm,
UserEditForm, UserEditForm,
) )
@ -260,12 +260,14 @@ class CustomerProfileOpenProjectsView(BaseMixin, View):
customer = get_object_or_404(User.customer_objects, pk=kwargs.get('pk')) customer = get_object_or_404(User.customer_objects, pk=kwargs.get('pk'))
form = self.form_class(request.GET, request=request, customer=customer) form = self.form_class(request.GET, request=request, customer=customer)
projects = customer.projects.filter(state='active') projects = customer.projects.filter(state='active')
trashed_projects = customer.projects.filter(state='trashed')
if form.is_valid(): if form.is_valid():
realty = form.cleaned_data.get('realty') realty = form.cleaned_data.get('realty')
if realty: if realty:
projects = projects.filter(realty=realty) projects = projects.filter(realty=realty)
trashed_projects = trashed_projects.filter(realty=realty)
else: else:
if form.errors: if form.errors:
messages.info(request, ( messages.info(request, (
@ -290,7 +292,7 @@ class CustomerProfileOpenProjectsView(BaseMixin, View):
'customer': customer, 'customer': customer,
'open_project_count': projects.paginator.count, 'open_project_count': projects.paginator.count,
'trashed_project_count': customer.projects.filter(state='trashed').count(), 'trashed_project_count': trashed_projects.count(),
'is_paginated': True, 'is_paginated': True,
'page_obj': projects, 'page_obj': projects,
@ -308,12 +310,14 @@ class CustomerProfileTrashedProjectsView(BaseMixin, View):
customer = get_object_or_404(User.customer_objects, pk=kwargs.get('pk')) customer = get_object_or_404(User.customer_objects, pk=kwargs.get('pk'))
form = self.form_class(request.GET, request=request, customer=customer) form = self.form_class(request.GET, request=request, customer=customer)
projects = customer.projects.filter(state='trashed') projects = customer.projects.filter(state='trashed')
open_projects = customer.projects.filter(state='active')
if form.is_valid(): if form.is_valid():
realty = form.cleaned_data.get('realty') realty = form.cleaned_data.get('realty')
if realty: if realty:
projects = projects.filter(realty=realty) projects = projects.filter(realty=realty)
open_projects = open_projects.filter(realty=realty)
else: else:
if form.errors: if form.errors:
messages.info(request, ( messages.info(request, (
@ -337,7 +341,7 @@ class CustomerProfileTrashedProjectsView(BaseMixin, View):
'projects': projects, 'projects': projects,
'customer': customer, 'customer': customer,
'open_project_count': customer.projects.filter(state='active').count(), 'open_project_count': open_projects.count(),
'trashed_project_count': projects.paginator.count, 'trashed_project_count': projects.paginator.count,
'is_paginated': True, 'is_paginated': True,
@ -372,14 +376,34 @@ class CustomerProfileReviewsView(BaseMixin, View):
return render(request, self.template_name, context) return render(request, self.template_name, context)
class CustomerProfileEditView(CheckForUserMixin, View):
class ContractorProfileEditView(CheckForUserMixin, View):
form_class = UserEditForm form_class = UserEditForm
template_name = 'customer_profile_edit.html' template_name = 'contractor_profile_edit.html'
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
instance = get_object_or_404(User, pk=request.user.pk) instance = get_object_or_404(User, pk=request.user.pk)
form = self.form_class(instance=instance) form = self.form_class(instance=instance)
nodes = Specialization.objects.all() root = util.get_or_none(Specialization, name='_root')
nodes = root.get_descendants('lft')
return render(request, self.template_name, {'form': form, 'nodes': nodes}) return render(request, self.template_name, {'form': form, 'nodes': nodes})
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
@ -387,22 +411,31 @@ class CustomerProfileEditView(CheckForUserMixin, View):
form = self.form_class(request.POST, request.FILES, instance=instance) form = self.form_class(request.POST, request.FILES, instance=instance)
if form.is_valid(): if form.is_valid():
# import code; code.interact(local=dict(globals(), **locals())) # import code; code.interact(local=dict(globals(), **locals()))
form.save() instance = form.save(commit=False)
messages.info(request, 'Отправили post запрос') instance.save()
return redirect(reverse('users:customer-profile-open-projects', kwargs={'pk': request.user.pk})) messages.info(request, 'Данные успешно отредактированы')
return redirect(reverse('users:contractor-edit', kwargs={'pk': request.user.pk}))
return render(request, self.template_name, {'form': form}) return render(request, self.template_name, {'form': form})
class ContractorProfileEditView(CheckForUserMixin, View):
class CustomerProfileEditView(CheckForUserMixin, View):
form_class = UserEditForm form_class = UserEditForm
template_name = 'contractor_profile_edit.html' template_name = 'customer_profile_edit.html'
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
instance = get_object_or_404(User, pk=request.user.pk) instance = get_object_or_404(User, pk=request.user.pk)
form = self.form_class(instance=instance) form = self.form_class(instance=instance)
root = util.get_or_none(Specialization, name='_root') nodes = Specialization.objects.all()
nodes = root.get_descendants('lft')
return render(request, self.template_name, {'form': form, 'nodes': nodes}) return render(request, self.template_name, {'form': form, 'nodes': nodes})
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
@ -410,17 +443,36 @@ class ContractorProfileEditView(CheckForUserMixin, View):
form = self.form_class(request.POST, request.FILES, instance=instance) form = self.form_class(request.POST, request.FILES, instance=instance)
if form.is_valid(): if form.is_valid():
# import code; code.interact(local=dict(globals(), **locals())) # import code; code.interact(local=dict(globals(), **locals()))
instance = form.save(commit=False) form.save()
instance.save() messages.info(request, 'Отправили post запрос')
messages.info(request, 'Данные успешно отредактированы') return redirect(reverse('users:customer-profile-open-projects', kwargs={'pk': request.user.pk}))
return redirect(reverse('users:contractor-edit', kwargs={'pk': request.user.pk}))
return render(request, self.template_name, {'form': form}) return render(request, self.template_name, {'form': form})
class ContractorFinancialInfoEdit(CheckForUserMixin, View):
class UserFinancialInfoEditView(CheckForUserMixin, View):
template_name = 'contractor_financical_info_edit.html' template_name = 'contractor_financical_info_edit.html'
form_class = ContractorFinancicalInfoForm form_class = UserFinancicalInfoForm
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
instance = request.user.contractor_financial_info instance = request.user.contractor_financial_info

Loading…
Cancel
Save