#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. 224
      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 = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'archilance',
'NAME': 'archilance2',
'USER': 'postgres',
'PASSWORD': 'postgres',
'HOST': 'localhost',

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

@ -100,7 +100,7 @@
</a>
</li>
<li class="icon_mm3">
<a href="#">Сообщения<span></span></a>
<a href="{% url 'chat:chat-user' %}">Сообщения<span></span></a>
</li>
<li class="icon_mm4">
<a href="{% url 'wallets:score-detail' pk=request.user.pk %}">Счет<span></span></a>
@ -126,7 +126,7 @@
{% else %}
<div class="col-lg-2">
<a href="{% url 'registration_register' %}" class="reg">Регистрация</a>
<div class="lock"></div>
<a href="{% url 'auth_login' %}"><div class="lock"></div></a>
</div>
{% endif %}
</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' %}
{% block content %}
<div class="col-lg-12">
<p class="titleScore">Регистрация прошла успешно</p>
</div>
{% 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,100 +1,103 @@
{% extends 'partials/base.html' %}
{% block content %}
{% include 'partials/header.html' %}
<div class="col-lg-12">
<p class="titleScore">Регистрация </p>
</div>
<div class="form-regestration">
<form method="post">{% csrf_token %}
{{ form.errors }}
<div class="col-lg-12 select-reg polsF1">
{% if request.GET.type == 'customer' %}
<input type="hidden" name="group_id" value="Заказчики" />
{% elif request.GET.type == 'contractor' %}
<input type="hidden" name="group_id" value="Исполнители" />
{% else %}
<div class="col-lg-12 select-reg polsF1">
<select class="selectpicker3" name="group_id">
<option>Выберете вашу роль</option>
<option value="Исполнители">Исполнитель</option>
<option value="Заказчики">Заказчик</option>
</select>
</div>
{% endif %}
</div>
<div class="col-lg-12 select-reg">
<input type="text" name="{{ form.username.name }}" class="box-sizing email-reg" placeholder="Nickname">
</div>
<div class="col-lg-12 select-reg">
<input type="text" name="{{ form.email.name }}" class="box-sizing email-reg" 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="container mainScore">
<div class="row">
<div class="col-lg-12">
<p class="titleScore">Регистрация </p>
</div>
<div class="form-regestration">
<form method="post">{% csrf_token %}
{{ form.errors }}
<div class="col-lg-12 select-reg polsF1">
{% if request.GET.type == 'customer' %}
<input type="hidden" name="group_id" value="Заказчики"/>
{% elif request.GET.type == 'contractor' %}
<input type="hidden" name="group_id" value="Исполнители"/>
{% else %}
<div class="col-lg-12 select-reg polsF1">
<select class="selectpicker3" name="group_id">
<option>Выберете вашу роль</option>
<option value="Исполнители">Исполнитель</option>
<option value="Заказчики">Заказчик</option>
</select>
</div>
{% endif %}
</div>
<div class="col-lg-12 select-reg">
<input type="text" name="{{ form.username.name }}" class="box-sizing email-reg"
placeholder="Nickname">
</div>
<div class="col-lg-12 select-reg">
<input type="text" name="{{ form.email.name }}" class="box-sizing email-reg"
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">
<input type="password" name="{{ form.password2.name }}" class="box-sizing pass-reg" placeholder="Пароль">
</div>
<div class="col-lg-12 select-reg">
<button class="reg-sub">Зарегистрироваться</button>
</div>
<div class="col-lg-12">
<div class="col-xs-12 text-center">
<div class="btn-group" role="group">
<div class="col-lg-12 select-reg">
<input type="password" name="{{ form.password2.name }}" class="box-sizing pass-reg"
placeholder="Пароль">
</div>
<div class="col-lg-12 select-reg">
<button class="reg-sub">Зарегистрироваться</button>
</div>
<div class="clearfix"></div>
<div class="pull-left -social -fb">
<a href="{% url 'social:begin' 'facebook' %}?user_type=contractor">
<img src="http://nepesh.com/static/img/social/fb.png" alt="fb">
</a>
</div>
<div class="col-lg-12" style="margin-top: 10px;">
<div class="col-xs-12 text-center">
<div class="btn-group" role="group">
<div class="pull-left -social -tw">
<a href="{% url 'social:begin' 'twitter' %}">
<img src="http://nepesh.com/static/img/social/tw.png" alt="tw">
</a>
</div>
<div class="pull-left -social -fb">
<a href="{% url 'social:begin' 'facebook' %}?user_type=contractor">
<img src="http://nepesh.com/static/img/social/fb.png" alt="fb">
</a>
</div>
<div class="pull-left -social -gplus">
<a href="{% url 'social:begin' 'google-oauth2' %}">
<img src="http://nepesh.com/static/img/social/gplus.png" alt="gplus">
</a>
</div>
<div class="pull-left -social -tw">
<a href="{% url 'social:begin' 'twitter' %}">
<img src="http://nepesh.com/static/img/social/tw.png" alt="tw">
</a>
</div>
<div class="pull-left -social -vk">
<a href="{% url 'social:begin' 'vk-oauth2' %}">
<img src="http://nepesh.com/static/img/social/vk.png" alt="vk">
</a>
</div>
<div class="pull-left -social -gplus">
<a href="{% url 'social:begin' 'google-oauth2' %}">
<img src="http://nepesh.com/static/img/social/gplus.png" alt="gplus">
</a>
</div>
<div class="pull-left -social -ok">
<a href="{% url 'social:begin' 'odnoklassniki-oauth2' %}">
<img src="http://nepesh.com/static/img/social/ok.gif" alt="yt">
</a>
</div>
<div class="pull-left -social -vk">
<a href="{% url 'social:begin' 'vk-oauth2' %}">
<img src="http://nepesh.com/static/img/social/vk.png" alt="vk">
</a>
</div>
</div>
</div>
<div class="pull-left -social -ok">
<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 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>
{#<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>#}
</div>
{% include 'partials/footer.html' %}
</div>
</div>
{% endblock %}

@ -2,7 +2,7 @@ from django import forms
import itertools
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 projects.models import Project, Realty, BuildingClassfication, ConstructionType
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):
gender = forms.ChoiceField(
choices=GENDERS,

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

@ -15,6 +15,7 @@ from .views import (
UserListView,
UserProfileEditView,
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'^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/(?P<pk>\d+)/$', ContractorProfileDetailView.as_view(), name='contractor-profile'),
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.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.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.core.urlresolvers import reverse
@ -499,6 +502,27 @@ class TeamCreateView(View):
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):
template_name = 'customer_profile_reviews.html'

Loading…
Cancel
Save