remotes/origin/setup
Mukhtar 10 years ago
commit 816da0b864
  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 next = self.kwargs.get('next') # Redirect back path
back = self.kwargs.get('back') # 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 next: c['next'] = next
if back: c['back'] = back if back: c['back'] = back

@ -1,4 +1,5 @@
var $specSelects = $('.-spec-select') // Common -------------------------------------------------
var specSelectOptions = { var specSelectOptions = {
language: 'ru', language: 'ru',
@ -44,6 +45,21 @@ var specSelectOptions = {
} }
} }
// Specialization select -----------------------------------
var $specSelects = $('.-spec-select')
$specSelects.select2(specSelectOptions) $specSelects.select2(specSelectOptions)
var chosenSpecId = $('#chosenSpecId').val() 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') 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> <form action="{% url 'projects:customer-project-edit' pk=pk %}" method="POST" enctype="multipart/form-data" novalidate>
{% csrf_token %} {% csrf_token %}
<input type="hidden" name="next" value="{% url 'projects:detail' pk=pk %}">
<div class="chatBlock new-rass new-rass2 disTab"> <div class="chatBlock new-rass new-rass2 disTab">
<div class="col-lg-9"> <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> <p class="type-work">Тип работы <span style="color: red">{{ form.work_type.errors.as_text }}</span></p>
<div class="mail-block type-work-inset"> <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"> <div class="inset-mb">
<label> <label>
<input <input
@ -72,7 +73,7 @@
<span></span> <span></span>
</label> </label>
<p>{{ name }}</p> <p>{{ text }}</p>
</div> </div>
{% endfor %} {% endfor %}
</div> </div>
@ -288,10 +289,6 @@
</div> </div>
</div> </div>
<input type="hidden" name="next" value="{% url 'projects:detail' pk=pk %}">
<div class="searchF1 polsF1 polsFF links-filter"> <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>

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

@ -20,7 +20,7 @@
<link rel='stylesheet' href='{% static "css/swiper.min.css" %}'> <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 "lib/jquery.fileupload/css/jquery.fileupload.css" %}'>
<link rel='stylesheet' href='{% static "js/magnific-popup.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/main.css" %}'>
<link rel='stylesheet' href='{% static "css/extra.css" %}'> <!-- Our additional 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.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>#}
<script src='{% static "my-libs.js" %}'></script> <script src='{% static "my-libs.js" %}'></script>

@ -1,44 +1,89 @@
from django import forms from django import forms
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, UserFinancialInfo from .models import User, UserFinancialInfo, GENDERS
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
class UserEditForm(ModelForm): class UserProfileEditForm(forms.ModelForm):
def __init__(self, *args, **kwargs): gender = forms.ChoiceField(
super().__init__(*args, **kwargs) choices=GENDERS,
widget=forms.RadioSelect,
if kwargs.get('instance'): )
if kwargs.get('instance').is_contractor():
self.fields['contractor_specializations'].queryset = kwargs.get('instance').contractor_specializations.all()
class Meta: class Meta:
model = User model = User
fields = ( fields = (
'first_name',
'last_name',
'patronym',
'location',
'date_of_birth',
'website',
'skype',
'avatar', 'avatar',
'contractor_specializations', 'contractor_specializations',
'cro', 'cro',
'phone', 'date_of_birth',
'first_name',
'gender', '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 = { widgets = {
'date_of_birth': forms.SelectDateWidget(years=range(1940, 2015)), 'residency': forms.RadioSelect(),
# 'contractor_specializations': forms.Select(), '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): class ContractorFilterForm(forms.Form):
@ -131,36 +176,4 @@ class CustomerProfileProjectRealtyForm(forms.Form):
) )
class UserFinancicalInfoForm(ModelForm): # import code; code.interact(local=dict(globals(), **locals()))
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(),
}

@ -23,19 +23,19 @@
<ul> <ul>
{% if contractor.pk == user.pk %} {% if contractor.pk == user.pk %}
<li class="icon_um1"> <li class="icon_um1">
<a href="{% url 'users:contractor-edit' pk=contractor.pk %}"> <a href="{% url 'users:user-profile-edit' pk=contractor.pk %}">
редактировать профиль редактировать профиль
</a> </a>
<span></span> <span></span>
</li> </li>
<li class="icon_um1"> <li class="icon_um1">
<a href="{% url 'users:contractor-edit' pk=contractor.pk %}"> <a href="{% url 'users:user-profile-edit' pk=contractor.pk %}">
редактировать профиль редактировать профиль
</a> </a>
<span></span> <span></span>
</li> </li>
<li class="icon_um1"> <li class="icon_um1">
<a href="{% url 'users:contractor-edit' pk=contractor.pk %}"> <a href="{% url 'users:user-profile-edit' pk=contractor.pk %}">
редактировать профиль редактировать профиль
</a> </a>
<span></span> <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="col-lg-3 divCol3">
<div class="avatar new-mar"> <div class="avatar new-mar">
<div class="avatarInset"> <div class="avatarInset">
<img src="{% static 'img/profile.jpg' %}" alt="profile-image"> <img src="{{ customer.avatar.url }}" alt="profile-image">
</div> </div>
</div> </div>
</div> </div>
@ -21,13 +21,13 @@
</div> </div>
<div class="col-lg-4 new-er"> <div class="col-lg-4 new-er">
{% ratings_widget pk %} {% ratings_widget customer.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=pk %}" class="new-red">редактировать профиль</a> <a href="{% url 'users:user-profile-edit' pk=pk %}" class="new-red">редактировать профиль</a>
</div> </div>
</div> </div>

@ -1,7 +1,5 @@
{% extends 'partials/base.html' %} {% extends 'partials/base.html' %}
{% load staticfiles %}
{% block content %} {% block content %}
{% include 'partials/header.html' %} {% include 'partials/header.html' %}
@ -16,6 +14,7 @@
<img src="img/profile.jpg" alt="profile-image"> <img src="img/profile.jpg" 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="upload"> <input type="file" name="upload">
@ -26,9 +25,9 @@
<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>
<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>
<div class="col-lg-4"> <div class="col-lg-4">
<p class="name-edit-p">Специализация:</p> <p class="name-edit-p">Специализация:</p>
@ -66,125 +65,147 @@
</div> </div>
</div> </div>
</div> </div>
<div class="buttonGP btn-edit disTab"> <div class="buttonGP btn-edit disTab">
<div class="btn-group valProject valProject2" role="group" aria-label="..."> <div class="btn-group valProject valProject2" role="group" aria-label="...">
<button type="button" class="btn btn-default">Общая информация</button> <a href="{% url 'users:user-profile-edit' pk=pk %}" class="btn btn-default">Общая информация</a>
<button type="button" class="btn btn-default">Финансовая информация</button> <a href="{% url 'users:user-financial-info-edit' pk=pk %}" class="btn btn-default active">Финансовая информация</a>
</div> </div>
</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"> <div class="col-lg-12 col12 new-filter">
{{ form.errors }}
<div class="filter clearfix"> <div class="filter clearfix">
<div class="titleF1 disTab"> <div class="titleF1 disTab">
<div class="col-lg-6">Имя, Фамилия, Отчество:</div> <div class="col-lg-6">Имя, Фамилия, Отчество:</div>
<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>
<div class="polsF1 disTab"> <div class="polsF1 disTab">
<div class="col-lg-6"> <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>
<div class="col-lg-3"> <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>
<div class="col-lg-3"> <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> </div>
<div class="titleF1 titleFFE disTab"> <div class="titleF1 titleFFE disTab">
<div class="col-lg-12">Резиденство:</div> <div class="col-lg-12">Резиденство:</div>
</div> </div>
<div class="searchF1 polsF1 polsFF radio-afer"> <div class="searchF1 polsF1 polsFF radio-afer">
{% for residency in form.residency %} {% for residency in form.residency %}
<div class="col-lg-3"> <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> <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"> <p class="text-afer">
{{ residency.choice_label }} {{ residency.choice_label }}
</p> </p>
</div> </div>
{% endfor %} {% endfor %}
</div> </div>
<div class="titleF1 titleFFE disTab"> <div class="titleF1 titleFFE disTab">
<div class="col-lg-12">Юридический статус:</div> <div class="col-lg-12">Юридический статус:</div>
</div> </div>
<div class="searchF1 polsF1 polsFF radio-afer new-doubt"> <div class="searchF1 polsF1 polsFF radio-afer new-doubt">
{% for lstatus in form.legal_status %} {% for lstatus in form.legal_status %}
<div class="col-lg-3"> <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> <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"> <p class="text-afer">
{{ lstatus.choice_label }} {{ lstatus.choice_label }}
</p> </p>
</div> </div>
{% endfor %} {% endfor %}
</div> </div>
<div class="titleF1 disTab"> <div class="titleF1 disTab">
<div class="col-lg-6">Серия и номер паспорта:</div> <div class="col-lg-6">Серия и номер паспорта:</div>
<div class="col-lg-6">Кем выдан:</div> <div class="col-lg-6">Кем выдан:</div>
</div> </div>
<div class="polsF1 disTab new-doubt"> <div class="polsF1 disTab new-doubt">
<div class="col-lg-3"> <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>
<div class="col-lg-3"> <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>
<div class="col-lg-6"> <div class="col-lg-6">
<input type="text" name="search" class="searchInp box-sizing">
</div> </div>
</div> </div>
<div class="titleF1 disTab"> <div class="titleF1 disTab">
<div class="col-lg-3">Код подразделения:</div> <div class="col-lg-3">Код подразделения:</div>
<div class="col-lg-9">Кем выдан:</div> <div class="col-lg-9">Кем выдан:</div>
</div> </div>
<div class="polsF1 disTab new-doubt"> <div class="polsF1 disTab new-doubt">
<div class="col-lg-3"> <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>
<div class="col-lg-9"> <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> </div>
<div class="titleF1 disTab"> <div class="titleF1 disTab">
<div class="col-lg-3">Дата выдачи:</div> <div class="col-lg-3">Дата выдачи:</div>
<div class="col-lg-9">Почтовый адрес:</div> <div class="col-lg-9">Почтовый адрес:</div>
</div> </div>
<div class="polsF1 disTab new-doubt"> <div class="polsF1 disTab new-doubt">
<div class="col-lg-3"> <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>
<div class="col-lg-9"> <div class="col-lg-9">
{# <input type="text" class="searchInp box-sizing" />#} <input type="text" class="searchInp box-sizing">
</div> </div>
</div> </div>
<div class="titleF1 disTab"> <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 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>
<div class="polsF1 disTab new-doubt"> <div class="polsF1 disTab new-doubt">
<div class="col-lg-3"> <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>
<div class="col-lg-3"> <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>
<div class="col-lg-3"> <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>
<div class="col-lg-3"> <div class="col-lg-3">
{{ form.passport_scan.value }} {{ form.passport_scan.value }}
<div class="upload2 up-l1 take-new"> <div class="upload2 up-l1 take-new">
<input type="file" name="{{ form.passport_scan.name }}"> <input type="file" name="{{ form.passport_scan.name }}">
<p>Прикрепить файл</p> <p>Прикрепить файл</p>
</div> </div>
</div> </div>
</div> </div>
<div class="searchF1 polsF1 polsFF links-filter"> <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> </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 django.contrib.auth.views import login, logout
from .views import ( from .views import (
# UserDetailView,
# UserInfoListView,
# UserView,
ContractorFilterView, ContractorFilterView,
UserFinancialInfoEditView,
ContractorOfficeDetailView, ContractorOfficeDetailView,
ContractorProfileDetailView, ContractorProfileDetailView,
ContractorProfileEditView,
CustomerProfileCurrentProjectsView, CustomerProfileCurrentProjectsView,
CustomerProfileEditView,
CustomerProfileOpenProjectsView, CustomerProfileOpenProjectsView,
CustomerProfileReviewsView, CustomerProfileReviewsView,
CustomerProfileTrashedProjectsView, CustomerProfileTrashedProjectsView,
send_mail_test, send_mail_test,
UserFinancialInfoEditView,
UserListView, UserListView,
UserProfileEditView,
) )
@ -38,7 +34,11 @@ urlpatterns = [
urls.url(r'^test/$', send_mail_test), urls.url(r'^test/$', send_mail_test),
# urls.url(r'^info$', UserInfoListView.as_view(), name='users_info_list'), # 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'^(?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+)/edit/$', ContractorProfileEditView.as_view(), name='contractor-profile-edit'),
urls.url(r'contractors/(?P<pk>\d+)/financialinfo/edit/$', UserFinancialInfoEditView.as_view(), name='contractor-financical'),
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.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.db.models import Q 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.shortcuts import render, get_object_or_404, redirect
from django.views.generic import ListView, DetailView, View, UpdateView, CreateView from django.views.generic import ListView, DetailView, View, UpdateView, CreateView
from pprint import pprint, pformat from pprint import pprint, pformat
@ -25,9 +25,9 @@ from work_sell.forms import WorkSellForm
from .forms import ( from .forms import (
ContractorFilterForm, ContractorFilterForm,
UserFinancicalInfoForm,
CustomerProfileProjectRealtyForm, CustomerProfileProjectRealtyForm,
UserEditForm, UserFinancialInfoEditForm,
UserProfileEditForm,
) )
@ -42,6 +42,99 @@ class UserListView(ListView):
context_object_name = 'users' 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): class ContractorFilterView(BaseMixin, View):
template_name = 'contractor_filter.html' template_name = 'contractor_filter.html'
form_class = ContractorFilterForm form_class = ContractorFilterForm
@ -376,121 +469,4 @@ class CustomerProfileReviewsView(BaseMixin, View):
return render(request, self.template_name, context) 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())) # import code; code.interact(local=dict(globals(), **locals()))

Loading…
Cancel
Save