From 92cdc5d8358aa659af20f5e0c624ec6a8c1818db Mon Sep 17 00:00:00 2001 From: Mukhtar Date: Thu, 22 Sep 2016 19:40:42 +0300 Subject: [PATCH] Fix --- projects/views.py | 11 +++++++++++ users/forms.py | 18 ++++++++++++++---- users/signals.py | 26 +++++++++++++++++++++++++- users/templatetags/user_tags.py | 1 + work_sell/forms.py | 5 ++++- 5 files changed, 55 insertions(+), 6 deletions(-) diff --git a/projects/views.py b/projects/views.py index 26b8f1c..ab3f3eb 100644 --- a/projects/views.py +++ b/projects/views.py @@ -23,6 +23,7 @@ from archilance.mixins import BaseMixin from common.mixins import CustomerRequiredMixin, ContractorRequiredMixin, NoCsrfMixin from users.models import User, Team from work_sell.models import Picture, WorkSell, WorkSellPhoto +from ratings.models import HistoryRating from .models import ( Answer, @@ -734,13 +735,23 @@ class CustomerOfferOrderView(View): answer = None order = project.order + status = None if not order.contractor and not order.team: if isinstance(answer.author, User): order.contractor = answer.author order.save() + status = True elif isinstance(answer.author, Team): order.team = answer.author order.save() + status = True + if status: + hs_rating = HistoryRating() + hs_rating.user = request.user + hs_rating.rating = 1 + hs_rating.type = 'choice_contractor' + hs_rating.description = 'Заказчик выбрал исполнителя' + hs_rating.save() redirect_url = reverse('chat:chat-user') + '#order' + str(order.pk) return HttpResponseRedirect(redirect_url) diff --git a/users/forms.py b/users/forms.py index 69ee8e5..e2f1acd 100644 --- a/users/forms.py +++ b/users/forms.py @@ -1,4 +1,5 @@ from django import forms +from mptt.forms import TreeNodeChoiceField import itertools import pydash as _; _.map = _.map_; _.filter = _.filter_ @@ -185,11 +186,19 @@ class ContractorFilterForm(forms.Form): required=False, ) - building_classification = forms.ModelChoiceField( - queryset=BuildingClassfication.objects, - widget=forms.Select(attrs={'class': 'selectpicker'}), - required=False, + # building_classification = forms.ModelChoiceField( + # queryset=BuildingClassfication.objects, + # widget=forms.Select(attrs={'class': 'selectpicker'}), + # empty_label='', + # ) + + building_classification = TreeNodeChoiceField( + BuildingClassfication.objects.exclude(name='_root'), empty_label='', + widget=forms.Select(attrs={ + 'class': 'selectpicker', + }), + required=False, ) work_type = forms.ChoiceField( @@ -223,6 +232,7 @@ class ContractorFilterForm(forms.Form): class CustomerProfileProjectRealtyForm(forms.Form): + def __init__(self, *args, **kwargs): self.request = kwargs.pop('request') self.customer = kwargs.pop('customer') diff --git a/users/signals.py b/users/signals.py index 62ad97b..da1e9dc 100644 --- a/users/signals.py +++ b/users/signals.py @@ -1,7 +1,29 @@ +import math from django.dispatch import receiver +from django.db.models.signals import post_save +from ratings.models import HistoryRating from django.contrib.auth.models import Group from registration.signals import user_registered -from users.models import ContractorResume +from users.models import ContractorResume, User + + +@receiver(post_save, sender=User) +def add_rating_for_user_fields(sender, instance, created, **kwargs): + hs_rating = HistoryRating.objects.get_or_create(user=instance, type='occupancy_profile') + fields = ['avatar', 'cro', 'first_name', 'gender', + 'last_name', 'patronym', 'phone', + 'skype', 'website', 'location'] + + indicator_sum = 0 + for f in fields: + if hasattr(instance, f) and getattr(instance, f): + indicator_sum += 1 + + rating = math.ceil(math.ceil(100 / len(fields)) * indicator_sum) + hs_rating[0].rating = rating + hs_rating[0].description = 'Заполненные поля в профиле. Баллы за рейтинг' + hs_rating[0].save() + # @receiver(user_registered) # def user_registered_callback(sender, user, request, **kwargs): @@ -13,3 +35,5 @@ from users.models import ContractorResume # resume = ContractorResume.objects.create(text='') # user.contractor_resume = resume # user.save() + + diff --git a/users/templatetags/user_tags.py b/users/templatetags/user_tags.py index 630c813..4130f67 100644 --- a/users/templatetags/user_tags.py +++ b/users/templatetags/user_tags.py @@ -10,6 +10,7 @@ def contractor_indicator(context, contractor): fields = ['avatar', 'cro', 'first_name', 'gender', 'last_name', 'patronym', 'phone', 'skype', 'website', 'location'] + indicator_sum = 0 for f in fields: if hasattr(contractor, f) and getattr(contractor, f): diff --git a/work_sell/forms.py b/work_sell/forms.py index 0195e9d..947baed 100644 --- a/work_sell/forms.py +++ b/work_sell/forms.py @@ -35,7 +35,10 @@ class WorkSellForm(forms.ModelForm): building_classification = TreeNodeChoiceField( BuildingClassfication.objects.exclude(name='_root'), - widget=forms.Select(attrs={'class': 'selectpicker'}), + widget=forms.Select(attrs={ + 'class': 'selectpicker' + }), + required=False, ) class Meta: