From eea72e96a3b2dccc8e4033bbad4395fa204f15b7 Mon Sep 17 00:00:00 2001 From: Mukhtar Date: Fri, 12 Aug 2016 06:09:41 +0300 Subject: [PATCH] #ARC-23 Fixes bugs --- api/urls.py | 4 + api/views.py | 20 ++++- archilance/settings/base.py | 2 +- common/templates/printorder_detail.html | 1 + common/urls.py | 2 + common/views.py | 11 ++- templates/registration/registration_form.html | 2 +- users/filters.py | 23 +++++- users/forms.py | 14 +++- users/models.py | 4 +- users/pipeline.py | 30 ++++--- users/serializers.py | 58 ++++++++++---- users/templates/add_email_form.html | 21 +++-- users/templates/contractor_profile.html | 78 ++++++++++++++----- users/urls.py | 2 + users/views.py | 56 +++++++++++-- work_sell/models.py | 15 +++- work_sell/templates/worksell_detail.html | 14 +++- work_sell/views.py | 2 +- 19 files changed, 284 insertions(+), 75 deletions(-) create mode 100644 common/templates/printorder_detail.html diff --git a/api/urls.py b/api/urls.py index eb8ecb1..176d031 100755 --- a/api/urls.py +++ b/api/urls.py @@ -11,6 +11,8 @@ from .views import ( NoteViewSet, DocumentViewSet, ReviewViewSet, + ContractorResumeViewSet, + ContractorResumeFilesViewSet, ) @@ -20,6 +22,8 @@ router.register(r'locations', LocationViewSet) router.register(r'projects', ProjectViewSet) router.register(r'stages', StageViewSet) router.register(r'reviews', ReviewViewSet) +router.register(r'contractorresume', ContractorResumeViewSet) +router.register(r'contractorresumefiles', ContractorResumeFilesViewSet) router.register(r'documents', DocumentViewSet) router.register(r'realties', RealtyViewSet) router.register(r'specializations', SpecializationViewSet) diff --git a/api/views.py b/api/views.py index 09410c3..49d7f8d 100755 --- a/api/views.py +++ b/api/views.py @@ -10,9 +10,9 @@ from specializations.models import Specialization from specializations.serializers import SpecializationSerializer from specializations.filters import SpecializationFilterSet -from users.models import User -from users.serializers import UserSerializer -from users.filters import UserFilterSet +from users.models import User, ContractorResumeFiles, ContractorResume +from users.serializers import UserSerializer, ContractorResumeFilesSerializer, ContractorResumeSerializer +from users.filters import UserFilterSet, ContractorResumeFilesFilterSet, ContractorResumeFilterSet from common.models import Location from common.serializers import LocationSerializer @@ -27,6 +27,20 @@ from reviews.serializers import ReviewSerializer from reviews.filters import ReviewFilterSet +class ContractorResumeFilesViewSet(ModelViewSet): + queryset = ContractorResumeFiles.objects.all() + serializer_class = ContractorResumeFilesSerializer + # filter_class = ContractorResumeFilesFilterSet + permission_classes = (permissions.IsAuthenticatedOrReadOnly,) + + +class ContractorResumeViewSet(ModelViewSet): + queryset = ContractorResume.objects.all() + serializer_class = ContractorResumeSerializer + # filter_class = ContractorResumeFilterSet + permission_classes = (permissions.IsAuthenticatedOrReadOnly,) + + class StageViewSet(ModelViewSet): queryset = Stage.objects.all() serializer_class = StageSerializer diff --git a/archilance/settings/base.py b/archilance/settings/base.py index 9b25660..2c76934 100644 --- a/archilance/settings/base.py +++ b/archilance/settings/base.py @@ -183,12 +183,12 @@ SOCIAL_AUTH_PIPELINE = ( 'social.pipeline.social_auth.social_user', 'social.pipeline.user.get_username', 'users.pipeline.add_email_for_user', - # 'users.pipeline.test_contractor', 'social.pipeline.mail.mail_validation', 'social.pipeline.user.create_user', 'social.pipeline.social_auth.associate_user', 'social.pipeline.social_auth.load_extra_data', 'social.pipeline.user.user_details', + 'users.pipeline.test_contractor', ) FIELDS_STORED_IN_SESSION = ['user_type'] diff --git a/common/templates/printorder_detail.html b/common/templates/printorder_detail.html new file mode 100644 index 0000000..dec4ea2 --- /dev/null +++ b/common/templates/printorder_detail.html @@ -0,0 +1 @@ +

{{ object }}

diff --git a/common/urls.py b/common/urls.py index de30340..10e2318 100644 --- a/common/urls.py +++ b/common/urls.py @@ -2,10 +2,12 @@ from django.conf import urls from .views import ( PrintDocumentCreate, + PrintOrderDetailView, ) app_name = 'common' urlpatterns = [ urls.url(r'^printdocument/create/$', PrintDocumentCreate.as_view(), name='create'), + urls.url(r'^printorder/(?P\d+)/$', PrintOrderDetailView.as_view(), name='print-order-detail'), ] diff --git a/common/views.py b/common/views.py index 104893b..b5b3865 100644 --- a/common/views.py +++ b/common/views.py @@ -2,13 +2,18 @@ from django.shortcuts import render, redirect from django.contrib import messages from django.core.mail import send_mail, EmailMultiAlternatives from django.template.loader import get_template, render_to_string -from django.views.generic import View +from django.views.generic import View, DetailView from archilance.mixins import BaseMixin from .forms import PrintOrderForm from .models import PrintDocuments, PrintOrder, Settings +class PrintOrderDetailView(DetailView): + model = PrintOrder + template_name = 'printorder_detail.html' + + class PrintDocumentCreate(BaseMixin, View): form_class = PrintOrderForm template_name = 'printdocument_create.html' @@ -27,7 +32,7 @@ class PrintDocumentCreate(BaseMixin, View): print_doc = PrintDocuments.objects.create(file=file, printorder=print_order) print_doc.save() - print_documents = PrintDocuments.objects.all() + print_documents = print_order.print_documents.all() limit_size = 10 * 1024 * 1024 attachments = [] link_files = [] @@ -57,7 +62,7 @@ class PrintDocumentCreate(BaseMixin, View): msg.send() messages.info(request, 'Заявка на распечатку принята') - return redirect('common:create') + return redirect('common:print-order-detail',pk=print_order.pk) # import code; code.interact(local=dict(globals(), **locals())) else: context = self.get_context_data(**kwargs) diff --git a/templates/registration/registration_form.html b/templates/registration/registration_form.html index 285f4d9..dc7dfbb 100644 --- a/templates/registration/registration_form.html +++ b/templates/registration/registration_form.html @@ -57,7 +57,7 @@ diff --git a/users/filters.py b/users/filters.py index c796aff..6c6d611 100755 --- a/users/filters.py +++ b/users/filters.py @@ -1,5 +1,6 @@ from rest_framework_filters import FilterSet, RelatedFilter, AllLookupsFilter -from .models import User, Team +from .models import User, Team, ContractorResumeFiles, ContractorResume + class UserFilterSet(FilterSet): id = AllLookupsFilter() @@ -19,6 +20,24 @@ class TeamFilterSet(FilterSet): name = AllLookupsFilter() owner = RelatedFilter('users.filters.UserFilterSet') - class Meta: model = Team + + +class ContractorResumeFilterSet(FilterSet): + id = AllLookupsFilter() + text = AllLookupsFilter() + resume_file = AllLookupsFilter() + + class Meta: + model = ContractorResume + + +class ContractorResumeFilesFilterSet(FilterSet): + id = AllLookupsFilter() + title = AllLookupsFilter() + img = AllLookupsFilter() + resume = RelatedFilter('users.filters.ContractorResumeFilterSet') + + class Meta: + model = ContractorResumeFiles diff --git a/users/forms.py b/users/forms.py index fa12a56..31e0c77 100644 --- a/users/forms.py +++ b/users/forms.py @@ -2,7 +2,7 @@ from django import forms import itertools import pydash as _; _.map = _.map_; _.filter = _.filter_ -from .models import User, UserFinancialInfo, Team, ContractorResume, GENDERS +from .models import User, UserFinancialInfo, Team, ContractorResume, ContractorResumeFiles, GENDERS from common.models import Location from projects.models import Project, Realty, BuildingClassfication, ConstructionType from specializations.models import Specialization @@ -26,6 +26,18 @@ class ContractorResumeForm(forms.ModelForm): 'text', ) +class ContractorResumeFilesForm(forms.ModelForm): + + class Meta: + model = ContractorResumeFiles + + fields = ( + 'type', + 'resume', + ) + + + class UserProfileEditForm(forms.ModelForm): gender = forms.ChoiceField( choices=GENDERS, diff --git a/users/models.py b/users/models.py index a3d995c..8e2ec92 100644 --- a/users/models.py +++ b/users/models.py @@ -101,8 +101,8 @@ class ContractorResumeFiles(models.Model): description = models.TextField(blank=True) img = models.ImageField(upload_to='users/resume/images/') resume = models.ForeignKey(ContractorResume, related_name='resume_files') - title = models.CharField(max_length=255) - type = models.CharField(max_length=50, choices=RESUME_TYPE_FILES) + title = models.CharField(max_length=255,blank=True) + type = models.CharField(max_length=50, choices=RESUME_TYPE_FILES, default='diplom') def __str__(self): return self.title diff --git a/users/pipeline.py b/users/pipeline.py index 0870121..e181e8b 100644 --- a/users/pipeline.py +++ b/users/pipeline.py @@ -1,21 +1,30 @@ from django.shortcuts import redirect, render_to_response - from social.pipeline.partial import partial +from django.contrib.auth.models import Group +from users.models import ContractorResume @partial -def test_contractor(backend, details, response, is_new=False, *args, **kwargs): - import code; code.interact(local=dict(globals(), **locals())) - +def test_contractor(backend, details, response, user,is_new=False, *args, **kwargs): + if is_new: + group_name = 'Исполнители' + g = Group.objects.get(name=group_name) + g.user_set.add(user) + if group_name == 'Исполнители': + resume = ContractorResume.objects.create(text='Здесь должна быть описание вашего резюме') + user.contractor_resume = resume + user.save() @partial def add_email_for_user(backend, details, response, is_new=False, *args, **kwargs): data = backend.strategy.request_data() - # import code; code.interact(local=dict(globals(), **locals())) - if not details.get('email'): - if 'email' in kwargs['request']: - return {'email': kwargs['request']['email']} - else: - return render_to_response('add_email_form.html') + if is_new: + if not details.get('email'): + if 'email' in kwargs['request']: + return {'email': kwargs['request']['email']} + else: + return render_to_response('add_email_form.html') + + @partial def require_email(strategy, details, user=None, is_new=False, *args, **kwargs): if kwargs.get('ajax') or user and user.email: @@ -26,3 +35,4 @@ def require_email(strategy, details, user=None, is_new=False, *args, **kwargs): details['email'] = email else: return redirect('require_email') + diff --git a/users/serializers.py b/users/serializers.py index 59c94db..9f21146 100755 --- a/users/serializers.py +++ b/users/serializers.py @@ -1,11 +1,36 @@ from rest_framework.serializers import ModelSerializer -from .models import User, Team +from .models import User, Team, ContractorResumeFiles, ContractorResume from projects.models import Project -class TeamSerializer(ModelSerializer): +class ContractorResumeSerializer(ModelSerializer): + class Meta: + model = ContractorResume + + fields = ( + 'id', + 'resume_file', + 'text', + ) + + +class ContractorResumeFilesSerializer(ModelSerializer): + class Meta: + model = ContractorResumeFiles + fields = ( + 'id', + 'description', + 'img', + 'resume', + 'title', + 'type', + 'resume', + ) + + +class TeamSerializer(ModelSerializer): class Meta: model = Team @@ -17,8 +42,8 @@ class TeamSerializer(ModelSerializer): 'users', ) -class UserSerializer(ModelSerializer): +class UserSerializer(ModelSerializer): class Meta: model = User @@ -48,20 +73,19 @@ class UserSerializer(ModelSerializer): # 'is_active', # 'is_admin', # ) - - # def create(self, validated_data): - # return User.objects.create(**validated_data) - - # def update(self, inst, validated_data): - # inst.email = validated_data.get('email', inst.email) - # inst.first_name = validated_data.get('first_name', inst.first_name) - # inst.is_active = validated_data.get('is_active', inst.is_active) - # inst.last_name = validated_data.get('last_name', inst.last_name) - # # inst.projects = validated_data.get('projects', inst.projects) - # - # inst.save() - # - # return inst + # def create(self, validated_data): + # return User.objects.create(**validated_data) + + # def update(self, inst, validated_data): + # inst.email = validated_data.get('email', inst.email) + # inst.first_name = validated_data.get('first_name', inst.first_name) + # inst.is_active = validated_data.get('is_active', inst.is_active) + # inst.last_name = validated_data.get('last_name', inst.last_name) + # # inst.projects = validated_data.get('projects', inst.projects) + # + # inst.save() + # + # return inst # import code; code.interact(local=dict(globals(), **locals())) diff --git a/users/templates/add_email_form.html b/users/templates/add_email_form.html index 364b4bd..e32ce1f 100644 --- a/users/templates/add_email_form.html +++ b/users/templates/add_email_form.html @@ -1,9 +1,20 @@ {% extends 'partials/base.html' %} {% block content %} -

Введите свой email

-
- - -
+ {% include 'partials/header.html' %} +
+
+
+

Введите свой email

+
+
+
+ + +
+
+ {% include 'partials/footer.html' %} +
+
+ {% endblock %} diff --git a/users/templates/contractor_profile.html b/users/templates/contractor_profile.html index e2c53ba..29b7f5e 100644 --- a/users/templates/contractor_profile.html +++ b/users/templates/contractor_profile.html @@ -313,7 +313,6 @@ -