PR-5 Финансовая информация доработка

В редактирование профиля пользователя добавлена "финансовая информация"
remotes/origin/HEAD
booblegum 9 years ago
parent b0d76f2a32
commit 2f6663677d
  1. 55
      assets/js/build/user_profile_edit.js
  2. 59
      assets/js/src/seeds/user_check_statuses.js
  3. 46
      users/forms.py
  4. 75
      users/migrations/0023_auto_20170105_1706.py
  5. 85
      users/migrations/0024_auto_20170105_1808.py
  6. 37
      users/migrations/0025_auto_20170109_1202.py
  7. 52
      users/models.py
  8. 4
      users/static/sass/user-profile-edit.sass
  9. 418
      users/templates/partials/tabs/tab-user-financial_info.html
  10. 92
      users/templates/partials/tabs/tab-user-info.html
  11. 154
      users/templates/user_profile_edit.html
  12. 2
      users/urls.py
  13. 148
      users/views.py

@ -159,20 +159,25 @@
value: true
});
function checkBoxBindingInit() {
var $residency_checkBoxes = $('input[name=residency]');
var $legal_status_checkBoxes = $('input[name=legal_status]');
/*
Скрываем/Показываем формы/части форм, взависимости от выбранных checkBox'ов
*/
var $residency_checkBoxes = $('input[name=fin_info-residency]');
var $legal_status_checkBoxes = $('input[name=fin_info-legal_status]');
var $legal_status_boxes = $legal_status_checkBoxes.closest('div');
var $fin_infos = $('.js-fin-info');
var shows = {
'russian_resident': ['individual', 'entity', 'employed'],
'non_russian_resident': ['individual', 'entity'],
'russian_stay_permit': ['individual']
};
// $legal_status_boxes.hide();
$residency_checkBoxes.first().attr("checked", true);
$legal_status_checkBoxes.first().attr("checked", true);
$fin_infos.hide();
$('.-russian_stay_permit-individual').hide();
$residency_checkBoxes.on("click", function (e) {
$legal_status_checkBoxes.first().attr("checked", true);
$legal_status_checkBoxes.first().trigger("click");
});
$residency_checkBoxes.on("change", function (e) {
$legal_status_boxes.hide();
var value = $(e.target).val();
var _iteratorNormalCompletion = true;
@ -183,7 +188,6 @@
for (var _iterator = shows[value][Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var legal_status = _step.value;
// console.log(legal_status);
$('input[value=' + legal_status + ']').closest('div').show();
}
} catch (err) {
@ -200,7 +204,44 @@
}
}
}
var fin_info_id = '';
fin_info_id += '-' + $residency_checkBoxes.filter(':checked').val();
fin_info_id += '-' + $legal_status_checkBoxes.filter(':checked').val();
if (fin_info_id == '-non_russian_resident-individual') {
$('.-non_russian_resident-individual').hide();
$('.-non_russian_resident-individual').children('input').val('');
} else {
$('.-non_russian_resident-individual').show();
}
if (fin_info_id == '-russian_stay_permit-individual') {
$('.-russian_stay_permit-individual').show();
} else {
$('.-russian_stay_permit-individual').hide();
$('.-russian_stay_permit-individual').children('input').val('');
}
});
$legal_status_checkBoxes.on("click", function (e) {
$fin_infos.each(function (ind, el) {
$(el).find('input').val('');
});
});
$legal_status_checkBoxes.on("change", function (e) {
$fin_infos.hide();
var fin_info_id = '';
fin_info_id += '-' + $residency_checkBoxes.filter(':checked').val();
fin_info_id += '-' + $legal_status_checkBoxes.filter(':checked').val();
if (fin_info_id != '-non_russian_resident-entity') {
fin_info_id = '-russian_resident';
fin_info_id += '-' + $legal_status_checkBoxes.filter(':checked').val();
}
$('#' + fin_info_id).show();
});
$residency_checkBoxes.first().trigger("change");
$legal_status_checkBoxes.first().trigger("change");
}
exports.checkBoxBindingInit = checkBoxBindingInit;

@ -1,25 +1,66 @@
function checkBoxBindingInit() {
let $residency_checkBoxes = $('input[name=residency]');
let $legal_status_checkBoxes = $('input[name=legal_status]');
/*
Скрываем/Показываем формы/части форм, взависимости от выбранных checkBox'ов
*/
let $residency_checkBoxes = $('input[name=fin_info-residency]');
let $legal_status_checkBoxes = $('input[name=fin_info-legal_status]');
let $legal_status_boxes = $legal_status_checkBoxes.closest('div');
const $fin_infos = $('.js-fin-info');
let shows = {
'russian_resident': ['individual', 'entity', 'employed'],
'non_russian_resident': ['individual', 'entity'],
'russian_stay_permit': ['individual'],
};
// $legal_status_boxes.hide();
$residency_checkBoxes.first().attr("checked", true);
$legal_status_checkBoxes.first().attr("checked", true);
$fin_infos.hide();
$('.-russian_stay_permit-individual').hide();
$residency_checkBoxes.on("click", function (e) {
$legal_status_checkBoxes.first().attr("checked", true);
$legal_status_checkBoxes.first().trigger("click");
});
$residency_checkBoxes.on("change", function (e) {
$legal_status_boxes.hide();
let value = $(e.target).val();
for (let legal_status of shows[value]){
// console.log(legal_status);
for (let legal_status of shows[value]) {
$(`input[value=${legal_status}]`).closest('div').show();
}
})
let fin_info_id = '';
fin_info_id += '-' + $residency_checkBoxes.filter(':checked').val();
fin_info_id += '-' + $legal_status_checkBoxes.filter(':checked').val();
if (fin_info_id == '-non_russian_resident-individual') {
$('.-non_russian_resident-individual').hide();
$('.-non_russian_resident-individual').children('input').val('');
} else {
$('.-non_russian_resident-individual').show()
}
if (fin_info_id == '-russian_stay_permit-individual') {
$('.-russian_stay_permit-individual').show();
} else {
$('.-russian_stay_permit-individual').hide();
$('.-russian_stay_permit-individual').children('input').val('');
}
});
$legal_status_checkBoxes.on("click", function (e) {
$fin_infos.each(function (ind, el) {
$(el).find('input').val('');
});
});
$legal_status_checkBoxes.on("change", function (e) {
$fin_infos.hide();
let fin_info_id = '';
fin_info_id += '-' + $residency_checkBoxes.filter(':checked').val();
fin_info_id += '-' + $legal_status_checkBoxes.filter(':checked').val();
if (fin_info_id != '-non_russian_resident-entity') {
fin_info_id = '-russian_resident';
fin_info_id += '-' + $legal_status_checkBoxes.filter(':checked').val();
}
$(`#${fin_info_id}`).show();
});
$residency_checkBoxes.first().trigger("change");
$legal_status_checkBoxes.first().trigger("change");
}
export {checkBoxBindingInit}

@ -202,36 +202,56 @@ class UserFinancialInfoEditForm(forms.ModelForm):
model = UserFinancialInfo
fields = (
'address',
'credit_card_number',
'date_of_birth',
'residency',
'legal_status',
'fio',
'date_of_birth',
'phone',
'postal_address',
'registration_address',
'credit_card_number',
'inn',
'legal_status',
'passport_issue_date',
'passport_issued_by',
'passport_number',
'passport_scan',
'passport_series',
'phone',
'residency',
'subdivision_code',
'yandex_money',
'web_money',
# Юридические данные
'correspondent_account',
'bank_bic',
'bank_inn',
'checking_account',
'bank_name',
'authorized_bank_name',
'ppc',
'psrn',
'organization_name',
'organization_registered_address',
'organization_postal_address',
'organization_reg_number'
)
widgets = {
# 'date_of_birth': forms.TextInput(attrs={'class': 'datepicker'}),
# 'passport_issue_date': forms.TextInput(attrs={'class': 'datepicker'}),
'legal_status': forms.RadioSelect(),
'residency': forms.RadioSelect(),
'date_of_birth': forms.DateInput(attrs={'class': 'datepicker box-sizing simple-input'}),
'passport_issue_date': forms.DateInput(attrs={'class': 'datepicker box-sizing simple-input'}),
}
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'].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

@ -0,0 +1,75 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2017-01-05 14:06
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('users', '0022_user_organization_name'),
]
operations = [
migrations.AddField(
model_name='userfinancialinfo',
name='postal_address',
field=models.CharField(blank=True, max_length=255, verbose_name='Почтовый адрес'),
),
migrations.AddField(
model_name='userfinancialinfo',
name='registration_address',
field=models.CharField(blank=True, max_length=255, verbose_name='Адрес регистрации'),
),
migrations.AddField(
model_name='userfinancialinfo',
name='web_money',
field=models.CharField(blank=True, max_length=50),
),
migrations.AlterField(
model_name='userfinancialinfo',
name='credit_card_number',
field=models.CharField(blank=True, max_length=50),
),
migrations.AlterField(
model_name='userfinancialinfo',
name='fio',
field=models.CharField(blank=True, max_length=255),
),
migrations.AlterField(
model_name='userfinancialinfo',
name='inn',
field=models.CharField(blank=True, max_length=100),
),
migrations.AlterField(
model_name='userfinancialinfo',
name='legal_status',
field=models.CharField(choices=[('individual', 'Физическое лицо'), ('entity', 'Юридическое лицо'), ('employed', 'Частный предприниматель')], max_length=30),
),
migrations.AlterField(
model_name='userfinancialinfo',
name='passport_issued_by',
field=models.CharField(max_length=255, verbose_name='Кем выдан'),
),
migrations.AlterField(
model_name='userfinancialinfo',
name='phone',
field=models.CharField(blank=True, max_length=30),
),
migrations.AlterField(
model_name='userfinancialinfo',
name='residency',
field=models.CharField(choices=[('russian_resident', 'Резидент РФ'), ('non_russian_resident', 'Нерезидент РФ'), ('russian_stay_permit', 'Вид на жительство')], max_length=50),
),
migrations.AlterField(
model_name='userfinancialinfo',
name='subdivision_code',
field=models.CharField(max_length=10, verbose_name='Код подразделения'),
),
migrations.AlterField(
model_name='userfinancialinfo',
name='yandex_money',
field=models.CharField(blank=True, max_length=50),
),
]

@ -0,0 +1,85 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2017-01-05 15:08
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('users', '0023_auto_20170105_1706'),
]
operations = [
migrations.AddField(
model_name='userfinancialinfo',
name='bank_bic',
field=models.CharField(default='', max_length=32, verbose_name='БИК банка'),
preserve_default=False,
),
migrations.AddField(
model_name='userfinancialinfo',
name='bank_inn',
field=models.CharField(default='', max_length=32, verbose_name='ИНН банка'),
preserve_default=False,
),
migrations.AddField(
model_name='userfinancialinfo',
name='bank_name',
field=models.CharField(default='', max_length=32, verbose_name='Название банка'),
preserve_default=False,
),
migrations.AddField(
model_name='userfinancialinfo',
name='checking_account',
field=models.CharField(default='', max_length=64, verbose_name='Расчетный счет'),
preserve_default=False,
),
migrations.AddField(
model_name='userfinancialinfo',
name='correspondent_account',
field=models.CharField(default='', max_length=32, verbose_name='Корреспондентский счет'),
preserve_default=False,
),
migrations.AddField(
model_name='userfinancialinfo',
name='organization_name',
field=models.CharField(default='', max_length=32, verbose_name='Название организации'),
preserve_default=False,
),
migrations.AddField(
model_name='userfinancialinfo',
name='organization_postal_address',
field=models.CharField(default='', max_length=255, verbose_name='Почтовый адрес'),
preserve_default=False,
),
migrations.AddField(
model_name='userfinancialinfo',
name='organization_registered_address',
field=models.CharField(default='', max_length=255, verbose_name='Юридический адрес'),
preserve_default=False,
),
migrations.AddField(
model_name='userfinancialinfo',
name='ppc',
field=models.CharField(default='', max_length=32, verbose_name='КПП'),
preserve_default=False,
),
migrations.AddField(
model_name='userfinancialinfo',
name='psrn',
field=models.CharField(default='', max_length=32, verbose_name='ОГРН'),
preserve_default=False,
),
migrations.AlterField(
model_name='userfinancialinfo',
name='date_of_birth',
field=models.DateField(blank=True, null=True),
),
migrations.AlterField(
model_name='userfinancialinfo',
name='passport_issue_date',
field=models.DateField(blank=True, null=True),
),
]

@ -0,0 +1,37 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2017-01-09 09:02
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('users', '0024_auto_20170105_1808'),
]
operations = [
migrations.AddField(
model_name='userfinancialinfo',
name='authorized_bank_name',
field=models.CharField(default='', max_length=32, verbose_name='Название уполномоченного банка в РФ'),
preserve_default=False,
),
migrations.AddField(
model_name='userfinancialinfo',
name='organization_reg_number',
field=models.CharField(default='', max_length=64, verbose_name='Регистрационный номер в налоговом органе'),
preserve_default=False,
),
migrations.AlterField(
model_name='userfinancialinfo',
name='inn',
field=models.CharField(blank=True, max_length=100, verbose_name='ИНН'),
),
migrations.AlterField(
model_name='userfinancialinfo',
name='legal_status',
field=models.CharField(choices=[('individual', 'Физическое лицо'), ('entity', 'Юридическое лицо'), ('employed', 'Индивидуальный предприниматель')], max_length=30),
),
]

@ -62,24 +62,48 @@ class UserFinancialInfo(models.Model):
LEGAL_STATUSES = (
('individual', 'Физическое лицо'),
('entity', 'Юридическое лицо'),
('employed', 'Частный предприниматель'),
('employed', 'Индивидуальный предприниматель'),
)
address = models.CharField(max_length=1000)
credit_card_number = models.CharField(max_length=50)
date_of_birth = models.DateField()
fio = models.CharField(max_length=255)
inn = models.CharField(max_length=100)
residency = models.CharField(max_length=50, choices=RESIDENCIES)
legal_status = models.CharField(max_length=30, choices=LEGAL_STATUSES)
passport_issue_date = models.DateField()
passport_issued_by = models.CharField(max_length=255)
passport_number = models.CharField(max_length=10)
fio = models.CharField(max_length=255, blank=True)
date_of_birth = models.DateField(null=True, blank=True)
phone = models.CharField(max_length=30, blank=True)
# @deprecated
address = models.CharField(max_length=1000, blank=True)
postal_address = models.CharField(max_length=255, verbose_name='Почтовый адрес', blank=True)
registration_address = models.CharField(max_length=255, verbose_name='Адрес регистрации', blank=True)
credit_card_number = models.CharField(max_length=50, blank=True)
inn = models.CharField(max_length=100, blank=True, verbose_name='ИНН')
passport_issue_date = models.DateField(null=True, blank=True)
passport_issued_by = models.CharField(max_length=255, verbose_name="Кем выдан", blank=True)
passport_number = models.CharField(max_length=10, blank=True)
passport_scan = models.ImageField(upload_to='users/contractors/')
passport_series = models.CharField(max_length=6)
phone = models.CharField(max_length=30)
residency = models.CharField(max_length=50, choices=RESIDENCIES)
subdivision_code = models.CharField(max_length=10)
yandex_money = models.CharField(max_length=50)
passport_series = models.CharField(max_length=6, blank=True)
subdivision_code = models.CharField(max_length=10, verbose_name='Код подразделения', blank=True)
yandex_money = models.CharField(max_length=50, blank=True)
web_money = models.CharField(max_length=50, blank=True)
# Юридические данные
correspondent_account = models.CharField(max_length=32, verbose_name='Корреспондентский счет', blank=True)
bank_bic = models.CharField(max_length=32, verbose_name='БИК банка', blank=True)
bank_inn = models.CharField(max_length=32, verbose_name='ИНН банка', blank=True)
checking_account = models.CharField(max_length=64, verbose_name='Расчетный счет', blank=True)
bank_name = models.CharField(max_length=32, verbose_name='Название банка', blank=True)
authorized_bank_name = models.CharField(max_length=32, verbose_name='Название уполномоченного банка в РФ', blank=True)
ppc = models.CharField(max_length=32, verbose_name='КПП', blank=True)
psrn = models.CharField(max_length=32, verbose_name='ОГРН', blank=True)
organization_name = models.CharField(max_length=32, verbose_name="Название организации", blank=True)
organization_registered_address = models.CharField(max_length=255, verbose_name="Юридический адрес", blank=True)
organization_postal_address = models.CharField(max_length=255, verbose_name="Почтовый адрес", blank=True)
organization_reg_number = models.CharField(max_length=64, verbose_name="Регистрационный номер в налоговом органе", blank=True)
def __str__(self):
return self.fio

@ -101,8 +101,10 @@
.info, .financial_info
background-color: #F2F2F2
padding: 50px 40px
padding: 30px 40px 50px
margin-top: 20px
.header
margin-top: 30px
.btn-simple
border-radius: 40px

@ -0,0 +1,418 @@
<div class="row financial_info">
<div class="row">
<div class="col-lg-6">
<div class="header">Имя, Фамилия, Отчество</div>
<input name="{{ fin_info_form.fio.html_name }}" class="simple-input"
placeholder="Иванов Иван Иванович"
value="{{ fin_info_form.fio.value }}">
</div>
<div class="col-lg-3">
<div class="header"> Дата рождения</div>
{{ fin_info_form.date_of_birth }}
</div>
<div class="col-lg-3">
<div class="header">Телефон</div>
<input name="{{ fin_info_form.phone.html_name }}" class="simple-input phone"
placeholder="+7(909)999 00 00"
value="{{ fin_info_form.phone.value }}"
type="tel">
</div>
</div>
<div class="header">Резиденство</div>
<div class="row">
{% for residence in RESIDENCIES %}
<div class="{% if forloop.last %}col-lg-4{% else %}col-lg-3{% endif %}">
<label class="mod-align-center fin_statuses">
<input name="{{ fin_info_form.residency.html_name }}" class="custom-radio" type="radio"
{% if residence.0 == fin_info_form.residency.value %}checked {% endif %}
value="{{ residence.0 }}">
&nbsp; {{ residence.1 }}
</label>
</div>
{% endfor %}
</div>
<div class="header">Юридический статус</div>
<div class="row">
{% for legal_status in LEGAL_STATUSES %}
<div class="{% if forloop.last %}col-lg-4{% else %}col-lg-3{% endif %}">
<label class="mod-align-center fin_statuses">
<input name="{{ fin_info_form.legal_status.html_name }}" class="custom-radio" type="radio"
{% if legal_status.0 == fin_info_form.legal_status.value %}checked {% endif %}
value="{{ legal_status.0 }}">
&nbsp; {{ legal_status.1 }}
</label>
</div>
{% endfor %}
</div>
<div class="row">
<div class="col-lg-12">
<div class="separator">
<div class="border"></div>
</div>
</div>
</div>
<div class="js-fin-info" id="-russian_resident-individual" >
<div class="row">
<div class="col-lg-3">
<div class="header">Серия паспорта</div>
<input name="{{ fin_info_form.passport_series.html_name }}" class="simple-input passport_series"
placeholder="1234"
value="{{ fin_info_form.passport_series.value }}">
</div>
<div class="col-lg-3">
<div class="header">Номер паспорта</div>
<input name="{{ fin_info_form.passport_number.html_name }}" class="simple-input passport_number"
placeholder="567890"
value="{{ fin_info_form.passport_number.value }}">
</div>
<div class="col-lg-3 -non_russian_resident-individual">
<div class="header">Код подразделения</div>
<input name="{{ fin_info_form.subdivision_code.html_name }}" class="simple-input subdivision_code"
placeholder="321-645"
value="{{ fin_info_form.subdivision_code.value }}">
</div>
<div class="col-lg-3">
<div class="header">Дата выдачи</div>
{{ fin_info_form.passport_issue_date }}
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="header">Кем выдан</div>
<input name="{{ fin_info_form.passport_issued_by.html_name }}" class="simple-input"
placeholder="УВД Центрального района Московской области"
value="{{ fin_info_form.passport_issued_by.value }}">
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="header">Почтовый адрес</div>
<input name="{{ fin_info_form.postal_address.html_name }}" class="simple-input"
placeholder="143500, Россия, Московская обл. Истринский р-н, д.Красновидово ул.Полевая д.65"
value="{{ fin_info_form.postal_address.value }}">
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="header">Адрес регистрации</div>
<input name="{{ fin_info_form.registration_address.html_name }}" class="simple-input"
placeholder="143500, Россия, Московская обл. Истринский р-н, д.Красновидово ул.Полевая д.65"
value="{{ fin_info_form.registration_address.value }}">
</div>
</div>
<div class="row -russian_stay_permit-individual">
<div class="col-lg-12">
<div class="header">Адрес в стране, гражданином которой является иностранное физическое лицо</div>
<input name="{{ fin_info_form.country_address.html_name }}" class="simple-input"
placeholder=""
value="{{ fin_info_form.country_address.value }}">
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="separator">
<div class="border"></div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-3">
<div class="header">ИНН</div>
<input name="{{ fin_info_form.inn.html_name }}" class="simple-input inn"
placeholder="12345678912"
value="{{ fin_info_form.inn.value }}">
</div>
<div class="col-lg-3">
<div class="header">Номер карты</div>
<input name="{{ fin_info_form.credit_card_number.html_name }}" class="simple-input credit_card_number"
placeholder="4444-4444-4444-4448-444"
value="{{ fin_info_form.credit_card_number.value }}">
</div>
<div class="col-lg-3">
<div class="header">Яндекс.Деньги</div>
<input name="{{ fin_info_form.yandex_money.html_name }}" class="simple-input yandex_money"
placeholder="410012310862090"
value="{{ fin_info_form.yandex_money.value }}">
</div>
<div class="col-lg-3">
<div class="header">WebMoney</div>
<input name="{{ fin_info_form.web_money.html_name }}" class="simple-input yandex_money"
placeholder="410012310862090"
value="{{ fin_info_form.web_money.value }}">
</div>
</div>
</div>
<div class="js-fin-info" id="-russian_resident-entity" >
<div class="row">
<div class="col-lg-6">
<div class="header">{{ fin_info_form.correspondent_account.label }}</div>
<input name="{{ fin_info_form.correspondent_account.html_name }}" class="simple-input correspondent_account"
placeholder="30101810900000000181"
value="{{ fin_info_form.correspondent_account.value }}">
</div>
<div class="col-lg-3">
<div class="header">{{ fin_info_form.bank_bic.label }}</div>
<input name="{{ fin_info_form.bank_bic.html_name }}" class="simple-input bank_bic"
placeholder="044567899"
value="{{ fin_info_form.bank_bic.value }}">
</div>
<div class="col-lg-3">
<div class="header">{{ fin_info_form.bank_inn.label }}</div>
<input name="{{ fin_info_form.bank_inn.html_name }}" class="simple-input inn"
placeholder="1123456789"
value="{{ fin_info_form.bank_inn.value }}">
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="header">{{ fin_info_form.checking_account.label }}</div>
<input name="{{ fin_info_form.checking_account.html_name }}" class="simple-input checking_account"
placeholder="11234567891234567890"
value="{{ fin_info_form.checking_account.value }}">
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="header">{{ fin_info_form.bank_name.label }}</div>
<input name="{{ fin_info_form.bank_name.html_name }}" class="simple-input"
placeholder="'Возрождение'(ПАО) г.Москва"
value="{{ fin_info_form.bank_name.value }}">
</div>
</div>
<div class="row">
<div class="col-lg-6">
<div class="header">{{ fin_info_form.ppc.label }}</div>
<input name="{{ fin_info_form.ppc.html_name }}" class="simple-input"
placeholder="501701001"
value="{{ fin_info_form.ppc.value }}">
</div>
<div class="col-lg-6">
<div class="header">{{ fin_info_form.psrn.label }}</div>
<input name="{{ fin_info_form.psrn.html_name }}" class="simple-input"
placeholder="1065017025226"
value="{{ fin_info_form.psrn.value }}">
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="separator">
<div class="border"></div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="header">{{ fin_info_form.organization_name.label }}</div>
<input name="{{ fin_info_form.organization_name.html_name }}" class="simple-input"
placeholder="ООО Архитектура Проект Сервис"
value="{{ fin_info_form.organization_name.value }}">
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="header">{{ fin_info_form.organization_registered_address.label }}</div>
<input name="{{ fin_info_form.organization_registered_address.html_name }}" class="simple-input"
placeholder="143500, РФ, Московская область, Истринский район, г. Истра, ул.Адасько,д.9, оф.9"
value="{{ fin_info_form.organization_registered_address.value }}">
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="header">{{ fin_info_form.organization_postal_address.label }}</div>
<input name="{{ fin_info_form.organization_postal_address.html_name }}" class="simple-input"
placeholder="143500, РФ, Московская область, Истринский район, г. Истра, ул.Адасько,д.9, оф.9"
value="{{ fin_info_form.organization_postal_address.value }}">
</div>
</div>
</div>
<div class="js-fin-info" id="-non_russian_resident-entity" >
<div class="row">
<div class="col-lg-6">
<div class="header">Корр.счет вашего банка в уполномоченном банке</div>
<input name="{{ fin_info_form.correspondent_account.html_name }}" class="simple-input correspondent_account"
placeholder="30101810900000000181"
value="{{ fin_info_form.correspondent_account.value }}">
</div>
<div class="col-lg-3">
<div class="header">БИК уполномоченного банка</div>
<input name="{{ fin_info_form.bank_bic.html_name }}" class="simple-input bank_bic"
placeholder="044567899"
value="{{ fin_info_form.bank_bic.value }}">
</div>
<div class="col-lg-3">
<div class="header">ИНН уполномоченного банка</div>
<input name="{{ fin_info_form.bank_inn.html_name }}" class="simple-input inn"
placeholder="1123456789"
value="{{ fin_info_form.bank_inn.value }}">
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="header">{{ fin_info_form.checking_account.label }} (IBAN)</div>
<input name="{{ fin_info_form.checking_account.html_name }}" class="simple-input checking_account"
placeholder="11234567891234567890"
value="{{ fin_info_form.checking_account.value }}">
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="header">Название вашего банка</div>
<input name="{{ fin_info_form.bank_name.html_name }}" class="simple-input"
placeholder="'Возрождение'(ПАО) г.Москва"
value="{{ fin_info_form.bank_name.value }}">
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="header">Название уполномоченного банка в РФ</div>
<input name="{{ fin_info_form.authorized_bank_name.html_name }}" class="simple-input"
placeholder="'Возрождение'(ПАО) г.Москва"
value="{{ fin_info_form.authorized_bank_name.value }}">
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="separator">
<div class="border"></div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="header">{{ fin_info_form.organization_name.label }}</div>
<input name="{{ fin_info_form.organization_name.html_name }}" class="simple-input"
placeholder="ООО Архитектура Проект Сервис"
value="{{ fin_info_form.organization_name.value }}">
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="header">{{ fin_info_form.organization_registered_address.label }}</div>
<input name="{{ fin_info_form.organization_registered_address.html_name }}" class="simple-input"
placeholder="143500, РФ, Московская область, Истринский район, г. Истра, ул.Адасько,д.9, оф.9"
value="{{ fin_info_form.organization_registered_address.value }}">
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="header">{{ fin_info_form.organization_postal_address.label }}</div>
<input name="{{ fin_info_form.organization_postal_address.html_name }}" class="simple-input"
placeholder="143500, РФ, Московская область, Истринский район, г. Истра, ул.Адасько,д.9, оф.9"
value="{{ fin_info_form.organization_postal_address.value }}">
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="header">{{ fin_info_form.organization_reg_number.label }}</div>
<input name="{{ fin_info_form.organization_reg_number.html_name }}" class="simple-input"
placeholder=""
value="{{ fin_info_form.organization_reg_number.value }}">
</div>
</div>
</div>
<div class="js-fin-info" id="-russian_resident-employed">
<div class="row">
<div class="col-lg-6">
<div class="header">{{ fin_info_form.correspondent_account.label }}</div>
<input name="{{ fin_info_form.correspondent_account.html_name }}" class="simple-input correspondent_account"
placeholder="30101810900000000181"
value="{{ fin_info_form.correspondent_account.value }}">
</div>
<div class="col-lg-6">
<div class="header">{{ fin_info_form.inn.label }}</div>
<input name="{{ fin_info_form.inn.html_name }}" class="simple-input inn"
placeholder="5017064770 Свидетельство 50№010352102 jn 19.06.2006г."
value="{{ fin_info_form.inn.value }}">
</div>
</div>
<div class="row">
<div class="col-lg-6">
<div class="header">{{ fin_info_form.checking_account.label }}</div>
<input name="{{ fin_info_form.checking_account.html_name }}" class="simple-input checking_account"
placeholder="11234567891234567890"
value="{{ fin_info_form.checking_account.value }}">
</div>
<div class="col-lg-6">
<div class="header">Номер карты Р/С</div>
<input name="{{ fin_info_form.credit_card_number.html_name }}" class="simple-input credit_card_number"
placeholder="4444-4444-4444-4448-444"
value="{{ fin_info_form.credit_card_number.value }}">
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="header">{{ fin_info_form.bank_name.label }}</div>
<input name="{{ fin_info_form.bank_name.html_name }}" class="simple-input"
placeholder="'Возрождение'(ПАО) г.Москва"
value="{{ fin_info_form.bank_name.value }}">
</div>
</div>
<div class="row">
<div class="col-lg-6">
<div class="header">{{ fin_info_form.bank_bic.label }}</div>
<input name="{{ fin_info_form.bank_bic.html_name }}" class="simple-input bank_bic"
placeholder="501701001"
value="{{ fin_info_form.bank_bic.value }}">
</div>
<div class="col-lg-6">
<div class="header">{{ fin_info_form.psrn.label }}ИП</div>
<input name="{{ fin_info_form.psrn.html_name }}" class="simple-input"
placeholder="106501702522678"
value="{{ fin_info_form.psrn.value }}">
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="separator">
<div class="border"></div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="header">{{ fin_info_form.organization_name.label }}</div>
<input name="{{ fin_info_form.organization_name.html_name }}" class="simple-input"
placeholder="ООО Архитектура Проект Сервис"
value="{{ fin_info_form.organization_name.value }}">
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="header">{{ fin_info_form.organization_registered_address.label }}</div>
<input name="{{ fin_info_form.organization_registered_address.html_name }}" class="simple-input"
placeholder="143500, РФ, Московская область, Истринский район, г. Истра, ул.Адасько,д.9, оф.9"
value="{{ fin_info_form.organization_registered_address.value }}">
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="header">{{ fin_info_form.organization_postal_address.label }}</div>
<input name="{{ fin_info_form.organization_postal_address.html_name }}" class="simple-input"
placeholder="143500, РФ, Московская область, Истринский район, г. Истра, ул.Адасько,д.9, оф.9"
value="{{ fin_info_form.organization_postal_address.value }}">
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12" style="text-align: right">
<div style="display: block;" class="header">&nbsp;</div>
<input type="submit" class="btn btn-simple" value="СОХРАНИТЬ">
</div>
</div>
</div> <!-- financial_info -->
<script>
window.onload = function () {
$('.passport_series').mask('0000');
$('.passport_number').mask('000000');
$('.subdivision_code').mask('000-000');
$('.inn').mask('0#');
$('.yandex_money').mask('0#');
$('.web_money').mask('0#');
$('.bank_bic').mask('0#');
$('.correspondent_account').mask('0#');
$('.checking_account').mask('0#');
$('.credit_card_number').mask('0000-0000-0000-0000-0000');
$('.datepicker').mask('00.00.0000');
}
</script>

@ -0,0 +1,92 @@
<div class="row info">
<div class="col-lg-3">
<div class="header"> Дата рождения</div>
<div class="birth_edit_dat">
{{ form.date_of_birth }}
</div>
</div>
<div class="col-lg-3">
<div style="position: relative" class="select-box-container custom-select"
id="gender">
<div class="select-box-header">
<div class="header">Пол</div>
</div>
<input class="simple-select" placeholder="Выберите"
value="{{ form.get_gender_display }}" readonly>
<input type="hidden" name="{{ form.gender.html_name }}"
value="{{ form.gender.value }}">
<div class="select-box-options" style="width: 100%; display: none">
<div style="min-width: inherit" class="box-wrapper">
<ul>
{% for id, text in form.gender.field.choices %}
<li data-id="{{ id }}">{{ text }}</li>
{% endfor %}
</ul>
</div>
</div>
</div>
</div>
<div class="col-lg-3">
{% if request.user.is_contractor %}
<div style="position: relative"
class="select-box-container custom-select"
id="gender">
<div class="select-box-header">
<div class="header">Статус</div>
</div>
<input class="simple-select" placeholder="Выберите"
value="{{ form.get_status_display }}" readonly>
<input type="hidden" name="{{ form.contractor_status.html_name }}"
value="{{ form.contractor_status.value }}">
<div class="select-box-options" style="width: 100%; display: none">
<div style="min-width: inherit" class="box-wrapper">
<ul>
{% for id, text in form.contractor_status.field.choices %}
<li data-id="{{ id }}">{{ text }}</li>
{% endfor %}
</ul>
</div>
</div>
</div>
{% else %}
<div class="header">{{ form.organization_name.label }}</div>
<input name="organization_name" class="simple-input"
placeholder="Название организации"
{# autocomplete="False"#}
value="{{ form.organization_name.value }}">
{% endif %}
</div>
<div class="col-lg-3">
<div class="header">Skype</div>
<input name="{{ form.skype.html_name }}" class="simple-input"
placeholder="skype id"
value="{{ form.skype.value }}">
</div>
<div class="clearfix visible-lg"></div>
<div class="col-lg-3">
<div class="header">Сайт</div>
<input name="{{ form.website.html_name }}" class="simple-input"
placeholder="example.com"
value="{{ form.website.value }}">
</div>
<div class="col-lg-3">
<div class="header">Телефон</div>
<input name="{{ form.phone.html_name }}" class="simple-input phone"
placeholder="+7(909)999 00 00"
value="{{ form.phone.value }}"
type="tel">
</div>
<div class="col-lg-3">
<div class="header">Второй телефон</div>
<input name="{{ form.phone2.html_name }}" class="simple-input phone"
placeholder="+7(909)999 00 00"
value="{{ form.phone2.value }}"
type="tel">
</div>
<div class="col-lg-3" style="text-align: center">
<div style="display: block;" class="header">&nbsp;</div>
<input type="submit" class="btn btn-simple" value="СОХРАНИТЬ">
</div>
</div>

@ -112,7 +112,7 @@
<div class="col-lg-8">
<div class="selected-container horizontal vertical-child no-margin"
id="selected-location">
<div class="header">&nbsp;</div>
<div class="header" style="display: block">&nbsp;</div>
<input type="hidden" name="location"
value="{{ form.location.value }}">
</div>
@ -213,158 +213,23 @@
<div class="btn-group toggle" role="group" aria-label="...">
<a data-toggle="tab" href="#info"
role="button"
class="btn btn-default tab-inserted active">Общая информация</a>
class="btn btn-default tab-inserted active">
Общая информация
</a>
<a data-toggle="tab" href="#financial_info"
class="btn btn-default tab-inserted" role="button">Финансовая
информация</a>
class="btn btn-default tab-inserted" role="button">
Финансоваяинформация
</a>
</div>
</div>
</div>
</div>
<div class="tab-content">
<div id="info" class="tab-pane fade in active">
<div class="row info">
<div class="col-lg-3">
<div class="header"> Дата рождения</div>
<div class="birth_edit_dat">
{{ form.date_of_birth }}
</div>
</div>
<div class="col-lg-3">
<div style="position: relative" class="select-box-container custom-select"
id="gender">
<div class="select-box-header">
<div class="header">Пол</div>
</div>
<input class="simple-select" placeholder="Выберите"
value="{{ form.get_gender_display }}" readonly>
<input type="hidden" name="{{ form.gender.html_name }}"
value="{{ form.gender.value }}">
<div class="select-box-options" style="width: 100%; display: none">
<div style="min-width: inherit" class="box-wrapper">
<ul>
{% for id, text in form.gender.field.choices %}
<li data-id="{{ id }}">{{ text }}</li>
{% endfor %}
</ul>
</div>
</div>
</div>
</div>
<div class="col-lg-3">
{% if request.user.is_contractor %}
<div style="position: relative"
class="select-box-container custom-select"
id="gender">
<div class="select-box-header">
<div class="header">Статус</div>
</div>
<input class="simple-select" placeholder="Выберите"
value="{{ form.get_status_display }}" readonly>
<input type="hidden" name="{{ form.contractor_status.html_name }}"
value="{{ form.contractor_status.value }}">
<div class="select-box-options" style="width: 100%; display: none">
<div style="min-width: inherit" class="box-wrapper">
<ul>
{% for id, text in form.contractor_status.field.choices %}
<li data-id="{{ id }}">{{ text }}</li>
{% endfor %}
</ul>
</div>
</div>
</div>
{% else %}
<div class="header">{{ form.organization_name.label }}</div>
<input name="organization_name" class="simple-input"
placeholder="Название организации"
{# autocomplete="False"#}
value="{{ form.organization_name.value }}">
{% endif %}
</div>
<div class="col-lg-3">
<div class="header">Skype</div>
<input name="{{ form.skype.html_name }}" class="simple-input"
placeholder="skype id"
value="{{ form.skype.value }}">
</div>
<div class="clearfix visible-lg"></div>
<div class="col-lg-3 vertical-child">
<div class="header">Сайт</div>
<input name="{{ form.website.html_name }}" class="simple-input"
placeholder="example.com"
value="{{ form.website.value }}">
</div>
<div class="col-lg-3 vertical-child">
<div class="header">Телефон</div>
<input name="{{ form.phone.html_name }}" class="simple-input phone"
placeholder="+7(909)999 00 00"
value="{{ form.phone.value }}"
type="tel">
</div>
<div class="col-lg-3 vertical-child">
<div class="header">Второй телефон</div>
<input name="{{ form.phone2.html_name }}" class="simple-input phone"
placeholder="+7(909)999 00 00"
value="{{ form.phone2.value }}"
type="tel">
</div>
<div class="col-lg-3 vertical-child" style="text-align: center">
<div style="display: block;" class="header">&nbsp;</div>
<input type="submit" class="btn btn-simple" value="СОХРАНИТЬ">
</div>
</div>
{% include 'partials/tabs/tab-user-info.html' %}
</div>
<div id="financial_info" class="tab-pane fade">
<div class="row financial_info">
<div class="row">
<div class="col-lg-6">
<div class="header">Имя, Фамилия, Отчество</div>
<input name="fio" class="simple-input"
placeholder="Иванов Иван Иванович"
value="{{ fin_info_form.fio.value }}">
</div>
<div class="col-lg-3">
<div class="header"> Дата рождения</div>
{# <div class="birth_edit_dat">#}
{{ fin_info_form.date_of_birth }}
{# </div>#}
</div>
<div class="col-lg-3 vertical-child">
<div class="header">Телефон</div>
<input name="{{ form.phone.html_name }}" class="simple-input phone"
placeholder="+7(909)999 00 00"
value="{{ fin_info_form.phone.value }}"
type="tel">
</div>
</div>
<div class="header">Резиденство</div>
<div class="row">
{% for residence in RESIDENCIES %}
<div class="col-lg-3">
<label class="mod-align-center fin_statuses">
<input name="residency" class="custom-radio" type="radio"
value="{{ residence.0 }}">
&nbsp; {{ residence.1 }}
</label>
</div>
{% endfor %}
</div>
<div class="header">Юридический статус</div>
<div class="row">
{% for legal_status in LEGAL_STATUSES %}
<div class="col-lg-3">
<label class="mod-align-center fin_statuses">
<input name="legal_status" class="custom-radio" type="radio"
value="{{ legal_status.0 }}">
&nbsp; {{ legal_status.1 }}
</label>
</div>
{% endfor %}
</div>
</div> <!-- financial_info -->
{% include 'partials/tabs/tab-user-financial_info.html' %}
</div>
</div>
</div>
@ -378,7 +243,6 @@
{% block personal_js %}
{{ block.super }}
<script src='{% static "lib/proekton-components/js/build/init_user_profile.js" %}'></script>
{# <script src='{% static "projects-filter.js" %}'></script>#}
<script src='{% static "lib/jquery.fileupload/js/vendor/jquery.ui.widget.js" %}'></script>
<script src='{% static "lib/jquery-ui/jquery-ui.js" %}'></script>
<script src='{% static "lib/jquery-ui/i18n/datepicker-ru.js" %}'></script>

@ -17,8 +17,6 @@ from .views import (
CustomerProfileTrashedProjectsView,
TeamCreateView,
TeamProfileView,
UserFinancialInfoEditView,
UserProfileEditView,
UserProfileEditViewFull,
)

@ -46,68 +46,69 @@ from .forms import (
)
class UserProfileEditView(BaseMixin, View):
form_class = UserProfileEditForm
template_name = 'user_profile_edit.html'
def dispatch(self, request, *args, **kwargs):
if request.resolver_match.url_name == 'user-experience-edit':
if not request.user.is_contractor():
raise PermissionDenied
self.form_class = UserProfileExperienceEditForm
request.experience_edit = True
if request.user.is_authenticated() and request.user.pk == int(kwargs.get('pk')):
return super().dispatch(request, *args, **kwargs)
else:
raise PermissionDenied
def get(self, request, *args, **kwargs):
context = self.get_context_data(**_.merge({}, request.GET, kwargs))
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)
specs = request.POST.getlist('contractor_specializations')
request.POST.setlist('contractor_specializations', _.compact(specs)) # Ignore empty input values
form = self.form_class(request.POST, request=request, instance=request.user)
if form.is_valid():
user = form.save()
live_image = form.cleaned_data.get('live_image')
if live_image:
new_image = ContentFile(live_image.file.read())
new_image.name = live_image.file.name
user.avatar = new_image
user.save()
live_image.file.delete()
live_image.delete()
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 UserProfileEditView(BaseMixin, View):
# form_class = UserProfileEditForm
# template_name = 'user_profile_edit.html'
#
# def dispatch(self, request, *args, **kwargs):
# if request.resolver_match.url_name == 'user-experience-edit':
# if not request.user.is_contractor():
# raise PermissionDenied
# self.form_class = UserProfileExperienceEditForm
# request.experience_edit = True
# if request.user.is_authenticated() and request.user.pk == int(kwargs.get('pk')):
# return super().dispatch(request, *args, **kwargs)
# else:
# raise PermissionDenied
#
# def get(self, request, *args, **kwargs):
# context = self.get_context_data(**_.merge({}, request.GET, kwargs))
#
# 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)
#
# specs = request.POST.getlist('contractor_specializations')
# request.POST.setlist('contractor_specializations', _.compact(specs)) # Ignore empty input values
#
# form = self.form_class(request.POST, request=request, instance=request.user)
#
# if form.is_valid():
# user = form.save()
#
# live_image = form.cleaned_data.get('live_image')
#
# if live_image:
# new_image = ContentFile(live_image.file.read())
# new_image.name = live_image.file.name
#
# user.avatar = new_image
# user.save()
#
# live_image.file.delete()
# live_image.delete()
#
# 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 UserProfileEditViewFull(BaseMixin, View):
form_class = UserProfileEditFullForm
fin_info_form_class = UserFinancialInfoEditForm
template_name = 'user_profile_edit.html'
def dispatch(self, request, *args, **kwargs):
@ -125,9 +126,14 @@ class UserProfileEditViewFull(BaseMixin, View):
context = self.get_context_data(**_.merge({}, request.GET, kwargs))
form = self.form_class(instance=request.user)
fin_info_form = self.fin_info_form_class(request=request, instance=request.user.financial_info,
prefix='fin_info')
# import code
# code.interact(local=dict(globals(), **locals()))
context.update({'form': form})
context.update({
'form': form,
'fin_info_form': fin_info_form
})
context.update({
'RESIDENCIES': UserFinancialInfo.RESIDENCIES,
'LEGAL_STATUSES': UserFinancialInfo.LEGAL_STATUSES,
@ -138,6 +144,7 @@ class UserProfileEditViewFull(BaseMixin, View):
def post(self, request, *args, **kwargs):
context = self.get_context_data(**kwargs)
# '1,3,4' --> ['1', '3', '4']
specs = tuple(filter(None, re.split(r'\s|,|;', request.POST.get('contractor_specializations', ''))))
request.POST.setlist('contractor_specializations', specs)
@ -147,10 +154,20 @@ class UserProfileEditViewFull(BaseMixin, View):
constructs = tuple(filter(None, re.split(r'\s|,|;', request.POST.get('contractor_construction_types', ''))))
request.POST.setlist('contractor_construction_types', constructs)
print("!)request.POST = ", request.POST)
# Отфильтровываем пустые значения
for key in request.POST.keys():
request.POST.setlist(key, list(filter(lambda el: el, request.POST.getlist(key, ''))))
form = self.form_class(request.POST, request=request, instance=request.user)
print("2)request.POST = ", request.POST)
fin_info_form = self.fin_info_form_class(request.POST, request=request,
instance=request.user.financial_info, prefix='fin_info')
if form.is_valid():
if form.is_valid() and fin_info_form.is_valid():
user = form.save()
fin_info = fin_info_form.save()
live_image = form.cleaned_data.get('live_image')
@ -164,17 +181,22 @@ class UserProfileEditViewFull(BaseMixin, View):
live_image.file.delete()
live_image.delete()
user.financial_info = fin_info
user.save()
messages.info(request, 'Пользователь успешно отредактирован')
redirect_to = request.POST.get('next')
return redirect(redirect_to)
else:
if form.errors:
if form.errors or fin_info_form.errors:
messages.info(request, (
'<p>Произошла ошибка (form)</p>'
'<pre>{form}</pre>'
).format(form=pformat(form.errors)))
'<p>Произошла ошибка (fin_info_form)</p>'
'<pre>{fin_info_form}</pre>'
).format(form=pformat(form.errors), fin_info_form=pformat(fin_info_form.errors)))
context.update({'form': form})
context.update({'form': form, 'fin_info_form': fin_info_form})
return render(request, self.template_name, context)

Loading…
Cancel
Save