remotes/origin/setup
ArturBaybulatov 10 years ago
parent a0fe73f49a
commit 4f282f0250
  1. 2
      archilance/mixins.py
  2. 64
      assets/index.js
  3. 22
      projects/migrations/0005_auto_20160726_1958.py
  4. 9
      projects/templates/customer_project_edit.html
  5. 246
      projects/views.py
  6. 6
      templates/partials/base.html
  7. 119
      users/forms.py
  8. 6
      users/templates/contractor_profile.html
  9. 224
      users/templates/contractor_profile_edit.html
  10. 193
      users/templates/customer_profile_edit.html
  11. 6
      users/templates/partials/customer_profile_info_block.html
  12. 93
      users/templates/user_financial_info_edit.html
  13. 169
      users/templates/user_profile_edit.html
  14. 18
      users/urls.py
  15. 216
      users/views.py

@ -11,7 +11,7 @@ class BaseMixin(ContextMixin):
next = self.kwargs.get('next') # Redirect back path
back = self.kwargs.get('back') # Redirect back path
if pk: c['pk'] = pk
if pk: c['pk'] = int(pk)
if next: c['next'] = next
if back: c['back'] = back

@ -1,4 +1,5 @@
var $specSelects = $('.-spec-select')
// Common -------------------------------------------------
var specSelectOptions = {
language: 'ru',
@ -44,6 +45,21 @@ var specSelectOptions = {
}
}
// Specialization select -----------------------------------
var $specSelects = $('.-spec-select')
$specSelects.select2(specSelectOptions)
var chosenSpecId = $('#chosenSpecId').val()
@ -84,9 +100,53 @@ function updateSpecializationWidgets(specId) {
// Specialization select (simple) -------------------------------
var simpleSpecSelectsOptions = {
language: 'ru',
placeholder: 'Выберите специализацию', // Required by `allowClear`
allowClear: true,
}
$('#addSpec').on('click', function($evt) {
var $simpleSpecContainer = $('#simpleSpecContainer')
var $simpleSpecWidget = $simpleSpecContainer.find('.-simple-spec-widget').first()
var $newSimpleSpecWidget = $simpleSpecWidget.clone()
$simpleSpecContainer.append($newSimpleSpecWidget)
var $simpleSpecSelect = $newSimpleSpecWidget.find('.-simple-spec-select').first()
//var $chosenSimpleSpecId = $newSimpleSpecWidget.find('.-chosen-simple-spec-id').first()
$.ajax({url: '/api/specializations/', method: 'GET', dataType: 'json'})
.then(function(res) {
$simpleSpecSelect.select2(_.merge(simpleSpecSelectsOptions, {
data: _.map(function(item) {
return {
text: _.repeat(item.level-1, '---') + item.name,
id: item.id,
origItem: item,
}
}, res.results),
}))
$newSimpleSpecWidget.css('display', 'block')
})
})
$('#simpleSpecContainer').on('change', '.-simple-spec-select', function($evt) {
if ($evt.added)
$(this).parent().children('.-chosen-simple-spec-id').first().val($evt.added.id)
})
//---------------------------------------------------
// Location select ----------------------------------------------
var $locationSelects = $('.-location-select')

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-07-26 16:58
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', '0004_auto_20160726_1931'),
]
operations = [
migrations.AlterField(
model_name='stage',
name='created',
field=models.DateTimeField(default=datetime.datetime(2016, 7, 26, 16, 58, 47, 631021, tzinfo=utc)),
),
]

@ -13,6 +13,7 @@
<form action="{% url 'projects:customer-project-edit' pk=pk %}" method="POST" enctype="multipart/form-data" novalidate>
{% csrf_token %}
<input type="hidden" name="next" value="{% url 'projects:detail' pk=pk %}">
<div class="chatBlock new-rass new-rass2 disTab">
<div class="col-lg-9">
@ -60,7 +61,7 @@
<p class="type-work">Тип работы <span style="color: red">{{ form.work_type.errors.as_text }}</span></p>
<div class="mail-block type-work-inset">
{% for id, name in form.work_type.field.choices %}
{% for id, text in form.work_type.field.choices %}
<div class="inset-mb">
<label>
<input
@ -72,7 +73,7 @@
<span></span>
</label>
<p>{{ name }}</p>
<p>{{ text }}</p>
</div>
{% endfor %}
</div>
@ -288,10 +289,6 @@
</div>
</div>
<input type="hidden" name="next" value="{% url 'projects:detail' pk=pk %}">
<div class="searchF1 polsF1 polsFF links-filter">
<input class="btn-submit-link" type="submit" value="Сохранить">
</div>

@ -168,74 +168,74 @@ class CustomerProjectCreateView(BaseMixin, View):
realty_form = RealtyForm
template_name = 'customer_project_create.html'
def get(self, request, *args, **kwargs):
if request.user.is_authenticated() and request.user.is_customer():
form = self.form_class(request=request)
realty_form = self.realty_form(request=request, prefix='realty_form')
context = self.get_context_data(**_.merge({}, request.GET, kwargs))
context.update({'form': form, 'realty_form': realty_form})
return render(request, self.template_name, context)
def dispatch(self, request, *args, **kwargs):
if request.user.is_authenticated() and request.user.is_customer() and request.user.pk == int(kwargs.get('pk')):
return super().dispatch(request, *args, **kwargs)
else:
return HttpResponseForbidden('403 Forbidden')
def get(self, request, *args, **kwargs):
form = self.form_class(request=request)
realty_form = self.realty_form(request=request, prefix='realty_form')
context = self.get_context_data(**_.merge({}, request.GET, kwargs))
context.update({'form': form, 'realty_form': realty_form})
return render(request, self.template_name, context)
def post(self, request, *args, **kwargs):
if request.user.is_authenticated() and request.user.is_customer():
form = self.form_class(request.POST, request.FILES, request=request)
form = self.form_class(request.POST, request.FILES, request=request)
form.is_valid()
realty = form.cleaned_data.get('realty')
if realty:
realty_form = self.realty_form(request.POST, instance=realty, request=request, prefix='realty_form')
else:
realty_form = self.realty_form(request.POST, request=request, prefix='realty_form')
if form.is_valid() and realty_form.is_valid():
project = form.save(commit=False)
project.customer = request.user
project.save()
form.save_m2m()
form.is_valid()
realty = form.cleaned_data.get('realty')
Order.objects.create(project=project)
if realty:
realty_form = self.realty_form(request.POST, instance=realty, request=request, prefix='realty_form')
else:
realty_form = self.realty_form(request.POST, request=request, prefix='realty_form')
for file in request.FILES.getlist('new_files'):
proj_file = ProjectFile.objects.create(file=file, project=project)
proj_file.save()
if form.is_valid() and realty_form.is_valid():
project = form.save(commit=False)
project.customer = request.user
project.save()
form.save_m2m()
Order.objects.create(project=project)
for file in request.FILES.getlist('new_files'):
proj_file = ProjectFile.objects.create(file=file, project=project)
proj_file.save()
if realty:
realty_form.save()
else:
realty = realty_form.save(commit=False)
realty.user = request.user
realty.save()
realty_form.save_m2m()
project.realty = realty # Connect a realty with a project
project.save()
messages.info(request, 'Проект успешно создан')
redirect_to = reverse('projects:detail', kwargs={'pk': project.pk})
return redirect(redirect_to)
if realty:
realty_form.save()
else:
if form.errors:
messages.info(request, (
'<p>Произошла ошибка (form)</p>'
'<pre>{form}</pre>'
).format(form=pformat(form.errors)))
realty = realty_form.save(commit=False)
realty.user = request.user
realty.save()
realty_form.save_m2m()
if realty_form and realty_form.errors:
messages.info(request, (
'<p>Произошла ошибка (realty_form)</p>'
'<pre>{realty_form}</pre>'
).format(realty_form=pformat(realty_form.errors)))
context = self.get_context_data(**kwargs)
context.update({'form': form, 'realty_form': realty_form})
return render(request, self.template_name, context)
project.realty = realty # Connect a realty with a project
project.save()
messages.info(request, 'Проект успешно создан')
redirect_to = reverse('projects:detail', kwargs={'pk': project.pk})
return redirect(redirect_to)
else:
return HttpResponseForbidden('403 Forbidden')
if form.errors:
messages.info(request, (
'<p>Произошла ошибка (form)</p>'
'<pre>{form}</pre>'
).format(form=pformat(form.errors)))
if realty_form and realty_form.errors:
messages.info(request, (
'<p>Произошла ошибка (realty_form)</p>'
'<pre>{realty_form}</pre>'
).format(realty_form=pformat(realty_form.errors)))
context = self.get_context_data(**kwargs)
context.update({'form': form, 'realty_form': realty_form})
return render(request, self.template_name, context)
class CustomerProjectEditView(BaseMixin, View):
@ -243,81 +243,81 @@ class CustomerProjectEditView(BaseMixin, View):
realty_form = RealtyForm
template_name = 'customer_project_edit.html'
def get(self, request, *args, **kwargs):
if request.user.is_authenticated() and request.user.is_customer():
project = get_object_or_404(request.user.projects, pk=kwargs.get('pk'))
form = self.form_class(instance=project, request=request)
realty = project.realty
if realty:
realty_form = self.realty_form(instance=project.realty, request=request, prefix='realty_form')
else:
realty_form = self.realty_form(request=request, prefix='realty_form')
context = self.get_context_data(**_.merge({}, request.GET, kwargs))
context.update({'form': form, 'realty_form': realty_form})
return render(request, self.template_name, context)
def dispatch(self, request, *args, **kwargs):
if request.user.is_authenticated() and request.user.is_customer() and request.user.pk == int(kwargs.get('pk')):
return super().dispatch(request, *args, **kwargs)
else:
return HttpResponseForbidden('403 Forbidden')
def get(self, request, *args, **kwargs):
project = get_object_or_404(request.user.projects, pk=kwargs.get('pk'))
form = self.form_class(instance=project, request=request)
realty = project.realty
if realty:
realty_form = self.realty_form(instance=project.realty, request=request, prefix='realty_form')
else:
realty_form = self.realty_form(request=request, prefix='realty_form')
context = self.get_context_data(**_.merge({}, request.GET, kwargs))
context.update({'form': form, 'realty_form': realty_form})
return render(request, self.template_name, context)
def post(self, request, *args, **kwargs):
if request.user.is_authenticated() and request.user.is_customer():
project = get_object_or_404(request.user.projects, pk=kwargs.get('pk'))
form = self.form_class(request.POST, request.FILES, request=request, instance=project)
project = get_object_or_404(request.user.projects, pk=kwargs.get('pk'))
form = self.form_class(request.POST, request.FILES, request=request, instance=project)
form.is_valid()
realty = form.cleaned_data.get('realty')
if realty:
realty_form = self.realty_form(request.POST, instance=realty, request=request, prefix='realty_form')
else:
realty_form = self.realty_form(request.POST, request=request, prefix='realty_form')
if form.is_valid() and realty_form.is_valid():
project = form.save(commit=False)
project.customer = request.user
project.files = form.cleaned_data.get('files') # TODO: Somehow get rid of this explicit assignment
project.save()
form.save_m2m()
form.is_valid()
realty = form.cleaned_data.get('realty')
for file in request.FILES.getlist('new_files'):
proj_file = ProjectFile.objects.create(file=file, project=project)
proj_file.save()
if realty:
realty_form = self.realty_form(request.POST, instance=realty, request=request, prefix='realty_form')
realty_form.save()
else:
realty_form = self.realty_form(request.POST, request=request, prefix='realty_form')
if form.is_valid() and realty_form.is_valid():
project = form.save(commit=False)
project.customer = request.user
project.files = form.cleaned_data.get('files') # TODO: Somehow get rid of this explicit assignment
project.save()
form.save_m2m()
for file in request.FILES.getlist('new_files'):
proj_file = ProjectFile.objects.create(file=file, project=project)
proj_file.save()
if realty:
realty_form.save()
else:
realty = realty_form.save(commit=False)
realty.user = request.user
realty.save()
realty_form.save_m2m()
project.realty = realty # Connect a realty with a project
project.save()
messages.info(request, 'Проект успешно отредактирован')
redirect_to = request.POST.get('next')
return redirect(redirect_to)
else:
if form.errors:
messages.info(request, (
'<p>Произошла ошибка (form)</p>'
'<pre>{form}</pre>'
).format(form=pformat(form.errors)))
if realty_form and realty_form.errors:
messages.info(request, (
'<p>Произошла ошибка (realty_form)</p>'
'<pre>{realty_form}</pre>'
).format(realty_form=pformat(realty_form.errors)))
realty = realty_form.save(commit=False)
realty.user = request.user
realty.save()
realty_form.save_m2m()
context = self.get_context_data(**kwargs)
context.update({'form': form, 'realty_form': realty_form})
return render(request, self.template_name, context)
project.realty = realty # Connect a realty with a project
project.save()
messages.info(request, 'Проект успешно отредактирован')
redirect_to = request.POST.get('next')
return redirect(redirect_to)
else:
return HttpResponseForbidden('403 Forbidden')
if form.errors:
messages.info(request, (
'<p>Произошла ошибка (form)</p>'
'<pre>{form}</pre>'
).format(form=pformat(form.errors)))
if realty_form and realty_form.errors:
messages.info(request, (
'<p>Произошла ошибка (realty_form)</p>'
'<pre>{realty_form}</pre>'
).format(realty_form=pformat(realty_form.errors)))
context = self.get_context_data(**kwargs)
context.update({'form': form, 'realty_form': realty_form})
return render(request, self.template_name, context)
class ContractorProjectAnswerView(BaseMixin, View):

@ -20,7 +20,7 @@
<link rel='stylesheet' href='{% static "css/swiper.min.css" %}'>
<link rel='stylesheet' href='{% static "lib/jquery.fileupload/css/jquery.fileupload.css" %}'>
<link rel='stylesheet' href='{% static "js/magnific-popup.css" %}'>
<link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/jquery-jgrowl/1.4.1/jquery.jgrowl.min.css" />
{# <link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/jquery-jgrowl/1.4.1/jquery.jgrowl.min.css" />#}
<link rel='stylesheet' href='{% static "css/main.css" %}'>
<link rel='stylesheet' href='{% static "css/extra.css" %}'> <!-- Our additional CSS -->
@ -60,8 +60,8 @@
<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="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="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='{% static "my-libs.js" %}'></script>

@ -1,44 +1,89 @@
from django import forms
from django.forms import ModelForm
import itertools
import pydash as _; _.map = _.map_; _.filter = _.filter_
from .models import User, UserFinancialInfo
from .models import User, UserFinancialInfo, GENDERS
from common.models import Location
from projects.models import Project, Realty, BuildingClassfication, ConstructionType
from specializations.models import Specialization
class UserEditForm(ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if kwargs.get('instance'):
if kwargs.get('instance').is_contractor():
self.fields['contractor_specializations'].queryset = kwargs.get('instance').contractor_specializations.all()
class UserProfileEditForm(forms.ModelForm):
gender = forms.ChoiceField(
choices=GENDERS,
widget=forms.RadioSelect,
)
class Meta:
model = User
fields = (
'first_name',
'last_name',
'patronym',
'location',
'date_of_birth',
'website',
'skype',
'avatar',
'contractor_specializations',
'cro',
'phone',
'date_of_birth',
'first_name',
'gender',
'last_name',
'location',
'patronym',
'phone',
'skype',
'website',
)
widgets = {
'date_of_birth': forms.SelectDateWidget(years=range(1940, 2015), attrs={'class': 'selectpicker'}),
}
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request')
super().__init__(*args, **kwargs)
# user = self.request.user
#
# if user.is_contractor():
# self.fields['contractor_specializations'] = ...
# def clean_contractor_specializations(self...):
# ...
class UserFinancialInfoEditForm(forms.ModelForm):
class Meta:
model = UserFinancialInfo
fields = (
'credit_card_number',
'date_of_birth',
'fio',
'inn',
'legal_status',
'passport_issue_date',
'passport_issued_by',
'passport_number',
'passport_scan',
'passport_series',
'phone',
'residency',
'subdivision_code',
'yandex_money',
)
widgets = {
'date_of_birth': forms.SelectDateWidget(years=range(1940, 2015)),
# 'contractor_specializations': forms.Select(),
'residency': forms.RadioSelect(),
'legal_status': forms.RadioSelect(),
}
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request')
super().__init__(*args, **kwargs)
self.fields['residency'].choices = self.fields['residency'].choices[1:]
self.fields['legal_status'].choices = self.fields['legal_status'].choices[1:]
# self.fields['residency'].empty_label = None
# self.fields['residency'].widget.choices = self.fields['residency'].choices
class ContractorFilterForm(forms.Form):
@ -131,36 +176,4 @@ class CustomerProfileProjectRealtyForm(forms.Form):
)
class UserFinancicalInfoForm(ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['residency'].choices = self.fields['residency'].choices[1:]
self.fields['legal_status'].choices = self.fields['legal_status'].choices[1:]
# self.fields['residency'].empty_label = None
# self.fields['residency'].widget.choices = self.fields['residency'].choices
class Meta:
model = UserFinancialInfo
fields = (
'fio',
'date_of_birth',
'phone',
'residency',
'legal_status',
'passport_series',
'passport_number',
'subdivision_code',
'passport_issued_by',
'passport_issue_date',
'inn',
'yandex_money',
'credit_card_number',
'passport_scan',
)
widgets = {
'residency': forms.RadioSelect(),
'legal_status': forms.RadioSelect(),
}
# import code; code.interact(local=dict(globals(), **locals()))

@ -23,19 +23,19 @@
<ul>
{% if contractor.pk == user.pk %}
<li class="icon_um1">
<a href="{% url 'users:contractor-edit' pk=contractor.pk %}">
<a href="{% url 'users:user-profile-edit' pk=contractor.pk %}">
редактировать профиль
</a>
<span></span>
</li>
<li class="icon_um1">
<a href="{% url 'users:contractor-edit' pk=contractor.pk %}">
<a href="{% url 'users:user-profile-edit' pk=contractor.pk %}">
редактировать профиль
</a>
<span></span>
</li>
<li class="icon_um1">
<a href="{% url 'users:contractor-edit' pk=contractor.pk %}">
<a href="{% url 'users:user-profile-edit' pk=contractor.pk %}">
редактировать профиль
</a>
<span></span>

@ -1,224 +0,0 @@
{% extends 'partials/base.html' %}
{% load staticfiles %}
{% load common_tags %}
{% block content %}
{% include 'partials/header.html' %}
<div class="container mainScore">
<div class="row">
<form method="post" enctype="multipart/form-data">{% csrf_token %}
<div class="projectsBlock disTab">
<div class="col-lg-12">
{% load mptt_tags %}
{{ form.errors }}
<div class="col-lg-3 divCol3">
<div class="avatar">
<div class="avatarInset">
<img src="/media/{{ form.avatar.value }}" alt="profile-image">
</div>
</div>
<div class="menuUser upload-img disTab">
<div class="upload2 up-l1">
<input type="file" name="{{ form.avatar.name }}">
<p>Загрузить фотографию</p>
</div>
</div>
</div>
<div class="col-lg-9 divCol9">
<div class="col-lg-4">
<p class="name-edit-p">ФИО:</p>
<input type="text" value="{{ form.first_name.value }}" name="{{ form.first_name.name }}" class="box-sizing inp-edit">
<input type="text" value="{{ form.last_name.value }}" name="{{ form.last_name.name }}" class="box-sizing inp-edit">
<input type="text" value="{{ form.patronym.value }}" name="{{ form.patronym.name }}" class="box-sizing inp-edit">
</div>
<div class="col-lg-4">
<p class="name-edit-p">Специализация:</p>
<div class="polsF1 pols-edit disTab">
{% for spec in form.instance.contractor_specializations.all %}
<select class="selectpicker4">
{% for sp in nodes %}
<option value="{{ sp.pk }}" {% if spec.pk == sp.pk %}selected{% endif %}>{{ "-"|multiply:sp.level }}{{ sp }}</option>
{% endfor %} }
</select>
{% endfor %}
<a href="javascript:void(0)" class="add-edit" id="add-edit-spec">
Добавить еще
</a>
</div>
</div>
<div class="col-lg-4">
<p class="name-edit-p">Местоположение:</p>
<div class="polsF1 pols-edit disTab">
<select id="location-country">
</select>
<select id="location-region">
</select>
<select id="location-city" data-id="{{ orm.location.value }}" name="{{ form.location.name }}">
</select>
</div>
</div>
</div>
</div>
</div>
<div class="buttonGP btn-edit disTab">
<div class="btn-group valProject valProject2" role="group" aria-label="...">
<button type="button" class="btn btn-default">Общая информация</button>
<button type="button" class="btn btn-default">Финансовая информация</button>
</div>
</div>
<div class="col-lg-12 col12 new-filter">
<div class="filter clearfix">
<div class="titleF1 disTab">
<div class="col-lg-7">Дата рождения:</div>
<div class="col-lg-5">Пол: </div>
</div>
<div class="polsF1 disTab">
<div class="col-lg-7">
{{ form.date_of_birth }}
</div>
<div class="col-lg-5 dog-new ed-new">
<label>
<input type="radio" value="male" name="{{ form.gender.name }}" {% if form.gender.value == 'male' %} checked {% endif %}><span></span></label>
<p>Мужской</p>
<label class="woman">
<input type="radio" value="woman" name="{{ form.gender.name }}" {% if form.gender.value == 'woman' %} checked {% endif %}><span></span></label>
<p>Женский</p>
</div>
</div>
<div class="titleF1 titleF2 disTab">
<div class="col-lg-3">Сайт:</div>
<div class="col-lg-3">Skype:</div>
<div class="col-lg-3">Телефон:</div>
</div>
<div class="searchF1 polsF1 polsFF polsF3">
<div class="col-lg-3">
<input type="text" name="{{ form.website.name }}" value="{{ form.website.value }}" class="box-sizing surr surr2" placeholder="beeg.com">
</div>
<div class="col-lg-3">
<input type="text" name="{{ form.skype.name }}" value="{{ form.skype.value }}" class="box-sizing surr surr2" placeholder="nokia770">
</div>
<div class="col-lg-3">
<input type="text" name="{{ form.phone.name }}" value="{{ form.phone.value }}" class="box-sizing surr surr2" placeholder="+7 999 999 44 02">
</div>
</div>
<div class="col-lg-12">
<div class="col-lg-12 make-new make-eed">
<label>{{ 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>
{% include 'partials/footer.html' %}
</div>
</div>
{% endblock %}
{% block js_block %}
<script type="text/javascript">
$(function(){
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
$("#add-edit-spec").on('click',function(){
$("<select class='selectpicker4'><option >Видное</option></select>").insertBefore("#add-edit-spec");
$('.selectpicker4').selectpicker({
style: 'btn-info',
size: 4,
width: '237px'
});
});
var csrftoken = getCookie('csrftoken');
$('#id_date_of_birth_day').addClass('selectpicker2 valul');
$('#id_date_of_birth_month').addClass('selectpicker left-edit');
$('#id_date_of_birth_year').addClass('selectpicker5 valul left-edit');
$('.selectpicker2').selectpicker({
style: 'btn-info',
size: 4,
width: '90px'
});
$('.selectpicker5').selectpicker({
style: 'btn-info',
size: 4,
width: '117px'
});
$.ajax({
url: '/api/locations',
type: 'GET',
data:{ csrfmiddlewaretoken : csrftoken},
dataType:'json',
'success': function(json){
console.log(json.results);
var outCity, outCountry,outRegion;
outCity = outCountry = outRegion = '';
$.each(json.results, function(i,v){
if (v.type == 'country'){
outCountry += '<option value="' + v.id + '">' + v.name + '</option>';
}
if (v.type == 'region'){
outRegion += '<option value="' + v.id + '">' + v.name + '</option>';
}
if (v.type == 'town') {
outCity += '<option value="' + v.id + '">' + v.name + '</option>';
}
});
$('#location-country').html(outCountry);
$('#location-city').html(outCity);
$('#location-region').html(outRegion);
$('#location-country').addClass("selectpicker4");
$('#location-city').addClass("selectpicker4");
$('#location-region').addClass("selectpicker4");
$('.selectpicker4').selectpicker({
style: 'btn-info',
size: 4,
width: '237px'
});
}
});
});
</script>
{% endblock %}

@ -1,193 +0,0 @@
{% extends 'partials/base.html' %}
{% load thumbnail %}
{% block content %}
{% include 'partials/header.html' %}
<div class="container mainScore">
<div class="row">
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
<div class="projectsBlock disTab">
<div class="col-lg-12">
{{ form.errors }}
<div class="col-lg-3 divCol3">
<div class="avatar">
<div class="avatarInset">
<img src="/media/{{ form.avatar.value }}" alt="profile-image">
</div>
</div>
<div class="menuUser upload-img disTab">
<div class="upload2 up-l1">
<input type="file" name="{{ form.avatar.name }}">
<p>Загрузить фотографию</p>
</div>
</div>
</div>
<div class="col-lg-9 divCol9">
<div class="col-lg-4">
<p class="name-edit-p">ФИО:</p>
<input type="text" value="{{ form.first_name.value }}" name="{{ form.first_name.name }}" class="box-sizing inp-edit">
<input type="text" value="{{ form.last_name.value }}" name="{{ form.last_name.name }}" class="box-sizing inp-edit">
<input type="text" value="{{ form.patronym.value }}" name="{{ form.patronym.name }}" class="box-sizing inp-edit">
</div>
<div class="col-lg-4">
<p class="name-edit-p">Местоположение: {{ form.location.value }}</p>
<div class="polsF1 pols-edit disTab">
<select id="location-country">
</select>
<select id="location-region">
</select>
<select id="location-city" name="{{ form.location.name }}">
</select>
</div>
</div>
</div>
</div>
</div>
<div class="buttonGP btn-edit disTab">
<div class="btn-group valProject valProject2" role="group" aria-label="...">
<button type="button" class="btn btn-default">Общая информация</button>
</div>
</div>
<div class="col-lg-12 col12 new-filter">
<div class="filter clearfix">
<div class="titleF1 disTab">
<div class="col-lg-7">Дата рождения:</div>
<div class="col-lg-5">Пол:</div>
</div>
<div class="polsF1 disTab">
<div class="col-lg-7">
{{ form.date_of_birth }}
</div>
<div class="col-lg-5 dog-new ed-new">
<label><input type="radio" name="{{ form.gender }}"><span></span></label>
<p>Мужской</p>
<label class="woman"><input type="radio" name="{{ form.gender }}"><span></span></label>
<p>Женский</p>
</div>
</div>
<div class="titleF1 titleF2 disTab">
<div class="col-lg-3">Сайт:</div>
<div class="col-lg-3">Skype:</div>
{# <div class="col-lg-3">Электронная почта:</div>#}
<div class="col-lg-3">Телефон:</div>
</div>
<div class="searchF1 polsF1 polsFF polsF3">
<div class="col-lg-3">
<input type="text" name="{{ form.website.name }}"class="box-sizing surr surr2" placeholder="beeg.com">
</div>
<div class="col-lg-3">
<input type="text" name="{{ form.skype.name }}" class="box-sizing surr surr2" placeholder="nokia770">
</div>
{# <div class="col-lg-3">#}
{# <input type="text" name="{{ form.phone.name }}" class="box-sizing surr surr2" placeholder="example@gmail.com">#}
{# </div>#}
<div class="col-lg-3">
<input type="text" name="{{ form.phone.name }}" class="box-sizing surr surr2" placeholder="+7 999 999 44 02">
</div>
</div>
<div class="col-lg-12">
<div class="col-lg-12 make-new make-eed">
<label>{{ 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>
{% include 'partials/footer.html' %}
</div>
</div>
{% endblock %}
{% block js_block %}
<script>
$(function(){
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
$("#add-edit-spec").on('click',function(){
$("<select class='selectpicker4'><option >Видное</option></select>").insertBefore("#add-edit-spec");
$('.selectpicker4').selectpicker({
style: 'btn-info',
size: 4,
width: '237px'
});
});
var csrftoken = getCookie('csrftoken');
$.ajax({
url: '/api/location',
type: 'GET',
data:{ csrfmiddlewaretoken : csrftoken},
dataType:'json',
'success': function(json){
console.log(json.results);
var out = ''
var outCountry = '';
$.each(json.results, function(i,v){
if (v.type == 'country'){
outCountry += '<option value="' + v.id + '">' + v.name + '</option>';
}
if (v.type == 'town') {
out += '<option value="' + v.id + '">' + v.name + '</option>';
}
});
$('#location-country').html(outCountry);
$('#location-city').html(out);
$('#location-country').addClass("selectpicker4");
$('#location-city').addClass("selectpicker4");
$('.selectpicker4').selectpicker({
style: 'btn-info',
size: 4,
width: '237px'
});
}
});
});
</script>
{% endblock %}

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

@ -1,7 +1,5 @@
{% extends 'partials/base.html' %}
{% load staticfiles %}
{% block content %}
{% include 'partials/header.html' %}
@ -16,6 +14,7 @@
<img src="img/profile.jpg" alt="profile-image">
</div>
</div>
<div class="menuUser upload-img disTab">
<div class="upload2 up-l1">
<input type="file" name="upload">
@ -26,9 +25,9 @@
<div class="col-lg-9 divCol9">
<div class="col-lg-4">
<p class="name-edit-p">ФИО:</p>
<input type="text" value="Иванов" class="box-sizing inp-edit">
<input type="text" value="Петр" class="box-sizing inp-edit">
<input type="text" value="Иванович" class="box-sizing inp-edit">
<input type="text" value="-------" class="box-sizing inp-edit">
<input type="text" value="-------" class="box-sizing inp-edit">
<input type="text" value="-------" class="box-sizing inp-edit">
</div>
<div class="col-lg-4">
<p class="name-edit-p">Специализация:</p>
@ -66,125 +65,147 @@
</div>
</div>
</div>
<div class="buttonGP btn-edit disTab">
<div class="btn-group valProject valProject2" role="group" aria-label="...">
<button type="button" class="btn btn-default">Общая информация</button>
<button type="button" class="btn btn-default">Финансовая информация</button>
<a href="{% url 'users:user-profile-edit' pk=pk %}" class="btn btn-default">Общая информация</a>
<a href="{% url 'users:user-financial-info-edit' pk=pk %}" class="btn btn-default active">Финансовая информация</a>
</div>
</div>
<form method="post" enctype="multipart/form-data"> {% csrf_token %}
<form action="{% url 'users:user-financial-info-edit' pk=pk %}" method="POST" enctype="multipart/form-data" novalidate>
{% csrf_token %}
{% if request.user.is_customer %}
<input type="hidden" name="next" value="{% url 'users:customer-profile-open-projects' pk=pk %}">
{% elif request.user.is_contractor %}
<input type="hidden" name="next" value="{% url 'users:contractor-profile' pk=pk %}">
{% endif %}
<div class="col-lg-12 col12 new-filter">
{{ form.errors }}
<div class="filter clearfix">
<div class="titleF1 disTab">
<div class="col-lg-6">Имя, Фамилия, Отчество:</div>
<div class="col-lg-3">Дата рождения:</div>
<div class="col-lg-3">Телефон</div>
</div>
<div class="polsF1 disTab">
<div class="col-lg-6">
<input type="text" class="searchInp box-sizing" value="{{ form.fio.value|default_if_none:"" }}" name="{{ form.fio.name }}" />
<input type="text" class="searchInp box-sizing" value="{{ form.fio.value }}" name="{{ form.fio.name }}">
</div>
<div class="col-lg-3">
<input type="text" class="box-sizing surr surr2" value="{{ form.date_of_birth.value|default_if_none:"" }}" name="{{ form.date_of_birth.name }}" />
<input type="text" class="box-sizing surr surr2" value="{{ form.date_of_birth.value }}" name="{{ form.date_of_birth.name }}">
</div>
<div class="col-lg-3">
<input type="text" class="box-sizing surr surr2" value="{{ form.phone.value }}" name="{{ form.phone.name }}" />
<input type="text" class="box-sizing surr surr2" value="{{ form.phone.value }}" name="{{ form.phone.name }}">
</div>
</div>
<div class="titleF1 titleFFE disTab">
<div class="col-lg-12">Резиденство:</div>
</div>
<div class="searchF1 polsF1 polsFF radio-afer">
{% for residency in form.residency %}
<div class="col-lg-3">
<label><input type="radio" value="{{ residency.choice_value }}" name="{{ form.residency.name }}" {% if residency.choice_value|stringformat:"s" == form.instance.residency|stringformat:"s" %}checked{% endif %}><span></span></label>
<p class="text-afer">
{{ residency.choice_label }}
</p>
</div>
<label><input type="radio" value="{{ residency.choice_value }}" name="{{ form.residency.name }}" {% if residency.choice_value|stringformat:"s" == form.instance.residency|stringformat:"s" %}checked{% endif %}><span></span></label>
<p class="text-afer">
{{ residency.choice_label }}
</p>
</div>
{% endfor %}
</div>
<div class="titleF1 titleFFE disTab">
<div class="col-lg-12">Юридический статус:</div>
</div>
<div class="searchF1 polsF1 polsFF radio-afer new-doubt">
{% for lstatus in form.legal_status %}
<div class="col-lg-3">
<label><input value="{{ lstatus.choice_value }}" type="radio" name="{{ form.legal_status.name }}" {% if lstatus.choice_value|stringformat:"s" == form.instance.legal_status|stringformat:"s" %}checked{% endif %} /><span></span></label>
<p class="text-afer">
{{ lstatus.choice_label }}
</p>
</div>
<div class="col-lg-3">
<label><input value="{{ lstatus.choice_value }}" type="radio" name="{{ form.legal_status.name }}" {% if lstatus.choice_value|stringformat:"s" == form.instance.legal_status|stringformat:"s" %}checked{% endif %}><span></span></label>
<p class="text-afer">
{{ lstatus.choice_label }}
</p>
</div>
{% endfor %}
</div>
<div class="titleF1 disTab">
<div class="col-lg-6">Серия и номер паспорта:</div>
<div class="col-lg-6">Кем выдан:</div>
</div>
<div class="polsF1 disTab new-doubt">
<div class="col-lg-3">
<input type="text" value="{{ form.passport_series.value| default_if_none:"" }}" class="box-sizing surr surr2" name="{{ form.passport_series.name }}" placeholder="КН" />
<input type="text" value="{{ form.passport_series.value }}" class="box-sizing surr surr2" name="{{ form.passport_series.name }}" placeholder="КН">
</div>
<div class="col-lg-3">
<input type="text" value="{{ form.passport_number.value| default_if_none:"" }}" class="box-sizing surr surr2" name="{{ form.passport_number.name }}" placeholder="0099321" />
<input type="text" value="{{ form.passport_number.value }}" class="box-sizing surr surr2" name="{{ form.passport_number.name }}" placeholder="0099321">
</div>
<div class="col-lg-6">
<input type="text" name="search" class="searchInp box-sizing">
</div>
</div>
<div class="titleF1 disTab">
<div class="col-lg-3">Код подразделения:</div>
<div class="col-lg-9">Кем выдан:</div>
</div>
<div class="polsF1 disTab new-doubt">
<div class="col-lg-3">
<input type="text" value="{{ form.subdivision_code.value| default_if_none:"" }}" class="box-sizing surr surr2" placeholder="0033" name="{{ form.subdivision_code.name }}" />
<input type="text" value="{{ form.subdivision_code.value }}" class="box-sizing surr surr2" placeholder="0033" name="{{ form.subdivision_code.name }}">
</div>
<div class="col-lg-9">
<input type="text" value="{{ form.passport_issued_by.value| default_if_none:"" }}" class="searchInp box-sizing" name="{{ form.passport_issued_by.name }}" />
<input type="text" value="{{ form.passport_issued_by.value }}" class="searchInp box-sizing" name="{{ form.passport_issued_by.name }}">
</div>
</div>
<div class="titleF1 disTab">
<div class="col-lg-3">Дата выдачи:</div>
<div class="col-lg-9">Почтовый адрес:</div>
</div>
<div class="polsF1 disTab new-doubt">
<div class="col-lg-3">
<input type="text" value="{{ form.passport_issue_date.value| default_if_none:"" }}" name="{{ form.passport_issue_date.name }}" class="box-sizing surr surr2" placeholder="11.12.1994" />
<input type="text" value="{{ form.passport_issue_date.value }}" name="{{ form.passport_issue_date.name }}" class="box-sizing surr surr2" placeholder="11.12.1994">
</div>
<div class="col-lg-9">
{# <input type="text" class="searchInp box-sizing" />#}
<input type="text" class="searchInp box-sizing">
</div>
</div>
<div class="titleF1 disTab">
<div class="col-lg-3">ИНН:</div>
<div class="col-lg-3">Яндекс.Деньги:</div>
<div class="col-lg-3">Номер карты</div>
<div class="col-lg-3">Скан-копии страниц паспорта</div>
</div>
<div class="polsF1 disTab new-doubt">
<div class="col-lg-3">
<input type="text" value="{{ form.inn.value| default_if_none:"" }}" class="box-sizing surr surr2" name="{{ form.inn.name }}" />
<input type="text" value="{{ form.inn.value }}" class="box-sizing surr surr2" name="{{ form.inn.name }}">
</div>
<div class="col-lg-3">
<input type="text" value="{{ form.yandex_money.value| default_if_none:"" }}" class="box-sizing surr surr2" name="{{ form.yandex_money.name }}" />
<input type="text" value="{{ form.yandex_money.value }}" class="box-sizing surr surr2" name="{{ form.yandex_money.name }}">
</div>
<div class="col-lg-3">
<input type="text" value="{{ form.credit_card_number.value| default_if_none:"" }}" class="box-sizing surr surr2" name="{{ form.credit_card_number.name }}" />
<input type="text" value="{{ form.credit_card_number.value }}" class="box-sizing surr surr2" name="{{ form.credit_card_number.name }}">
</div>
<div class="col-lg-3">
{{ form.passport_scan.value }}
<div class="upload2 up-l1 take-new">
<input type="file" name="{{ form.passport_scan.name }}">
<p>Прикрепить файл</p>
</div>
</div>
</div>
<div class="searchF1 polsF1 polsFF links-filter">
<input class="btn-submit-link" type="submit" value="Сохранить" />
<input class="btn-submit-link" type="submit" value="Сохранить">
</div>
</div>
</div>

@ -0,0 +1,169 @@
{% extends 'partials/base.html' %}
{% load thumbnail %}
{% block content %}
{% include 'partials/header.html' %}
<div class="container mainScore">
<div class="row">
<form action="{% url 'users:user-profile-edit' pk=pk %}" method="POST" enctype="multipart/form-data" novalidate>
{% csrf_token %}
{% if request.user.is_customer %}
<input type="hidden" name="next" value="{% url 'users:customer-profile-open-projects' pk=pk %}">
{% elif request.user.is_contractor %}
<input type="hidden" name="next" value="{% url 'users:contractor-profile' pk=pk %}">
{% endif %}
<div class="projectsBlock disTab">
<div class="col-lg-12">
<div class="col-lg-3 divCol3">
<div class="avatar">
<div class="avatarInset">
<img src="{{ form.avatar.value.url }}" alt="profile-image">
</div>
</div>
<div class="menuUser upload-img disTab">
<div class="upload2 up-l1">
<input type="file" name="{{ form.avatar.html_name }}">
<p>Загрузить фотографию</p>
</div>
</div>
</div>
<div class="col-lg-9 divCol9">
<div class="col-lg-4">
<p class="name-edit-p">ФИО</p>
<input type="text" value="{{ form.last_name.value }}" name="{{ form.last_name.html_name }}" class="box-sizing inp-edit">
<input type="text" value="{{ form.first_name.value }}" name="{{ form.first_name.html_name }}" class="box-sizing inp-edit">
<input type="text" value="{{ form.patronym.value }}" name="{{ form.patronym.html_name }}" class="box-sizing inp-edit">
</div>
{% if request.user.is_contractor %}
<div class="col-lg-4">
<p class="name-edit-p">Специализации</p>
<div id="simpleSpecContainer">
<div class="polsF1 pols-edit disTab -simple-spec-widget" s--tyle="display: none">
<input type="text" class="-simple-spec-select" style="width: 100%">
<input type="text" class="-chosen-simple-spec-id" name="{{ form.contractor_specializations.html_name }}">
</div>
</div>
<a href="#" onclick="return false" class="add-edit" id="addSpec">
Добавить еще
</a>
</div>
{% endif %}
<div class="col-lg-4">
<p class="name-edit-p">Местоположение</p>
<div class="polsF1 pols-edit disTab">
<div><input type="hidden" class="-location-select -location-select-country" style="width: 100%"></div>
<div><input type="hidden" class="-location-select -location-select-region" style="width: 100%"></div>
<div><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>
</div>
</div>
</div>
</div>
<div class="buttonGP btn-edit disTab">
<div class="btn-group valProject valProject2" role="group">
<a href="{% url 'users:user-profile-edit' pk=pk %}" class="btn btn-default active">Общая информация</a>
<a href="{% url 'users:user-financial-info-edit' pk=pk %}" class="btn btn-default">Финансовая информация</a>
</div>
</div>
<div class="col-lg-12 col12 new-filter">
<div class="filter clearfix">
<div class="titleF1 disTab">
<div class="col-lg-7">Дата рождения</div>
<div class="col-lg-5">Пол</div>
</div>
<div class="polsF1 disTab">
<div class="col-lg-7">
{{ form.date_of_birth }}
</div>
<div class="col-lg-5 dog-new ed-new">
{% for id, text in form.gender.field.choices %}
<label>
<input
type="radio"
name="{{ form.gender.html_name }}"
value="{{ id }}"
{% if form.gender.value == id %}checked{% endif %}>
<span></span>
</label>
<p>{{ text }}</p>
{% endfor %}
</div>
</div>
<div class="titleF1 titleF2 disTab">
<div class="col-lg-3">Сайт</div>
<div class="col-lg-3">Skype</div>
{# <div class="col-lg-3">Электронная почта:</div>#}
<div class="col-lg-3">Телефон</div>
</div>
<div class="searchF1 polsF1 polsFF polsF3">
<div class="col-lg-3">
<input type="text" name="{{ form.website.html_name }}" value="{{ form.website.value }}" class="box-sizing surr surr2" placeholder="beeg.com">
</div>
<div class="col-lg-3">
<input type="text" name="{{ form.skype.html_name }}" value="{{ form.skype.value }}" class="box-sizing surr surr2" placeholder="nokia770">
</div>
{# <div class="col-lg-3">#}
{# <input type="text" name="{{ form.email.html_name }}" value="{{ form.email.value }}" class="box-sizing surr surr2" placeholder="example@gmail.com">#}
{# </div>#}
<div class="col-lg-3">
<input type="text" name="{{ form.phone.html_name }}" value="{{ form.phone.value }}" class="box-sizing surr surr2" placeholder="+7 999 999 44 02">
</div>
</div>
<div class="col-lg-12">
<div class="col-lg-12 make-new make-eed">
<label>{{ 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>
{% include 'partials/footer.html' %}
</div>
</div>
{% endblock %}
{#{% block js_block %}#}
{# <script>#}
{# $("#add-edit-spec").on('click',function() {#}
{# $("<select class='selectpicker4'><option >Видное</option></select>").insertBefore("#add-edit-spec");#}
{# #}
{# $('.selectpicker4').selectpicker({#}
{# style: 'btn-info',#}
{# size: 4,#}
{# width: '237px'#}
{# });#}
{# });#}
{# </script>#}
{#{% endblock %}#}

@ -3,21 +3,17 @@ from django.conf.urls import include
from django.contrib.auth.views import login, logout
from .views import (
# UserDetailView,
# UserInfoListView,
# UserView,
ContractorFilterView,
UserFinancialInfoEditView,
ContractorOfficeDetailView,
ContractorProfileDetailView,
ContractorProfileEditView,
CustomerProfileCurrentProjectsView,
CustomerProfileEditView,
CustomerProfileOpenProjectsView,
CustomerProfileReviewsView,
CustomerProfileTrashedProjectsView,
send_mail_test,
UserFinancialInfoEditView,
UserListView,
UserProfileEditView,
)
@ -38,7 +34,11 @@ urlpatterns = [
urls.url(r'^test/$', send_mail_test),
# urls.url(r'^info$', UserInfoListView.as_view(), name='users_info_list'),
# urls.url(r'^(?P<pk>\d+)/$', UserView.as_view(), name='user_view'),
urls.url(r'contractors/(?P<pk>\d+)/edit/$', ContractorProfileEditView.as_view(), name='contractor-edit'),
urls.url(r'customers/(?P<pk>\d+)/edit/$', CustomerProfileEditView.as_view(), name='customers-edit'),
urls.url(r'contractors/(?P<pk>\d+)/financialinfo/edit/$', UserFinancialInfoEditView.as_view(), name='contractor-financical'),
# urls.url(r'contractors/(?P<pk>\d+)/edit/$', ContractorProfileEditView.as_view(), name='contractor-profile-edit'),
urls.url(r'(?P<pk>\d+)/edit/$', UserProfileEditView.as_view(), name='user-profile-edit'),
urls.url(r'(?P<pk>\d+)/financial-info/edit/$', UserFinancialInfoEditView.as_view(), name='user-financial-info-edit'),
# urls.url(r'contractors/(?P<pk>\d+)/financialinfo/edit/$', UserFinancialInfoEditView.as_view(), name='contractor-financical'),
]

@ -5,7 +5,7 @@ from django.core.mail import send_mail
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.core.urlresolvers import reverse
from django.db.models import Q
from django.http import HttpResponse
from django.http import HttpResponse, HttpResponseForbidden
from django.shortcuts import render, get_object_or_404, redirect
from django.views.generic import ListView, DetailView, View, UpdateView, CreateView
from pprint import pprint, pformat
@ -25,9 +25,9 @@ from work_sell.forms import WorkSellForm
from .forms import (
ContractorFilterForm,
UserFinancicalInfoForm,
CustomerProfileProjectRealtyForm,
UserEditForm,
UserFinancialInfoEditForm,
UserProfileEditForm,
)
@ -42,6 +42,99 @@ class UserListView(ListView):
context_object_name = 'users'
class UserProfileEditView(BaseMixin, View):
form_class = UserProfileEditForm
template_name = 'user_profile_edit.html'
def dispatch(self, request, *args, **kwargs):
if request.user.is_authenticated() and request.user.pk == int(kwargs.get('pk')):
return super().dispatch(request, *args, **kwargs)
else:
return HttpResponseForbidden('403 Forbidden')
def get(self, request, *args, **kwargs):
context = self.get_context_data(**_.merge({}, request.GET, kwargs))
if request.user.is_contractor():
root = util.get_or_none(Specialization, name='_root')
nodes = root.get_descendants('lft')
context.update({'nodes': nodes})
form = self.form_class(request=request, instance=request.user)
context.update({'form': form})
return render(request, self.template_name, context)
def post(self, request, *args, **kwargs):
context = self.get_context_data(**kwargs)
customer = request.user
form = self.form_class(request.POST, request.FILES, request=request, instance=customer)
if form.is_valid():
import code; code.interact(local=dict(globals(), **locals()))
form.save()
messages.info(request, 'Заказчик успешно отредактирован')
redirect_to = request.POST.get('next')
return redirect(redirect_to)
else:
if form.errors:
messages.info(request, (
'<p>Произошла ошибка (form)</p>'
'<pre>{form}</pre>'
).format(form=pformat(form.errors)))
context.update({'form': form})
return render(request, self.template_name, context)
class UserFinancialInfoEditView(BaseMixin, View):
form_class = UserFinancialInfoEditForm
template_name = 'user_financial_info_edit.html'
def dispatch(self, request, *args, **kwargs):
if request.user.is_authenticated() and request.user.pk == int(kwargs.get('pk')):
return super().dispatch(request, *args, **kwargs)
else:
return HttpResponseForbidden('403 Forbidden')
def get(self, request, *args, **kwargs):
context = self.get_context_data(**_.merge({}, request.GET, kwargs))
form = self.form_class(request=request, instance=request.user.financial_info)
context.update({'form': form})
return render(request, self.template_name, context)
def post(self, request, *args, **kwargs):
context = self.get_context_data(**kwargs)
form = self.form_class(request.POST, request.FILES, request=request, instance=request.user.financial_info)
# if form.is_valid():
# financical_instance = form.save()
# request.user.contractor_financial_info = financical_instance
# request.user.save()
# messages.info(request, 'Данные успешно отредактированы')
# return redirect(reverse('users:contractor-financical', kwargs={'pk': request.user.pk}))
#
# return render(request, self.template_name, {'form': form})
if form.is_valid():
form.save()
messages.info(request, 'Финансовая информация успешно отредактирована')
redirect_to = request.POST.get('next')
return redirect(redirect_to)
else:
if form.errors:
messages.info(request, (
'<p>Произошла ошибка (form)</p>'
'<pre>{form}</pre>'
).format(form=pformat(form.errors)))
context.update({'form': form})
return render(request, self.template_name, context)
class ContractorFilterView(BaseMixin, View):
template_name = 'contractor_filter.html'
form_class = ContractorFilterForm
@ -376,121 +469,4 @@ class CustomerProfileReviewsView(BaseMixin, View):
return render(request, self.template_name, context)
class ContractorProfileEditView(CheckForUserMixin, View):
form_class = UserEditForm
template_name = 'contractor_profile_edit.html'
def get(self, request, *args, **kwargs):
instance = get_object_or_404(User, pk=request.user.pk)
form = self.form_class(instance=instance)
root = util.get_or_none(Specialization, name='_root')
nodes = root.get_descendants('lft')
return render(request, self.template_name, {'form': form, 'nodes': nodes})
def post(self, request, *args, **kwargs):
instance = request.user
form = self.form_class(request.POST, request.FILES, instance=instance)
if form.is_valid():
# import code; code.interact(local=dict(globals(), **locals()))
instance = form.save(commit=False)
instance.save()
messages.info(request, 'Данные успешно отредактированы')
return redirect(reverse('users:contractor-edit', kwargs={'pk': request.user.pk}))
return render(request, self.template_name, {'form': form})
class CustomerProfileEditView(CheckForUserMixin, View):
form_class = UserEditForm
template_name = 'customer_profile_edit.html'
def get(self, request, *args, **kwargs):
instance = get_object_or_404(User, pk=request.user.pk)
form = self.form_class(instance=instance)
nodes = Specialization.objects.all()
return render(request, self.template_name, {'form': form, 'nodes': nodes})
def post(self, request, *args, **kwargs):
instance = request.user
form = self.form_class(request.POST, request.FILES, instance=instance)
if form.is_valid():
# import code; code.interact(local=dict(globals(), **locals()))
form.save()
messages.info(request, 'Отправили post запрос')
return redirect(reverse('users:customer-profile-open-projects', kwargs={'pk': request.user.pk}))
return render(request, self.template_name, {'form': form})
class UserFinancialInfoEditView(CheckForUserMixin, View):
template_name = 'contractor_financical_info_edit.html'
form_class = UserFinancicalInfoForm
def get(self, request, *args, **kwargs):
instance = request.user.contractor_financial_info
# import code; code.interact(local=dict(globals(), **locals()))
form = self.form_class(instance=instance)
return render(request, self.template_name, {'form': form})
def post(self, request, *args, **kwargs):
instance = request.user.contractor_financial_info
form = self.form_class(request.POST, request.FILES, instance=instance)
if form.is_valid():
financical_instance = form.save()
request.user.contractor_financial_info = financical_instance
request.user.save()
messages.info(request, 'Данные успешно отредактированы')
return redirect(reverse('users:contractor-financical', kwargs={'pk': request.user.pk}))
return render(request, self.template_name, {'form': form})
# import code; code.interact(local=dict(globals(), **locals()))

Loading…
Cancel
Save