diff --git a/media/users/contractors/images.jpg b/media/users/contractors/images.jpg new file mode 100644 index 0000000..621001e Binary files /dev/null and b/media/users/contractors/images.jpg differ diff --git a/media/users/contractors/images_iusxZEz.jpg b/media/users/contractors/images_iusxZEz.jpg new file mode 100644 index 0000000..621001e Binary files /dev/null and b/media/users/contractors/images_iusxZEz.jpg differ diff --git a/users/admin.py b/users/admin.py index 0cc2a0b..eb231f7 100644 --- a/users/admin.py +++ b/users/admin.py @@ -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) diff --git a/users/forms.py b/users/forms.py index c467235..fffae77 100644 --- a/users/forms.py +++ b/users/forms.py @@ -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(), + } diff --git a/users/mixins.py b/users/mixins.py index 91bbfc7..e194f8f 100644 --- a/users/mixins.py +++ b/users/mixins.py @@ -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) diff --git a/users/templates/contractor_financical_info_edit.html b/users/templates/contractor_financical_info_edit.html new file mode 100644 index 0000000..f46d235 --- /dev/null +++ b/users/templates/contractor_financical_info_edit.html @@ -0,0 +1,192 @@ +{% extends 'partials/base.html' %} +{% load staticfiles %} +{% block content %} + {% include 'partials/header.html' %} +
+
+
+
+
+
+
+ profile-image +
+
+ +
+
+
+

ФИО:

+ + + +
+
+

Специализация:

+
+ + + + Добавить еще + +
+
+
+

Местоположение:

+
+ + +
+
+
+
+
+
+
+ + +
+
+
{% csrf_token %} +
+ {{ form.errors }} +
+
+
Имя, Фамилия, Отчество:
+
Дата рождения:
+
Телефон
+
+
+
+ +
+
+ +
+
+ +
+
+
+
Резиденство:
+
+
+ + {% for residency in form.residency %} +
+ +

+ {{ residency.choice_label }} +

+
+ {% endfor %} +
+
+
Юридический статус:
+
+
+ {% for lstatus in form.legal_status %} +
+ +

+ {{ lstatus.choice_label }} +

+
+ {% endfor %} +
+
+
Серия и номер паспорта:
+
Кем выдан:
+
+
+
+ +
+
+ +
+
+ +
+
+
+
Код подразделения:
+
Кем выдан:
+
+
+
+ +
+
+ +
+
+
+
Дата выдачи:
+
Почтовый адрес:
+
+
+
+ +
+
+{# #} +
+
+
+
ИНН:
+
Яндекс.Деньги:
+
Номер карты
+
Скан-копии страниц паспорта
+
+
+
+ +
+
+ +
+
+ +
+
+ {{ form.passport_scan.value }} +
+ + +

Прикрепить файл

+
+
+
+ +
+
+
+ {% include 'partials/footer.html' %} +
+
+{% endblock %} + diff --git a/users/templates/contractor_profile_edit.html b/users/templates/contractor_profile_edit.html index 7d688a3..4b3b240 100644 --- a/users/templates/contractor_profile_edit.html +++ b/users/templates/contractor_profile_edit.html @@ -1,9 +1,7 @@ {% extends 'partials/base.html' %} - {% load staticfiles %} - {% block content %} - {% include 'partials/header.html' %} +{% include 'partials/header.html' %}
@@ -24,9 +22,9 @@

ФИО:

- - - + + +

Специализация:

@@ -131,14 +129,8 @@ Сохранить
- -
- {% include 'partials/footer.html' %} -
-
- + {% include 'partials/footer.html' %}
- {% endblock %} diff --git a/users/templates/contractor_profile_test_edit.html b/users/templates/contractor_profile_test_edit.html deleted file mode 100644 index c39b283..0000000 --- a/users/templates/contractor_profile_test_edit.html +++ /dev/null @@ -1,11 +0,0 @@ -{#{% extends 'partials/base.html' %}#} -{##} -{#{% load staticfiles %}#} -{##} -{#{% block content %}#} -
{% csrf_token %} - {{ form.errors }} - {{ form.as_p }} - -
-{#{% endblock %}#} diff --git a/users/urls.py b/users/urls.py index 62dfc83..baedfac 100755 --- a/users/urls.py +++ b/users/urls.py @@ -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\d+)/$', UserView.as_view(), name='user_view'), - urls.url(r'contractors/(?P\d+)/edit/$', ContractorTestProfileEditView.as_view(), name='contractor-edit' ), + urls.url(r'contractors/(?P\d+)/edit/$', ContractorProfileEditView.as_view(), name='contractor-edit' ), + urls.url(r'contractors/(?P\d+)/financialinfo/edit/$', ContractorFinancialInfoEdit.as_view(), name='contractor-financical' ), ] diff --git a/users/views.py b/users/views.py index 1a10177..063d08d 100644 --- a/users/views.py +++ b/users/views.py @@ -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}) + + + +