remotes/origin/setup
ArturBaybulatov 10 years ago
parent 381a06b87a
commit becf37b629
  1. 8
      api/views.py
  2. 11
      archilance/settings/base.py
  3. 1
      archilance/urls.py
  4. 14
      archilance/util.py
  5. 20
      common/templatetags/common_tags.py
  6. 16
      projects/forms.py
  7. 4
      projects/models.py
  8. 1
      requirements/base.txt
  9. 19
      reviews/migrations/0002_remove_review_is_secured.py
  10. 1
      reviews/models.py
  11. 4
      specializations/views.py
  12. 8
      users/forms.py
  13. 207
      users/templates/contractor_financical_info_edit.html
  14. 2
      users/templates/contractor_profile.html
  15. 7
      users/templates/contractor_profile_edit.html
  16. 2
      users/templates/customer_profile_current_projects.html
  17. 3
      users/templates/customer_profile_edit.html
  18. 1
      users/templates/customer_profile_open_projects.html
  19. 33
      users/templates/customer_profile_reviews.html
  20. 30
      users/views.py
  21. 4
      work_sell/forms.py

@ -55,8 +55,8 @@ class RealtyViewSet(ModelViewSet):
class SpecializationViewSet(ModelViewSet): class SpecializationViewSet(ModelViewSet):
# queryset = Specialization.objects.root_nodes()[0].get_descendants() queryset = Specialization.objects.root_nodes()[0].get_descendants()
queryset = Specialization.objects # TODO: Tmp # queryset = Specialization.objects # Migrate with this enabled
serializer_class = SpecializationSerializer serializer_class = SpecializationSerializer
filter_class = SpecializationFilterSet filter_class = SpecializationFilterSet
@ -68,7 +68,7 @@ class UserViewSet(ModelViewSet):
class LocationViewSet(ModelViewSet): class LocationViewSet(ModelViewSet):
# queryset = Location.objects.root_nodes()[0].get_descendants() queryset = Location.objects.root_nodes()[0].get_descendants()
queryset = Location.objects # TODO: Tmp # queryset = Location.objects # Migrate with this enabled
serializer_class = LocationSerializer serializer_class = LocationSerializer
filter_class = LocationFilterSet filter_class = LocationFilterSet

@ -39,6 +39,7 @@ THIRD_PARTY_APPS = [
'sorl.thumbnail', 'sorl.thumbnail',
'compressor', 'compressor',
'password_reset', 'password_reset',
'mathfilters', # Basic math operations in templates; https://pypi.python.org/pypi/django-mathfilters
] ]
LOCAL_APPS = [ LOCAL_APPS = [
@ -74,6 +75,7 @@ TEMPLATES = [
'BACKEND': 'django.template.backends.django.DjangoTemplates', 'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(ROOT_DIR, 'templates')], 'DIRS': [os.path.join(ROOT_DIR, 'templates')],
'APP_DIRS': True, 'APP_DIRS': True,
'OPTIONS': { 'OPTIONS': {
'context_processors': [ 'context_processors': [
'django.template.context_processors.debug', 'django.template.context_processors.debug',
@ -81,6 +83,15 @@ TEMPLATES = [
'django.contrib.auth.context_processors.auth', 'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages', 'django.contrib.messages.context_processors.messages',
], ],
# Load these templatetags by default:
'builtins': [
'django.templatetags.static',
'mathfilters.templatetags.mathfilters',
'common.templatetags.common_tags',
],
}, },
}, },
] ]

@ -7,6 +7,7 @@ from django.views.generic import TemplateView
from .views import HomeTemplateView, TestChatTemplateView from .views import HomeTemplateView, TestChatTemplateView
urlpatterns = [ urlpatterns = [
url(r'^$', HomeTemplateView.as_view()), url(r'^$', HomeTemplateView.as_view()),
url('', include('social.apps.django_app.urls', namespace='social')), url('', include('social.apps.django_app.urls', namespace='social')),

@ -49,3 +49,17 @@ def model_fields(model, width=200):
'Blank? %s' % f.blank if not f.is_relation else '(relation)', 'Blank? %s' % f.blank if not f.is_relation else '(relation)',
'Hidden? %s' % (f.is_hidden() if hasattr(f, 'is_hidden') else False), 'Hidden? %s' % (f.is_hidden() if hasattr(f, 'is_hidden') else False),
) for f in model._meta.get_fields(include_hidden=True)], width=width) ) for f in model._meta.get_fields(include_hidden=True)], width=width)
def lorem(sentences=5):
words = _.split((
'a ac adipiscing amet ante arcu at auctor augue bibendum commodo condimentum consectetur consequat convallis curabitur'
'cursus diam dictum dignissim dolor donec duis efficitur eget eleifend elit enim erat et eu ex facilisis faucibus feugiat'
'finibus gravida iaculis id imperdiet in integer ipsum lacinia lacus laoreet lectus leo libero ligula lobortis lorem'
'luctus maecenas mauris metus mi mollis morbi nam nec neque nisi non nulla nullam nunc odio orci ornare pellentesque'
'pharetra phasellus porta porttitor posuere pretium proin pulvinar purus quam quis rhoncus rutrum sapien sed sem semper'
'sit sollicitudin tempor tempus tincidunt tortor turpis ullamcorper ultricies ut varius vehicula vel velit vestibulum'
'vitae viverra volutpat vulputate'
), ' ')
return _.join(_.times(lambda i_: _.capitalize(_.join(_.sample(words, _.random(5, 30)), ' ')), sentences), '. ')

@ -2,15 +2,17 @@ from django import template
from pprint import pprint, pformat from pprint import pprint, pformat
import os import os
register = template.Library() from archilance import util
register = template.Library()
# @register.inclusion_tag('templatetags/inspect.html', takes_context=True) # @register.inclusion_tag('templatetags/inspect.html', takes_context=True)
# def inspect(context, obj): # def inspect(context, obj):
# return {'obj': pformat(obj.__dict__)} # return {'obj': pformat(obj.__dict__)}
@register.filter('inspect') @register.filter
def inspect(obj): def inspect(obj):
return pformat(obj.__dict__) return pformat(obj.__dict__)
@ -30,7 +32,12 @@ def to_str(val):
return str(val) return str(val)
@register.filter('class_name') @register.filter('range')
def to_range(num):
return range(num)
@register.filter
def class_name(val): def class_name(val):
return type(val).__name__ return type(val).__name__
@ -40,9 +47,14 @@ def multiply(string, times):
return string * times return string * times
@register.filter('basename') @register.filter
def basename(val): def basename(val):
return os.path.basename(val) return os.path.basename(val)
@register.simple_tag
def lorem(*args, **kwargs):
return util.lorem(*args, **kwargs)
# import code; code.interact(local=dict(globals(), **locals())) # import code; code.interact(local=dict(globals(), **locals()))

@ -46,8 +46,8 @@ class ProjectFilterForm(forms.ModelForm):
self.fields['specialization'].required = False self.fields['specialization'].required = False
# self.fields['specialization'].queryset = Specialization.objects.root_nodes()[0].get_descendants() self.fields['specialization'].queryset = Specialization.objects.root_nodes()[0].get_descendants()
self.fields['specialization'].queryset = Specialization.objects # TODO: Tmp # self.fields['specialization'].queryset = Specialization.objects # Migrate with this enabled
class ProjectFilterRealtyForm(forms.ModelForm): class ProjectFilterRealtyForm(forms.ModelForm):
@ -75,8 +75,8 @@ class ProjectFilterRealtyForm(forms.ModelForm):
self.fields['construction_type'].empty_label = '' self.fields['construction_type'].empty_label = ''
self.fields['construction_type'].required = False self.fields['construction_type'].required = False
# self.fields['location'].queryset = Location.objects.root_nodes()[0].get_descendants() self.fields['location'].queryset = Location.objects.root_nodes()[0].get_descendants()
self.fields['location'].queryset = Location.objects # TODO: Tmp # self.fields['location'].queryset = Location.objects # Migrate with this enabled
class CustomerProjectEditForm(forms.ModelForm): class CustomerProjectEditForm(forms.ModelForm):
@ -117,8 +117,8 @@ class CustomerProjectEditForm(forms.ModelForm):
self.fields['realty'].empty_label = 'Создать новый' self.fields['realty'].empty_label = 'Создать новый'
# self.fields['specialization'].queryset = Specialization.objects.root_nodes()[0].get_descendants() self.fields['specialization'].queryset = Specialization.objects.root_nodes()[0].get_descendants()
self.fields['specialization'].queryset = Specialization.objects # TODO: Tmp # self.fields['specialization'].queryset = Specialization.objects # Migrate with this enabled
if self.instance.pk: if self.instance.pk:
self.fields['files'].queryset = self.instance.files self.fields['files'].queryset = self.instance.files
@ -144,8 +144,8 @@ class RealtyForm(forms.ModelForm):
self.request = kwargs.pop('request') self.request = kwargs.pop('request')
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
# self.fields['location'].queryset = Location.objects.root_nodes()[0].get_descendants() self.fields['location'].queryset = Location.objects.root_nodes()[0].get_descendants()
self.fields['location'].queryset = Location.objects # TODO: Tmp # self.fields['location'].queryset = Location.objects # Migrate with this enabled
class Realty1Form(forms.Form): class Realty1Form(forms.Form):

@ -65,8 +65,8 @@ class Project(models.Model):
) )
DEAL_TYPES = ( DEAL_TYPES = (
('secure_deal', 'Безопасная сделка (с резервированием бюджета) '), ('secure_deal', 'Безопасная сделка'), # "Безопасная сделка (с резервированием бюджета)"
('direct_payment', 'Прямая оплата Исполнителю на его кошелек/счет'), ('direct_payment', 'Прямая оплата'), # "Прямая оплата Исполнителю на его кошелек/счет"
) )
STATES = ( STATES = (

@ -37,3 +37,4 @@ sorl-thumbnail==12.3
sqlparse==0.1.19 sqlparse==0.1.19
tornado==4.3 tornado==4.3
natsort natsort
django-mathfilters

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-07-24 12:51
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('reviews', '0001_initial'),
]
operations = [
migrations.RemoveField(
model_name='review',
name='is_secured',
),
]

@ -2,7 +2,6 @@ from django.db import models
from django.core.validators import MaxValueValidator, MinValueValidator from django.core.validators import MaxValueValidator, MinValueValidator
class Review(models.Model): class Review(models.Model):
is_secured = models.BooleanField(default=False)
project = models.ForeignKey('projects.Project', related_name='reviews') project = models.ForeignKey('projects.Project', related_name='reviews')
stars = models.IntegerField(validators=[MinValueValidator(1), MaxValueValidator(5)]) stars = models.IntegerField(validators=[MinValueValidator(1), MaxValueValidator(5)])
text = models.TextField() text = models.TextField()

@ -15,8 +15,8 @@ class SpecListView(ListView):
context['root'] = root context['root'] = root
context['children'] = root.get_children() context['children'] = root.get_children()
# context['roots'] = Specialization.objects.root_nodes() context['roots'] = Specialization.objects.root_nodes()
context['roots'] = Specialization.objects.filter(name='_root') # TODO: Tmp # context['roots'] = Specialization.objects.filter(name='_root') # Migrate with this enabled
return context return context

@ -62,14 +62,14 @@ class ContractorFilterForm(forms.Form):
reverse_order = forms.BooleanField(required=False) reverse_order = forms.BooleanField(required=False)
specialization = forms.ModelChoiceField( specialization = forms.ModelChoiceField(
# queryset=Specialization.objects.root_nodes()[0].get_descendants(), queryset=Specialization.objects.root_nodes()[0].get_descendants(),
queryset=Specialization.objects, # TODO: Tmp, # queryset=Specialization.objects, # Migrate with this enabled
required=False, required=False,
) )
location = forms.ModelChoiceField( location = forms.ModelChoiceField(
# queryset=Location.objects.root_nodes()[0].get_descendants(), queryset=Location.objects.root_nodes()[0].get_descendants(),
queryset=Location.objects, # TODO: Tmp # queryset=Location.objects, # Migrate with this enabled
required=False, required=False,
) )

@ -1,7 +1,11 @@
{% extends 'partials/base.html' %} {% extends 'partials/base.html' %}
{% load staticfiles %} {% load staticfiles %}
{% block content %} {% block content %}
{% include 'partials/header.html' %} {% include 'partials/header.html' %}
<div class="container mainScore"> <div class="container mainScore">
<div class="row"> <div class="row">
<div class="projectsBlock disTab"> <div class="projectsBlock disTab">
@ -68,123 +72,124 @@
<button type="button" class="btn btn-default">Финансовая информация</button> <button type="button" class="btn btn-default">Финансовая информация</button>
</div> </div>
</div> </div>
<form method="post" enctype="multipart/form-data"> {% csrf_token %} <form method="post" enctype="multipart/form-data"> {% csrf_token %}
<div class="col-lg-12 col12 new-filter"> <div class="col-lg-12 col12 new-filter">
{{ form.errors }} {{ form.errors }}
<div class="filter clearfix"> <div class="filter clearfix">
<div class="titleF1 disTab"> <div class="titleF1 disTab">
<div class="col-lg-6">Имя, Фамилия, Отчество:</div> <div class="col-lg-6">Имя, Фамилия, Отчество:</div>
<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>
<div class="polsF1 disTab"> <div class="polsF1 disTab">
<div class="col-lg-6"> <div class="col-lg-6">
<input type="text" class="searchInp box-sizing" value="{{ form.fio.value|default_if_none:"" }}" name="{{ form.fio.name }}" /> <input type="text" class="searchInp box-sizing" value="{{ form.fio.value|default_if_none:"" }}" name="{{ form.fio.name }}" />
</div> </div>
<div class="col-lg-3"> <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 }}" /> <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>
<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"> <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> <input type="text" class="box-sizing surr surr2" value="{{ form.phone.value }}" name="{{ form.phone.name }}" />
<p class="text-afer"> </div>
{{ residency.choice_label }}
</p>
</div> </div>
{% endfor %} <div class="titleF1 titleFFE disTab">
</div> <div class="col-lg-12">Резиденство:</div>
<div class="titleF1 titleFFE disTab"> </div>
<div class="col-lg-12">Юридический статус:</div> <div class="searchF1 polsF1 polsFF radio-afer">
</div>
<div class="searchF1 polsF1 polsFF radio-afer new-doubt"> {% for residency in form.residency %}
{% for lstatus in form.legal_status %} <div class="col-lg-3">
<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>
<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">
<p class="text-afer"> {{ residency.choice_label }}
{{ lstatus.choice_label }} </p>
</p> </div>
</div> {% endfor %}
{% 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>
<div class="col-lg-3"> <div class="titleF1 titleFFE disTab">
<input type="text" value="{{ form.passport_number.value| default_if_none:"" }}" class="box-sizing surr surr2" name="{{ form.passport_number.name }}" placeholder="0099321" /> <div class="col-lg-12">Юридический статус:</div>
</div> </div>
<div class="col-lg-6"> <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>
</div> <div class="titleF1 disTab">
<div class="titleF1 disTab"> <div class="col-lg-6">Серия и номер паспорта:</div>
<div class="col-lg-3">Код подразделения:</div> <div class="col-lg-6">Кем выдан:</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>
<div class="col-lg-9"> <div class="polsF1 disTab new-doubt">
<input type="text" value="{{ form.passport_issued_by.value| default_if_none:"" }}" class="searchInp box-sizing" name="{{ form.passport_issued_by.name }}" /> <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>
</div> <div class="titleF1 disTab">
<div class="titleF1 disTab"> <div class="col-lg-3">Код подразделения:</div>
<div class="col-lg-3">Дата выдачи:</div> <div class="col-lg-9">Кем выдан:</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>
<div class="col-lg-9"> <div class="polsF1 disTab new-doubt">
{# <input type="text" class="searchInp box-sizing" />#} <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>
</div> <div class="titleF1 disTab">
<div class="titleF1 disTab"> <div class="col-lg-3">Дата выдачи:</div>
<div class="col-lg-3">ИНН:</div> <div class="col-lg-9">Почтовый адрес:</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>
<div class="col-lg-3"> <div class="polsF1 disTab new-doubt">
<input type="text" value="{{ form.yandex_money.value| default_if_none:"" }}" class="box-sizing surr surr2" name="{{ form.yandex_money.name }}" /> <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>
<div class="col-lg-3"> <div class="titleF1 disTab">
<input type="text" value="{{ form.credit_card_number.value| default_if_none:"" }}" class="box-sizing surr surr2" name="{{ form.credit_card_number.name }}" /> <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>
<div class="col-lg-3"> <div class="polsF1 disTab new-doubt">
{{ form.passport_scan.value }} <div class="col-lg-3">
<div class="upload2 up-l1 take-new"> <input type="text" value="{{ form.inn.value| default_if_none:"" }}" class="box-sizing surr surr2" name="{{ form.inn.name }}" />
</div>
<input type="file" name="{{ form.passport_scan.name }}"> <div class="col-lg-3">
<p>Прикрепить файл</p> <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> </div>
</div> <div class="searchF1 polsF1 polsFF links-filter">
<div class="searchF1 polsF1 polsFF links-filter"> <input class="btn-submit-link" type="submit" value="Сохранить" />
<input class="btn-submit-link" type="submit" value="Сохранить" /> </div>
</div> </div>
</div> </div>
</div> </form>
</form>
{% include 'partials/footer.html' %} {% include 'partials/footer.html' %}
</div> </div>
</div> </div>

@ -2,6 +2,8 @@
{% load staticfiles %} {% load staticfiles %}
{% load thumbnail %} {% load thumbnail %}
{% block content %} {% block content %}
{% include 'partials/header.html' %} {% include 'partials/header.html' %}

@ -1,8 +1,12 @@
{% extends 'partials/base.html' %} {% extends 'partials/base.html' %}
{% load staticfiles %} {% load staticfiles %}
{% load common_tags %} {% load common_tags %}
{% block content %} {% block content %}
{% include 'partials/header.html' %} {% include 'partials/header.html' %}
<div class="container mainScore"> <div class="container mainScore">
<div class="row"> <div class="row">
<form method="post" enctype="multipart/form-data">{% csrf_token %} <form method="post" enctype="multipart/form-data">{% csrf_token %}
@ -127,6 +131,7 @@
</div> </div>
</div> </div>
{% endblock %} {% endblock %}
{% block js_block %} {% block js_block %}
<script type="text/javascript"> <script type="text/javascript">
$(function(){ $(function(){

@ -2,6 +2,8 @@
{% load user_tags %} {% load user_tags %}
{% load staticfiles %} {% load staticfiles %}
{% block content %} {% block content %}
{% include 'partials/header.html' %} {% include 'partials/header.html' %}

@ -1,6 +1,9 @@
{% extends 'partials/base.html' %} {% extends 'partials/base.html' %}
{% load staticfiles %} {% load staticfiles %}
{% load thumbnail %} {% load thumbnail %}
{% block content %} {% block content %}
{% include 'partials/header.html' %} {% include 'partials/header.html' %}
<div class="container mainScore"> <div class="container mainScore">

@ -1,4 +1,5 @@
{% extends 'partials/base.html' %} {% extends 'partials/base.html' %}
{% load staticfiles %} {% load staticfiles %}
{% block content %} {% block content %}

@ -1,5 +1,6 @@
{% extends 'partials/base.html' %} {% extends 'partials/base.html' %}
{% block content %} {% block content %}
{% include 'partials/header.html' %} {% include 'partials/header.html' %}
@ -7,7 +8,37 @@
<div class="row"> <div class="row">
{% include 'partials/customer_profile_info_block.html' %} {% include 'partials/customer_profile_info_block.html' %}
<h1>{{ customer }}</h1> {% for review in reviews %}
<div class="new-comm-44">
<div class="col-lg-12">
<p class="nameComm">
<a href="#">{{ review.from_contractor.get_full_name }}</a>
</p>
<span class="dateComm44">
{{ review.project.get_deal_type_display }}
</span>
<div class="stars box-sizing">
{% for star in review.stars|range %}
<span class="glyphicon glyphicon-star starAct" aria-hidden="true"></span>
{% endfor %}
{% for filler_star in 5|sub:review.stars|range %}
<span class="glyphicon glyphicon-star" aria-hidden="true"></span>
{% endfor %}
{% if review.stars < 3 %}
<a href="#" onclick="return false" style="color: red">отрицательный отзыв</a>
{% else %}
<a href="#" onclick="return false">положительный отзыв</a>
{% endif %}
</div>
<p class="textComm44"><b>{{ review.text }}</b>{% if TEMPLATE_DEBUG %}. {% lorem %}{% endif %}</p>
</div>
</div>
{% endfor %}
{% include 'partials/footer.html' %} {% include 'partials/footer.html' %}
</div> </div>

@ -19,6 +19,7 @@ from .models import User, Team, ContractorFinancialInfo
from archilance.mixins import BaseMixin from archilance.mixins import BaseMixin
from common.utils import get_or_none from common.utils import get_or_none
from projects.forms import PortfolioForm from projects.forms import PortfolioForm
from reviews.models import Review
from specializations.models import Specialization from specializations.models import Specialization
from work_sell.forms import WorkSellForm from work_sell.forms import WorkSellForm
@ -224,10 +225,16 @@ class ContractorProfileDetailView(DetailView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
context['worksell_form'] = self.worksell_form_class context['worksell_form'] = self.worksell_form_class
context['portfolio_form'] = self.portfolio_form_class context['portfolio_form'] = self.portfolio_form_class
context['resume_diploms'] = self.object.contractor_resume.resume_files.filter(type='diplom')
context['resume_cro'] = self.object.contractor_resume.resume_files.filter(type='cro') resume = self.object.contractor_resume
if resume:
context['resume_diploms'] = resume.resume_files.filter(type='diplom')
context['resume_cro'] = resume.resume_files.filter(type='cro')
return context return context
@ -265,10 +272,23 @@ class CustomerProfileCurrentProjectsView(BaseMixin, DetailView):
context_object_name = 'customer' context_object_name = 'customer'
class CustomerProfileReviewsView(BaseMixin, DetailView): class CustomerProfileReviewsView(BaseMixin, View):
model = User
template_name = 'customer_profile_reviews.html' template_name = 'customer_profile_reviews.html'
context_object_name = 'customer'
def get(self, request, *args, **kwargs):
context = self.get_context_data(**_.merge({}, self.request.GET, kwargs))
customer = get_object_or_404(User.customer_objects, pk=self.kwargs['pk'])
reviews = Review.objects.filter(target_customer=customer)
# import code; code.interact(local=dict(globals(), **locals()))
context.update({
'reviews': reviews,
'customer': customer,
})
return render(request, self.template_name, context)
class CustomerProfileEditView(CheckForUserMixin, View): class CustomerProfileEditView(CheckForUserMixin, View):

@ -21,5 +21,5 @@ class WorkSellForm(forms.ModelForm):
# self.request = kwargs.pop('request') # self.request = kwargs.pop('request')
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
# self.fields['location'].queryset = Location.objects.root_nodes()[0].get_descendants() self.fields['location'].queryset = Location.objects.root_nodes()[0].get_descendants()
self.fields['location'].queryset = Location.objects # TODO: Tmp # self.fields['location'].queryset = Location.objects # Migrate with this enabled

Loading…
Cancel
Save