#ARC-12 Add user edit form contact

remotes/origin/setup
Mukhtar 10 years ago
parent 3aaca296dd
commit c0c1b398b1
  1. BIN
      media/users/contractors/images.jpg
  2. BIN
      media/users/contractors/images_iusxZEz.jpg
  3. 5
      users/admin.py
  4. 39
      users/forms.py
  5. 12
      users/mixins.py
  6. 192
      users/templates/contractor_financical_info_edit.html
  7. 18
      users/templates/contractor_profile_edit.html
  8. 11
      users/templates/contractor_profile_test_edit.html
  9. 5
      users/urls.py
  10. 60
      users/views.py

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

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

@ -1,7 +1,8 @@
from django import forms
from django.forms import ModelForm
from .models import User
from .models import User, ContractorFinancialInfo
class UserEditForm(ModelForm):
@ -14,5 +15,41 @@ class UserEditForm(ModelForm):
'location',
'date_of_birth',
'website',
'skype',
)
class ContractorFinancicalInfoForm(ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['residency'].choices = self.fields['residency'].choices[1:]
self.fields['legal_status'].choices = self.fields['legal_status'].choices[1:]
# self.fields['residency'].empty_label = None
# self.fields['residency'].widget.choices = self.fields['residency'].choices
class Meta:
model = ContractorFinancialInfo
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(),
}

@ -4,9 +4,11 @@ from django.http import HttpResponseForbidden
class CheckForUserMixin(object):
def dispatch(self, request, *args, **kwargs):
pk = kwargs.get('pk')
if pk:
if request.user.pk != int(pk):
return HttpResponseForbidden('403 Forbidden')
if request.user.is_authenticated():
pk = kwargs.get('pk')
if pk:
if request.user.pk != int(pk):
return HttpResponseForbidden('403 Forbidden')
else:
return HttpResponseForbidden('403 Forbidden')
return super().dispatch(request, *args, **kwargs)

@ -0,0 +1,192 @@
{% extends 'partials/base.html' %}
{% load staticfiles %}
{% block content %}
{% include 'partials/header.html' %}
<div class="container mainScore">
<div class="row">
<div class="projectsBlock disTab">
<div class="col-lg-12">
<div class="col-lg-3 divCol3">
<div class="avatar">
<div class="avatarInset">
<img src="img/profile.jpg" alt="profile-image">
</div>
</div>
<div class="menuUser upload-img disTab">
<div class="upload2 up-l1">
<input type="file" name="upload">
<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="Иванов" class="box-sizing inp-edit">
<input type="text" value="Петр" class="box-sizing inp-edit">
<input type="text" value="Иванович" class="box-sizing inp-edit">
</div>
<div class="col-lg-4">
<p class="name-edit-p">Специализация:</p>
<div class="polsF1 pols-edit disTab">
<select class="selectpicker4">
<option>Mustard</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
<select class="selectpicker4">
<option>Mustard</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
<a href="javascript:void(0)" class="add-edit">
Добавить еще
</a>
</div>
</div>
<div class="col-lg-4">
<p class="name-edit-p">Местоположение:</p>
<div class="polsF1 pols-edit disTab">
<select class="selectpicker4">
<option>Страна</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
<select class="selectpicker4">
<option>Город</option>
<option>Ketchup</option>
<option>Relish</option>
</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>
<form method="post" enctype="multipart/form-data"> {% csrf_token %}
<div class="col-lg-12 col12 new-filter">
{{ form.errors }}
<div class="filter clearfix">
<div class="titleF1 disTab">
<div class="col-lg-6">Имя, Фамилия, Отчество:</div>
<div class="col-lg-3">Дата рождения:</div>
<div class="col-lg-3">Телефон</div>
</div>
<div class="polsF1 disTab">
<div class="col-lg-6">
<input type="text" class="searchInp box-sizing" value="{{ form.fio.value|default_if_none:"" }}" name="{{ form.fio.name }}" />
</div>
<div class="col-lg-3">
<input type="text" class="box-sizing surr surr2" value="{{ form.date_of_birth.value|default_if_none:"" }}" name="{{ form.date_of_birth.name }}" />
</div>
<div class="col-lg-3">
<input type="text" class="box-sizing surr surr2" value="{{ form.phone.value }}" name="{{ form.phone.name }}" />
</div>
</div>
<div class="titleF1 titleFFE disTab">
<div class="col-lg-12">Резиденство:</div>
</div>
<div class="searchF1 polsF1 polsFF radio-afer">
{% for residency in form.residency %}
<div class="col-lg-3">
<label><input type="radio" value="{{ residency.choice_value }}" name="{{ form.residency.name }}" {% if residency.choice_value|stringformat:"s" == form.instance.residency|stringformat:"s" %}checked{% endif %}><span></span></label>
<p class="text-afer">
{{ residency.choice_label }}
</p>
</div>
{% endfor %}
</div>
<div class="titleF1 titleFFE disTab">
<div class="col-lg-12">Юридический статус:</div>
</div>
<div class="searchF1 polsF1 polsFF radio-afer new-doubt">
{% for lstatus in form.legal_status %}
<div class="col-lg-3">
<label><input value="{{ lstatus.choice_value }}" type="radio" name="{{ form.legal_status.name }}" {% if lstatus.choice_value|stringformat:"s" == form.instance.legal_status|stringformat:"s" %}checked{% endif %} /><span></span></label>
<p class="text-afer">
{{ lstatus.choice_label }}
</p>
</div>
{% endfor %}
</div>
<div class="titleF1 disTab">
<div class="col-lg-6">Серия и номер паспорта:</div>
<div class="col-lg-6">Кем выдан:</div>
</div>
<div class="polsF1 disTab new-doubt">
<div class="col-lg-3">
<input type="text" value="{{ form.passport_series.value| default_if_none:"" }}" class="box-sizing surr surr2" name="{{ form.passport_series.name }}" placeholder="КН" />
</div>
<div class="col-lg-3">
<input type="text" value="{{ form.passport_number.value| default_if_none:"" }}" class="box-sizing surr surr2" name="{{ form.passport_number.name }}" placeholder="0099321" />
</div>
<div class="col-lg-6">
</div>
</div>
<div class="titleF1 disTab">
<div class="col-lg-3">Код подразделения:</div>
<div class="col-lg-9">Кем выдан:</div>
</div>
<div class="polsF1 disTab new-doubt">
<div class="col-lg-3">
<input type="text" value="{{ form.subdivision_code.value| default_if_none:"" }}" class="box-sizing surr surr2" placeholder="0033" name="{{ form.subdivision_code.name }}" />
</div>
<div class="col-lg-9">
<input type="text" value="{{ form.passport_issued_by.value| default_if_none:"" }}" class="searchInp box-sizing" name="{{ form.passport_issued_by.name }}" />
</div>
</div>
<div class="titleF1 disTab">
<div class="col-lg-3">Дата выдачи:</div>
<div class="col-lg-9">Почтовый адрес:</div>
</div>
<div class="polsF1 disTab new-doubt">
<div class="col-lg-3">
<input type="text" value="{{ form.passport_issue_date.value| default_if_none:"" }}" name="{{ form.passport_issue_date.name }}" class="box-sizing surr surr2" placeholder="11.12.1994" />
</div>
<div class="col-lg-9">
{# <input type="text" class="searchInp box-sizing" />#}
</div>
</div>
<div class="titleF1 disTab">
<div class="col-lg-3">ИНН:</div>
<div class="col-lg-3">Яндекс.Деньги:</div>
<div class="col-lg-3">Номер карты</div>
<div class="col-lg-3">Скан-копии страниц паспорта</div>
</div>
<div class="polsF1 disTab new-doubt">
<div class="col-lg-3">
<input type="text" value="{{ form.inn.value| default_if_none:"" }}" class="box-sizing surr surr2" name="{{ form.inn.name }}" />
</div>
<div class="col-lg-3">
<input type="text" value="{{ form.yandex_money.value| default_if_none:"" }}" class="box-sizing surr surr2" name="{{ form.yandex_money.name }}" />
</div>
<div class="col-lg-3">
<input type="text" value="{{ form.credit_card_number.value| default_if_none:"" }}" class="box-sizing surr surr2" name="{{ form.credit_card_number.name }}" />
</div>
<div class="col-lg-3">
{{ form.passport_scan.value }}
<div class="upload2 up-l1 take-new">
<input type="file" name="{{ form.passport_scan.name }}">
<p>Прикрепить файл</p>
</div>
</div>
</div>
<div class="searchF1 polsF1 polsFF links-filter">
<input class="btn-submit-link" type="submit" value="Сохранить" />
</div>
</div>
</div>
</form>
{% include 'partials/footer.html' %}
</div>
</div>
{% endblock %}

@ -1,9 +1,7 @@
{% extends 'partials/base.html' %}
{% load staticfiles %}
{% block content %}
{% include 'partials/header.html' %}
{% include 'partials/header.html' %}
<div class="container mainScore">
<div class="row">
<div class="projectsBlock disTab">
@ -24,9 +22,9 @@
<div class="col-lg-9 divCol9">
<div class="col-lg-4">
<p class="name-edit-p">ФИО:</p>
<input type="text" value="{{ contractor.get_full_name }}" class="box-sizing inp-edit">
<input type="text" value="{{ contractor.last_name }}" class="box-sizing inp-edit">
<input type="text" value="{{ contractor. }}" class="box-sizing inp-edit">
<input type="text" value="Иванов" class="box-sizing inp-edit">
<input type="text" value="Петр" class="box-sizing inp-edit">
<input type="text" value="Иванович" class="box-sizing inp-edit">
</div>
<div class="col-lg-4">
<p class="name-edit-p">Специализация:</p>
@ -131,14 +129,8 @@
<a href="javascript:void(0)">Сохранить</a>
</div>
</div>
<div>
{% include 'partials/footer.html' %}
</div>
</div>
{% include 'partials/footer.html' %}
</div>
</div>
{% endblock %}

@ -1,11 +0,0 @@
{#{% extends 'partials/base.html' %}#}
{##}
{#{% load staticfiles %}#}
{##}
{#{% block content %}#}
<form method="post">{% csrf_token %}
{{ form.errors }}
{{ form.as_p }}
<input type="submit" value="Сохранить" />
</form>
{#{% endblock %}#}

@ -10,7 +10,7 @@ from .views import (
CustomerProfileOpenProjectsView,
CustomerProfileReviewsView,
CustomerProfileTrashedProjectsView,
ContractorTestProfileEditView,
ContractorFinancialInfoEdit,
# UserDetailView,
# UserInfoListView,
UserListView,
@ -33,5 +33,6 @@ urlpatterns = [
# urls.url(r'^info$', UserInfoListView.as_view(), name='users_info_list'),
urls.url(r'contractors/$', ContractorListView.as_view(), name='contractor-list' ),
# urls.url(r'^(?P<pk>\d+)/$', UserView.as_view(), name='user_view'),
urls.url(r'contractors/(?P<pk>\d+)/edit/$', ContractorTestProfileEditView.as_view(), name='contractor-edit' ),
urls.url(r'contractors/(?P<pk>\d+)/edit/$', ContractorProfileEditView.as_view(), name='contractor-edit' ),
urls.url(r'contractors/(?P<pk>\d+)/financialinfo/edit/$', ContractorFinancialInfoEdit.as_view(), name='contractor-financical' ),
]

@ -1,12 +1,14 @@
from django.shortcuts import render, get_object_or_404
from django.shortcuts import render, get_object_or_404, redirect
from django.contrib import messages
from django.contrib.auth.models import Group
from django.views.generic import ListView, DetailView, View, UpdateView
from django.views.generic import ListView, DetailView, View, UpdateView, CreateView
from django.views.generic.base import TemplateView
from django.core.urlresolvers import reverse
from archilance.mixins import BaseMixin
from .models import User
from .models import User, ContractorFinancialInfo
from .mixins import CheckForUserMixin
from .forms import UserEditForm
from .forms import UserEditForm, ContractorFinancicalInfoForm
class UserListView(ListView):
@ -68,12 +70,13 @@ class CustomerProfileReviewsView(BaseMixin, DetailView):
class ContractorProfileEditView(CheckForUserMixin, View):
form_class = ''
form_class = UserEditForm
template_name = 'contractor_profile_edit.html'
def get(self, request, *args, **kwargs):
contractor = get_object_or_404(User, pk=kwargs.get('pk'))
return render(request, self.template_name, {'contractor': contractor})
instance= get_object_or_404(User, pk=kwargs.get('pk'))
form = self.form_class(instance=instance)
return render(request, self.template_name, {'form': form})
# class ContractorTestProfileEditView(CheckForUserMixin, View):
@ -85,17 +88,32 @@ class ContractorProfileEditView(CheckForUserMixin, View):
# form = self.form_class
# return render(request, self.template_name, {'contractor': contractor, 'form': form})
from django.views.generic import UpdateView
class ContractorTestProfileEditView(CheckForUserMixin, UpdateView):
model = User
fields = ['first_name','last_name','patronym',
'location', 'date_of_birth','website', 'skype', 'gender', 'cro']
# form_class = UserEditForm
template_name = 'contractor_profile_test_edit.html'
# success_url =
#
# def get(self, request, *args, **kwargs):
# contractor = get_object_or_404(User, pk=kwargs.get('pk'))
# form = self.form_class
# return render(request, self.template_name, {'contractor': contractor, 'form': form})
class ContractorFinancialInfoEdit(CheckForUserMixin, View):
template_name = 'contractor_financical_info_edit.html'
form_class = ContractorFinancicalInfoForm
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})

Loading…
Cancel
Save