#ARC-27 Fixes bugs

remotes/origin/setup
Mukhtar 10 years ago
parent 2ce6c75793
commit 07596af147
  1. 2
      archilance/settings/base.py
  2. 18
      templates/partials/footer.html
  3. 4
      templates/partials/header.html
  4. 30
      templates/partials/header_guest.html
  5. 17
      templates/registration/activation_complete.html
  6. 15
      templates/registration/registration_complete.html
  7. 179
      templates/registration/registration_form.html
  8. 10
      users/forms.py
  9. 228
      users/templates/contractor_profile.html
  10. 0
      users/templates/contractor_resume_edit.html
  11. 3
      users/urls.py
  12. 26
      users/views.py

@ -111,7 +111,7 @@ WSGI_APPLICATION = 'archilance.wsgi.application'
DATABASES = { DATABASES = {
'default': { 'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2', 'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'archilance', 'NAME': 'archilance2',
'USER': 'postgres', 'USER': 'postgres',
'PASSWORD': 'postgres', 'PASSWORD': 'postgres',
'HOST': 'localhost', 'HOST': 'localhost',

@ -20,19 +20,19 @@
<p>Профиль</p> <p>Профиль</p>
<ul> <ul>
<li> <li>
<a href="javascript:void(0)">Войти</a> <a href="{% url 'auth_login' %}">Войти</a>
</li> </li>
<li> <li>
<a href="javascript:void(0)">Регистрация</a> <a href="">Регистрация</a>
</li> </li>
<li> <li>
<a href="javascript:void(0)">Востановить доступ</a> <a href="">Востановить доступ</a>
</li> </li>
<li> <li>
<a href="javascript:void(0)">Опубликовать проект</a> <a href="">Опубликовать проект</a>
</li> </li>
</ul> </ul>
</div> </div>
@ -42,23 +42,23 @@
<ul> <ul>
<li> <li>
<a href="javascript:void(0)">Помощь</a> <a href="">Помощь</a>
</li> </li>
<li> <li>
<a href="javascript:void(0)">Правила сайта</a> <a href="">Правила сайта</a>
</li> </li>
<li> <li>
<a href="javascript:void(0)">Команда</a> <a href="">Команда</a>
</li> </li>
<li> <li>
<a href="javascript:void(0)">FAQ</a> <a href="">FAQ</a>
</li> </li>
<li> <li>
<a href="javascript:void(0)">Контакты</a> <a href="">Контакты</a>
</li> </li>
</ul> </ul>
</div> </div>

@ -100,7 +100,7 @@
</a> </a>
</li> </li>
<li class="icon_mm3"> <li class="icon_mm3">
<a href="#">Сообщения<span></span></a> <a href="{% url 'chat:chat-user' %}">Сообщения<span></span></a>
</li> </li>
<li class="icon_mm4"> <li class="icon_mm4">
<a href="{% url 'wallets:score-detail' pk=request.user.pk %}">Счет<span></span></a> <a href="{% url 'wallets:score-detail' pk=request.user.pk %}">Счет<span></span></a>
@ -126,7 +126,7 @@
{% else %} {% else %}
<div class="col-lg-2"> <div class="col-lg-2">
<a href="{% url 'registration_register' %}" class="reg">Регистрация</a> <a href="{% url 'registration_register' %}" class="reg">Регистрация</a>
<div class="lock"></div> <a href="{% url 'auth_login' %}"><div class="lock"></div></a>
</div> </div>
{% endif %} {% endif %}
</div> </div>

@ -1,30 +0,0 @@
{% load staticfiles %}
<div class="wrTop {">
<div class="container-fluid topMain">
<div class="row">
<div class="col-lg-3">
<div class="logo" onClick="window.location='/'"></div>
</div>
<div class="col-lg-7">
<ul class="mainMenu">
<li class="icon_tm1">
<a href="javascript:void(0)">Биржа проектов</a>
<span></span>
</li>
<li class="icon_tm2">
<a href="javascript:void(0)">Поиск исполнителей</a>
<span></span>
</li>
<li class="icon_tm3">
<a href="javascript:void(0)">Работы на продажу</a>
<span></span>
</li>
</ul>
</div>
<div class="col-lg-2">
<a href="javascript:void(0)" class="reg">регистрация</a>
<div class="lock"></div>
</div>
</div>
</div>
</div>

@ -1 +1,16 @@
<h1>Активация пользователя</h1> {% extends 'partials/base.html' %}
{% block content %}
{% include 'partials/header.html' %}
<div class="container mainScore">
<div class="row">
<div class="col-lg-12">
<p class="titleScore">Активация пользователя</p>
</div>
{% include 'partials/footer.html' %}
</div>
</div>
{% endblock %}

@ -1,7 +1,16 @@
{% extends 'partials/base.html' %} {% extends 'partials/base.html' %}
{% block content %} {% block content %}
<div class="col-lg-12"> {% include 'partials/header.html' %}
<p class="titleScore">Регистрация прошла успешно</p> <div class="container mainScore">
</div> <div class="row">
<div class="col-lg-12">
<p class="titleScore">Регистрация прошла успешно</p>
</div>
{% include 'partials/footer.html' %}
</div>
</div>
{% endblock %} {% endblock %}

@ -1,100 +1,103 @@
{% extends 'partials/base.html' %} {% extends 'partials/base.html' %}
{% block content %} {% block content %}
{% include 'partials/header.html' %} {% include 'partials/header.html' %}
<div class="col-lg-12"> <div class="container mainScore">
<p class="titleScore">Регистрация </p> <div class="row">
</div> <div class="col-lg-12">
<div class="form-regestration"> <p class="titleScore">Регистрация </p>
<form method="post">{% csrf_token %} </div>
{{ form.errors }} <div class="form-regestration">
<div class="col-lg-12 select-reg polsF1"> <form method="post">{% csrf_token %}
{% if request.GET.type == 'customer' %} {{ form.errors }}
<input type="hidden" name="group_id" value="Заказчики" /> <div class="col-lg-12 select-reg polsF1">
{% elif request.GET.type == 'contractor' %} {% if request.GET.type == 'customer' %}
<input type="hidden" name="group_id" value="Исполнители" /> <input type="hidden" name="group_id" value="Заказчики"/>
{% else %} {% elif request.GET.type == 'contractor' %}
<div class="col-lg-12 select-reg polsF1"> <input type="hidden" name="group_id" value="Исполнители"/>
<select class="selectpicker3" name="group_id"> {% else %}
<option>Выберете вашу роль</option> <div class="col-lg-12 select-reg polsF1">
<option value="Исполнители">Исполнитель</option> <select class="selectpicker3" name="group_id">
<option value="Заказчики">Заказчик</option> <option>Выберете вашу роль</option>
</select> <option value="Исполнители">Исполнитель</option>
</div> <option value="Заказчики">Заказчик</option>
{% endif %} </select>
</div> </div>
<div class="col-lg-12 select-reg"> {% endif %}
<input type="text" name="{{ form.username.name }}" class="box-sizing email-reg" placeholder="Nickname"> </div>
</div> <div class="col-lg-12 select-reg">
<div class="col-lg-12 select-reg"> <input type="text" name="{{ form.username.name }}" class="box-sizing email-reg"
<input type="text" name="{{ form.email.name }}" class="box-sizing email-reg" placeholder="Электронная почта"> placeholder="Nickname">
</div> </div>
<div class="col-lg-12 select-reg"> <div class="col-lg-12 select-reg">
<input type="password" name="{{ form.password1.name }}" class="box-sizing pass-reg" placeholder="Пароль"> <input type="text" name="{{ form.email.name }}" class="box-sizing email-reg"
</div> placeholder="Электронная почта">
</div>
<div class="col-lg-12 select-reg">
<input type="password" name="{{ form.password1.name }}" class="box-sizing pass-reg"
placeholder="Пароль">
</div>
<div class="col-lg-12 select-reg"> <div class="col-lg-12 select-reg">
<input type="password" name="{{ form.password2.name }}" class="box-sizing pass-reg" placeholder="Пароль"> <input type="password" name="{{ form.password2.name }}" class="box-sizing pass-reg"
</div> placeholder="Пароль">
<div class="col-lg-12 select-reg"> </div>
<button class="reg-sub">Зарегистрироваться</button> <div class="col-lg-12 select-reg">
</div> <button class="reg-sub">Зарегистрироваться</button>
<div class="col-lg-12"> </div>
<div class="col-xs-12 text-center"> <div class="clearfix"></div>
<div class="btn-group" role="group">
<div class="pull-left -social -fb"> <div class="col-lg-12" style="margin-top: 10px;">
<a href="{% url 'social:begin' 'facebook' %}?user_type=contractor"> <div class="col-xs-12 text-center">
<img src="http://nepesh.com/static/img/social/fb.png" alt="fb"> <div class="btn-group" role="group">
</a>
</div>
<div class="pull-left -social -tw"> <div class="pull-left -social -fb">
<a href="{% url 'social:begin' 'twitter' %}"> <a href="{% url 'social:begin' 'facebook' %}?user_type=contractor">
<img src="http://nepesh.com/static/img/social/tw.png" alt="tw"> <img src="http://nepesh.com/static/img/social/fb.png" alt="fb">
</a> </a>
</div> </div>
<div class="pull-left -social -gplus"> <div class="pull-left -social -tw">
<a href="{% url 'social:begin' 'google-oauth2' %}"> <a href="{% url 'social:begin' 'twitter' %}">
<img src="http://nepesh.com/static/img/social/gplus.png" alt="gplus"> <img src="http://nepesh.com/static/img/social/tw.png" alt="tw">
</a> </a>
</div> </div>
<div class="pull-left -social -vk"> <div class="pull-left -social -gplus">
<a href="{% url 'social:begin' 'vk-oauth2' %}"> <a href="{% url 'social:begin' 'google-oauth2' %}">
<img src="http://nepesh.com/static/img/social/vk.png" alt="vk"> <img src="http://nepesh.com/static/img/social/gplus.png" alt="gplus">
</a> </a>
</div> </div>
<div class="pull-left -social -ok"> <div class="pull-left -social -vk">
<a href="{% url 'social:begin' 'odnoklassniki-oauth2' %}"> <a href="{% url 'social:begin' 'vk-oauth2' %}">
<img src="http://nepesh.com/static/img/social/ok.gif" alt="yt"> <img src="http://nepesh.com/static/img/social/vk.png" alt="vk">
</a> </a>
</div> </div>
</div> <div class="pull-left -social -ok">
</div> <a href="{% url 'social:begin' 'odnoklassniki-oauth2' %}">
<img src="http://nepesh.com/static/img/social/ok.gif" alt="yt">
</a>
</div>
</div>
</div>
</div>
<div class="col-lg-12 select-reg">
<div class="check-reg">
<label><input type="checkbox" name="check-reg"><span></span></label>
<p>Регистрируясь, я подтверждаю свое согласие у условиями <a href="#">пользавательского
соглашения</a></p>
</div>
</div>
</form>
<div class="col-lg-12 select-reg">
<a href="" class="have-ac">Я уже зарегистрирован на ресурсе</a>
</div> </div>
<div class="col-lg-12 select-reg">
<div class="check-reg"> </div>
<label><input type="checkbox" name="check-reg"><span></span></label>
<p>Регистрируясь, я подтверждаю свое согласие у условиями <a href="#">пользавательского соглашения</a></p> {% include 'partials/footer.html' %}
</div> </div>
</div> </div>
</form>
<div class="col-lg-12 select-reg">
<a href="#" class="have-ac">Я уже зарегистрирован на ресурсе</a>
</div>
</div>
{#<h1>Регистрация</h1>#}
{# <form action="" method="post">#}
{# {% csrf_token %}#}
{# {% for field in form %}#}
{# <div class="row">#}
{# {{ field.label }}#}
{# {{ field }}#}
{# </div>#}
{# {% endfor %}#}
{# <input type="submit" value="Зарегистрировать">#}
{# </form>#}
{% endblock %} {% endblock %}

@ -2,7 +2,7 @@ from django import forms
import itertools import itertools
import pydash as _; _.map = _.map_; _.filter = _.filter_ import pydash as _; _.map = _.map_; _.filter = _.filter_
from .models import User, UserFinancialInfo, Team, GENDERS from .models import User, UserFinancialInfo, Team, ContractorResume, GENDERS
from common.models import Location from common.models import Location
from projects.models import Project, Realty, BuildingClassfication, ConstructionType from projects.models import Project, Realty, BuildingClassfication, ConstructionType
from specializations.models import Specialization from specializations.models import Specialization
@ -18,6 +18,14 @@ class TeamForm(forms.ModelForm):
) )
class ContractorResumeForm(forms.ModelForm):
class Meta:
model = ContractorResume
fields = (
'text',
)
class UserProfileEditForm(forms.ModelForm): class UserProfileEditForm(forms.ModelForm):
gender = forms.ChoiceField( gender = forms.ChoiceField(
choices=GENDERS, choices=GENDERS,

@ -66,11 +66,11 @@
</p> </p>
<p class="cityUser">Россия, Москва</p> <p class="cityUser">Россия, Москва</p>
<p class="navv">На сайте 8 лет и 3 месяца</p> <p class="navv">На сайте 8 лет и 3 месяца</p>
{% if contractor.contractor_status == 'free' %} {% if contractor.contractor_status == 'free' %}
<div class="statusUser">Свободен</div> <div class="statusUser">Свободен</div>
{% endif %} {% endif %}
<a href="javascript:void(0)" class="showCon">показать контакты</a> <a href="javascript:void(0)" class="showCon">показать контакты</a>
</div> </div>
<div class="col-lg-4"> <div class="col-lg-4">
@ -110,27 +110,28 @@
<div class="tab-content"> <div class="tab-content">
<div id="tab11" class="tab-pane fade in active"> <div id="tab11" class="tab-pane fade in active">
{% if contractor.pk == request.user.pk %} {% if contractor.pk == request.user.pk %}
<div class="col-lg-9"> <div class="col-lg-9">
<p class="addWork"> <p class="addWork">
<a href="#" data-toggle="modal" data-target="#portfolio-modal">Добавить работу</a> <a href="#" data-toggle="modal" data-target="#portfolio-modal">Добавить работу</a>
</p> </p>
</div> </div>
<div id="portfolio-modal" class="modal fade"> <div id="portfolio-modal" class="modal fade">
<div class="modal-dialog" style="width:900px;"> <div class="modal-dialog" style="width:900px;">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">× <button type="button" class="close" data-dismiss="modal" aria-hidden="true">
</button> ×
<h4 class="modal-title">Добавить портфолио</h4> </button>
<h4 class="modal-title">Добавить портфолио</h4>
</div>
{% include 'portfolio_create_form.html' %}
</div> </div>
{% include 'portfolio_create_form.html' %}
</div> </div>
</div> </div>
</div> {% endif %}
{% endif %}
<div class="galleryWork2 disTab"> <div class="galleryWork2 disTab">
{% for p in user.portfolios.all %} {% for p in user.portfolios.all %}
@ -150,10 +151,13 @@
</div> </div>
</a> </a>
<div class="insetBI insetBI2"> <div class="insetBI insetBI2">
<form action="{% url 'projects:contractor-portfolio-trash' pk=p.pk %}" method="POST" novalidate> <form action="{% url 'projects:contractor-portfolio-trash' pk=p.pk %}"
method="POST" novalidate>
{% csrf_token %} {% csrf_token %}
<input type="hidden" name="next" value="{{ request.path }}"> <input type="hidden" name="next" value="{{ request.path }}">
<a href="#" onclick="$(this).closest('form').submit(); return false"><i class="fa fa-times"></i></a> <a href="#"
onclick="$(this).closest('form').submit(); return false"><i
class="fa fa-times"></i></a>
</form> </form>
</div> </div>
@ -172,25 +176,26 @@
</div> </div>
<div id="tab12" class="tab-pane fade"> <div id="tab12" class="tab-pane fade">
{% if contractor.pk == request.user.pk %} {% if contractor.pk == request.user.pk %}
<div class="col-lg-9"> <div class="col-lg-9">
<p class="addWork"> <p class="addWork">
<a href="#" data-toggle="modal" data-target="#worksell-modal">Добавить проект</a> <a href="#" data-toggle="modal" data-target="#worksell-modal">Добавить проект</a>
</p> </p>
</div> </div>
<div id="worksell-modal" class="modal fade"> <div id="worksell-modal" class="modal fade">
<div class="modal-dialog" style="width: 900px;"> <div class="modal-dialog" style="width: 900px;">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">× <button type="button" class="close" data-dismiss="modal" aria-hidden="true">
</button> ×
<h4 class="modal-title">Добавить готовую работу</h4> </button>
<h4 class="modal-title">Добавить готовую работу</h4>
</div>
{% include 'worksell_create_form.html' %}
</div> </div>
{% include 'worksell_create_form.html' %}
</div> </div>
</div> </div>
</div> {% endif %}
{% endif %}
<div class="galleryWork2 disTab"> <div class="galleryWork2 disTab">
{% for ws in user.work_sell.all %} {% for ws in user.work_sell.all %}
@ -198,9 +203,10 @@
<div class="insetCol box-sizing disTab"> <div class="insetCol box-sizing disTab">
{% thumbnail ws.get_cover "224x224" crop="center" as im %} {% thumbnail ws.get_cover "224x224" crop="center" as im %}
<div class="imgGal" style="background:rgba(0, 0, 0, 0) url('{{ im.url }}') no-repeat scroll center center / cover ;"> <div class="imgGal"
<div class="imgFigure"></div> style="background:rgba(0, 0, 0, 0) url('{{ im.url }}') no-repeat scroll center center / cover ;">
</div> <div class="imgFigure"></div>
</div>
{% endthumbnail %} {% endthumbnail %}
<div class="cenaImg box-sizing"> <div class="cenaImg box-sizing">
@ -219,10 +225,13 @@
</a> </a>
</div> </div>
<div class="insetBI insetBI2"> <div class="insetBI insetBI2">
<form action="{% url 'work_sell:contractor-worksell-trash' pk=ws.pk %}" method="POST" novalidate> <form action="{% url 'work_sell:contractor-worksell-trash' pk=ws.pk %}"
method="POST" novalidate>
{% csrf_token %} {% csrf_token %}
<input type="hidden" name="next" value="{{ request.path }}"> <input type="hidden" name="next" value="{{ request.path }}">
<a href="#" onclick="$(this).closest('form').submit(); return false"><i class="fa fa-times"></i></a> <a href="#"
onclick="$(this).closest('form').submit(); return false"><i
class="fa fa-times"></i></a>
</form> </form>
</div> </div>
@ -244,10 +253,7 @@
<input type="file" name="upload"> <input type="file" name="upload">
<p>Загрузить резюме</p> <p>Загрузить резюме</p>
</div> </div>
<div class="upload2 up-l2"> {#w#}
<input type="file" name="upload">
<p>Загрузить файл</p>
</div>
</div> </div>
<div class="col-lg-9 resume-block"> <div class="col-lg-9 resume-block">
<div class="block-is box-sizing"> <div class="block-is box-sizing">
@ -271,35 +277,30 @@
<div class="list-summ-block"> <div class="list-summ-block">
<div class="col-lg-4"> <div class="col-lg-4">
<ul class="list-summ"> <ul class="list-summ">
{% if contractor.website %}
<li>{{ contractor.website }}</li> <li>{{ contractor.website }}</li>
{% endif %}
<li>{{ contractor.email }}</li> <li>{{ contractor.email }}</li>
{% if contractor.phone %}
<li>{{ contractor.phone }}</li> <li>{{ contractor.phone }}</li>
<li>Россия, Москва</li> {% endif %}
</ul> </ul>
</div> </div>
<div class="col-lg-6 col-lg-offset-2"> <div class="col-lg-6 col-lg-offset-2">
<div class="dashedCol4"> {% specialization_widget contractor.pk %}
<p class="specUser">
Специализации:
</p>
<div class="insetSpec">
<span>Интерьеры</span>
<span>2-й</span>
</div>
<div class="insetSpec">
<span>Визуализация/3D</span>
<span>45-й</span>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="col-lg-12 wr-inset-pluss"> <div class="col-lg-12 wr-inset-pluss">
<div class="pluss-block"> <div class="pluss-block" id="resume-text-out">
{{ contractor.contractor_resume.text }} {{ contractor.contractor_resume.text }}
<a href="#" data-toggle="modal" data-target="#resume-text-edit">
<a href="#" data-toggle="modal" data-target="#resume-text-edit">Редактировать</a> <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
</a>
</div> </div>
<!-- Редактирование текста резюме (модальное окно)--> <!-- Редактирование текста резюме (модальное окно)-->
@ -307,19 +308,25 @@
<div class="modal-dialog" style="width:900px;"> <div class="modal-dialog" style="width:900px;">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> <button type="button" class="close" data-dismiss="modal"
aria-hidden="true">×
</button>
<h4 class="modal-title">Редактировать текст резюме</h4> <h4 class="modal-title">Редактировать текст резюме</h4>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<div class="textAreaBlock2 text-nn box-sizing disTab"> <div style="height: 180px;">
<p>Описание резюме</p> <form id="resume-edit-form">
<textarea name="" id="text-new">{{ contractor.contractor_resume.text }}</textarea> <div class="textAreaBlock2 text-nn box-sizing disTab">
</div> <textarea name="text"
id="text-new">{{ contractor.contractor_resume.text }}</textarea>
</div>
<div class="searchF1 polsF1 polsFF links-filter">
<input class="btn-submit-link" type="submit" value="Сохранить">
</div>
</form>
</div>
<div class="searchF1 polsF1 polsFF links-filter">
<input class="btn-submit-link" type="submit" value="Сохранить">
</div>
</div> </div>
<div class="modal-footer"></div> <div class="modal-footer"></div>
</div> </div>
@ -403,26 +410,26 @@
<div id="tab14" class="tab-pane fade"> <div id="tab14" class="tab-pane fade">
{% for review in contractor.contractor_reviews.all %} {% for review in contractor.contractor_reviews.all %}
<div class="new-comm-44"> <div class="new-comm-44">
<div class="col-lg-12"> <div class="col-lg-12">
<p class="nameComm"> <p class="nameComm">
<a href="#">{{ review.get_sender }}</a> <a href="#">{{ review.get_sender }}</a>
</p> </p>
{% if review.project.deal_type == 'secure_deal' %} {% if review.project.deal_type == 'secure_deal' %}
<span class="dateComm44"> <span class="dateComm44">
Безопасная сделка Безопасная сделка
</span> </span>
{% endif %} {% endif %}
<div class="stars box-sizing"> <div class="stars box-sizing">
<a href="#">положительный отзыв</a> <a href="#">положительный отзыв</a>
</div>
<p class="textComm44">
{{ review.text }}
</p>
</div> </div>
<p class="textComm44">
{{ review.text }}
</p>
</div> </div>
</div> {% endfor %}
{% endfor %}
</div> </div>
</div> </div>
@ -439,8 +446,37 @@
{% block js_block %} {% block js_block %}
<script type="text/javascript"> <script type="text/javascript">
var userId = '{{ contractor.pk }}'; var userId = '{{ contractor.pk }}';
$(function () { $(function () {
$('#resume-edit-form').on('submit', function (e) {
e.preventDefault();
var resumeEditUrl = "{% url 'users:contractor-resume-update' contractor.contractor_resume.pk %}";
var dataSerializer = $(this).serialize();
$.ajax({
url: resumeEditUrl,
method: 'POST',
beforeSend: function (xhr) {
xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'))
},
data: dataSerializer,
dataType: 'json',
success: function (data) {
console.log(data);
if (data.status == 'ok') {
$("#resume-text-out").html(data.text);
$("#resume-text-edit").close();
}
},
error: function (jqXHR, exception) {
console.log(jqXHR);
console.log(exception);
console.log(jqXHR.statusCode);
}
});
});
$('#worksell-add-form').on('submit', function (e) { $('#worksell-add-form').on('submit', function (e) {
e.preventDefault(); e.preventDefault();
var dataSerializer = $(this).serialize(); var dataSerializer = $(this).serialize();
@ -472,13 +508,13 @@
dataType: 'json', dataType: 'json',
success: function (data) { success: function (data) {
if (data.status == 'ok') { if (data.status == 'ok') {
$('#portfolio-add-form').each(function(){ $('#portfolio-add-form').each(function () {
this.reset(); this.reset();
}); });
location.reload(); location.reload();
}else if(data.status == 'no'){ } else if (data.status == 'no') {
$.each(data.form_errors, function(k,v){ $.each(data.form_errors, function (k, v) {
$('.error-'+ k).html(v).show(); $('.error-' + k).html(v).show();
}); });
} }
}, },
@ -574,7 +610,8 @@
} }
}, },
dataType: 'json', dataType: 'json',
done: function (e, data) {; done: function (e, data) {
;
$.each(data.result.files, function (index, file) { $.each(data.result.files, function (index, file) {
var htmlImg = '<div class="col-lg-4"><div class="insetCol box-sizing disTab"><div class="imgGal" style="background: url(+ file.url +) no-repeat center;"><div class="imgFigure"></div></div></div> ' + var htmlImg = '<div class="col-lg-4"><div class="insetCol box-sizing disTab"><div class="imgGal" style="background: url(+ file.url +) no-repeat center;"><div class="imgFigure"></div></div></div> ' +
'<div class="insetCol2 box-sizing disTab"><p>Название</p><div class="buttonsImg" distab="">' + '<div class="insetCol2 box-sizing disTab"><p>Название</p><div class="buttonsImg" distab="">' +
@ -607,7 +644,8 @@
} }
}, },
dataType: 'json', dataType: 'json',
done: function (e, data) {; done: function (e, data) {
;
$.each(data.result.files, function (index, file) { $.each(data.result.files, function (index, file) {
var htmlImg = '<div class="col-lg-4"><div class="insetCol box-sizing disTab"><div class="imgGal" style="background: url(+ file.url +) no-repeat center;"><div class="imgFigure"></div></div></div> ' + var htmlImg = '<div class="col-lg-4"><div class="insetCol box-sizing disTab"><div class="imgGal" style="background: url(+ file.url +) no-repeat center;"><div class="imgFigure"></div></div></div> ' +
'<div class="insetCol2 box-sizing disTab"><p>Название</p><div class="buttonsImg" distab="">' + '<div class="insetCol2 box-sizing disTab"><p>Название</p><div class="buttonsImg" distab="">' +

@ -15,6 +15,7 @@ from .views import (
UserListView, UserListView,
UserProfileEditView, UserProfileEditView,
TeamCreateView, TeamCreateView,
ContractorResumeUpdateView,
) )
@ -32,6 +33,8 @@ urlpatterns = [
urls.url(r'^customers/(?P<pk>\d+)/reviews/$', CustomerProfileReviewsView.as_view(), name='customer-profile-reviews'), urls.url(r'^customers/(?P<pk>\d+)/reviews/$', CustomerProfileReviewsView.as_view(), name='customer-profile-reviews'),
urls.url(r'^contractors/$', ContractorFilterView.as_view(), name='contractor-filter'), urls.url(r'^contractors/$', ContractorFilterView.as_view(), name='contractor-filter'),
urls.url(r'^contractors/resume/(?P<pk>\d+)/edit/$', ContractorResumeUpdateView.as_view(), name='contractor-resume-update'),
urls.url(r'^contractors/team/create/$', TeamCreateView.as_view(), name='team-create'), urls.url(r'^contractors/team/create/$', TeamCreateView.as_view(), name='team-create'),
urls.url(r'^contractors/(?P<pk>\d+)/$', ContractorProfileDetailView.as_view(), name='contractor-profile'), urls.url(r'^contractors/(?P<pk>\d+)/$', ContractorProfileDetailView.as_view(), name='contractor-profile'),
urls.url(r'^contractor-office/(?P<pk>\d+)/$', ContractorOfficeDetailView.as_view(), name='contractor-office'), urls.url(r'^contractor-office/(?P<pk>\d+)/$', ContractorOfficeDetailView.as_view(), name='contractor-office'),

@ -1,6 +1,9 @@
from django.conf import settings from django.conf import settings
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.models import Group from django.views.generic import UpdateView
from .models import ContractorResume
from .forms import ContractorResumeForm
from django.http import JsonResponse
from django.core.mail import send_mail from django.core.mail import send_mail
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
@ -499,6 +502,27 @@ class TeamCreateView(View):
return redirect('users:contractor-office', pk=request.user.pk) return redirect('users:contractor-office', pk=request.user.pk)
class ContractorResumeUpdateView(UpdateView):
model = ContractorResume
form_class = ContractorResumeForm
def form_valid(self, form):
if self.request.is_ajax():
self.object = form.save()
data = {
'text': self.object.text,
'status': 'ok',
}
return JsonResponse(data)
return super().form_valid(form)
def form_invalid(self, form):
if self.request.is_ajax():
return JsonResponse(form.errors, status=400)
return super().form_invalid(form)
class CustomerProfileReviewsView(BaseMixin, View): class CustomerProfileReviewsView(BaseMixin, View):
template_name = 'customer_profile_reviews.html' template_name = 'customer_profile_reviews.html'

Loading…
Cancel
Save