Merge branch 'master' into artur

remotes/origin/PR-39
ArturBaybulatov 10 years ago
commit 2a9f5e5288
  1. 17
      archilance/settings/prod.py
  2. 39
      assets/css/main.css
  3. 13
      projects/templates/comparison.html
  4. 13
      projects/templates/project_detail.html
  5. 2
      projects/urls.py
  6. 13
      projects/views.py
  7. 8
      update.sh
  8. 130
      users/templates/portfolio_create_form.html

@ -1,3 +1,18 @@
from .base import * from .base import *
DEBUG = False
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'archilance',
'USER': 'postgres',
'PASSWORD': 'vfhbyrf',
'HOST': 'localhost',
'PORT': '',
}
}
DEBUG = True
TEMPLATE_DEBUG = True
SECRET_KEY = 'vb6@b9zj7^f!^+x*e8=e!oundyu1!e*&0i(3gu2xwo4%fx4h&n'

@ -412,7 +412,7 @@ ul li {
width: 100%; width: 100%;
background-color: #F2F2F2; background-color: #F2F2F2;
position: relative; position: relative;
margin-bottom: 140px; /*margin-bottom: 140px;*/
} }
.scoreButtons > p { .scoreButtons > p {
@ -541,6 +541,8 @@ footer {
width: 100%; width: 100%;
position: relative; position: relative;
background-color: #F7F7F7; background-color: #F7F7F7;
margin-top: 80px;
float: left;
} }
footer:after { footer:after {
@ -1048,7 +1050,7 @@ footer:after {
.pagin { .pagin {
text-align: center; text-align: center;
margin: 30px 0 30px 0; margin: 30px 0 0px 0;
} }
.pagin nav { .pagin nav {
@ -1650,10 +1652,11 @@ input[type="checkbox"]:checked + span {
.menuUser ul { .menuUser ul {
float: left; float: left;
width: 100%;
} }
.menuUser ul li { .menuUser ul li {
width: 101%; width: 100%;
margin-top: 1px; margin-top: 1px;
position: relative; position: relative;
background-color: #F1F1F1; background-color: #F1F1F1;
@ -3262,7 +3265,7 @@ input[type="checkbox"]:checked + span {
width: 100%; width: 100%;
border-top: 1px solid #DADADA; border-top: 1px solid #DADADA;
border-bottom: 1px solid #DADADA; border-bottom: 1px solid #DADADA;
margin: 18px 0 80px; 0; margin: 18px 0 0px 0;
float: left; float: left;
} }
@ -4346,7 +4349,7 @@ input[type="checkbox"]:checked + span {
width: 100%; width: 100%;
float: left; float: left;
margin: 0 0 80px 0; margin: 0 0 80px 0;
padding: 67px 0 15px 0; padding: 67px 0 0 0;
background-color: #ddd; background-color: #ddd;
text-align: center; text-align: center;
} }
@ -5703,4 +5706,30 @@ input[type="radio"]:checked + span {
#order-stages > div:nth-last-child(2), #order-stages > div:last-child{ #order-stages > div:nth-last-child(2), #order-stages > div:last-child{
border: none; border: none;
} }
.linkSort button{
font-size: 14px;
font-family: 'Arial-MT-Regular', sans-serif;
float: left;
color: #6b6b6b;
padding: 11px 23px;
border-radius: 40px;
margin-right: 6px;
border: 1px solid #c2c2c2;
background-color: #fff;
}
.linkSort button:after{
content: "\e252";
font-family: 'Glyphicons Halflings';
position: relative;
right: -5px;
top: 3px;
font-style: normal;
font-weight: normal;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.linkSort button:focus{
outline: none;
}
/*end_new*/ /*end_new*/

@ -68,15 +68,18 @@
<td> <td>
<div class="tableButtons disTab"> <div class="tableButtons disTab">
<div class="btnTab btnTab1"></div> <a href="{% url 'chat:chat-user' %}">
<a href="/test"> <div class="btnTab btnTab1"></div>
<div class="btnTab btnTab2"></div>
</a> </a>
<a href="/delete"> <a href="{% url 'chat:chat-user' %}?user_id={{ cand.answer.author.pk }}">
<div class="btnTab btnTab3"></div> <div class="btnTab btnTab2"></div>
</a> </a>
<form method="POST" action="{% url 'projects:delete-candidate' cand.pk %}">
{% csrf_token %}<input class="btnTab btnTab3" type="submit" value="">
</form>
<div class="btnTab btnTab4"></div> <div class="btnTab btnTab4"></div>
</div> </div>
</td> </td>

@ -480,22 +480,15 @@
<div class="col-lg-12 compareBlock"> <div class="col-lg-12 compareBlock">
<div class="col-lg-2 col-lg-offset-5"> <div class="col-lg-2 col-lg-offset-5">
<p>Сравнить кандидатов</p> <p><a href="{% url 'projects:comparison' project.pk %}">Сравнить кандидатов</a></p>
</div> </div>
</div> </div>
<div class="col-lg-12 exNew"> <div class="col-lg-12 exNew">
<p>Новые исполнители</p> <p>Новые исполнители</p>
</div> </div>
{% for answer in project.answers.all %} {% for answer in project.answers.all %}
<div class="candidateBlock disTab"> <div class="candidateBlock disTab">

@ -20,6 +20,7 @@ from .views import (
ProjectDetailWithAnswerView, ProjectDetailWithAnswerView,
ProjectFilterView, ProjectFilterView,
sort_candidates, sort_candidates,
CandidateDeleteView,
) )
app_name = 'projects' app_name = 'projects'
@ -44,6 +45,7 @@ urlpatterns = [
urls.url(r'^portfolio/(?P<pk>\d+)/edit/$', ContractorPortfolioUpdateView.as_view(), name='contractor-portfolio-edit'), urls.url(r'^portfolio/(?P<pk>\d+)/edit/$', ContractorPortfolioUpdateView.as_view(), name='contractor-portfolio-edit'),
urls.url(r'^candidate/add/(?P<answer_id>(\d+))/(?P<project_id>(\d+))/$', add_candidate, name='add-candidate'), urls.url(r'^candidate/add/(?P<answer_id>(\d+))/(?P<project_id>(\d+))/$', add_candidate, name='add-candidate'),
urls.url(r'^candidate/delete/(?P<pk>(\d+))/$', CandidateDeleteView.as_view(), name='delete-candidate'),
urls.url(r'^candidate/comparison/sort/$', sort_candidates, name='comparison-sort'), urls.url(r'^candidate/comparison/sort/$', sort_candidates, name='comparison-sort'),
urls.url(r'^candidate/comparison/(?P<pk>\d+)/$', ProjectComparisonView.as_view(), name='comparison'), urls.url(r'^candidate/comparison/(?P<pk>\d+)/$', ProjectComparisonView.as_view(), name='comparison'),

@ -592,10 +592,21 @@ class ProjectComparisonView(DetailView):
def add_candidate(request, answer_id, project_id): def add_candidate(request, answer_id, project_id):
answer = Answer.objects.get(pk=answer_id) answer = Answer.objects.get(pk=answer_id)
project = Project.objects.get(pk=project_id) project = Project.objects.get(pk=project_id)
candidate = Candidate.objects.create(answer=answer, project=project) count_answers = Candidate.objects.filter(project=project).count()
count_answers += 1
candidate = Candidate.objects.create(answer=answer, project=project, position=count_answers)
return HttpResponseRedirect(reverse('projects:detail', args=[project_id])) return HttpResponseRedirect(reverse('projects:detail', args=[project_id]))
class CandidateDeleteView(DeleteView):
model = Candidate
def get_success_url(self):
return reverse('projects:comparison', kwargs={'pk': self.object.project_id})
def get(self, *args, **kwargs):
return self.post(*args, **kwargs)
def sort_candidates(request): def sort_candidates(request):
if request.is_ajax(): if request.is_ajax():
items = request.POST.getlist('items[]') items = request.POST.getlist('items[]')

@ -0,0 +1,8 @@
#!/usr/bin/env bash
source ../env/bin/activate &&
git reset --hard &&
git pull &&
./manage.py migrate --noinput &&
./manage.py collectstatic --noinput &&
supervisorctl restart arch

@ -3,115 +3,125 @@
<form method="post" id="portfolio-add-form">{% csrf_token %} <form method="post" id="portfolio-add-form">{% csrf_token %}
<div class="textAreaBlock2 text-nn box-sizing disTab"> <div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Название<span style="color: red; margin-left:8px; font-size: 12px;" class="error-{{ portfolio_form.name.html_name }}">{{ portfolio_form.name.errors.as_text }}</span></p> <p>Название<span style="color: red; margin-left:8px; font-size: 12px;"
class="error-{{ portfolio_form.name.html_name }}">{{ portfolio_form.name.errors.as_text }}</span>
</p>
<input type="text" class="box-sizing" name="{{ portfolio_form.name.html_name }}" <input type="text" class="box-sizing" name="{{ portfolio_form.name.html_name }}"
value="{{ portfolio_form.name.value }}"> value="{{ portfolio_form.name.value }}">
</div> </div>
<div class="textAreaBlock2 text-nn box-sizing disTab"> <div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Описание<span style="color: red; margin-left:8px; font-size: 12px;" class="error-{{ portfolio_form.description.html_name }}">{{ portfolio_form.description.errors.as_text }}</span></p> <p>Описание<span style="color: red; margin-left:8px; font-size: 12px;"
<textarea name="{{ portfolio_form.description.html_name }}" id="text-new">{{ portfolio_form.description.value }}</textarea> class="error-{{ portfolio_form.description.html_name }}">{{ portfolio_form.description.errors.as_text }}</span>
</p>
<textarea name="{{ portfolio_form.description.html_name }}"
id="text-new">{{ portfolio_form.description.value }}</textarea>
</div> </div>
<div class="textAreaBlock2 text-nn box-sizing disTab"> <div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Специализации</p> <p>Специализации</p>
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<input type='hidden' class="-spec-select -spec-select-level-1" style="width: 100%"> <input type='hidden' class="-spec-select -spec-select-level-1" style="width: 100%">
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<input type='hidden' class="-spec-select -spec-select-level-2" style="width: 100%"> <input type='hidden' class="-spec-select -spec-select-level-2" style="width: 100%">
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<input type='hidden' class="-spec-select -spec-select-level-3" style="width: 100%"> <input type='hidden' class="-spec-select -spec-select-level-3" style="width: 100%">
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
<input type='hidden' class="-spec-select -spec-select-level-4" style="width: 100%"> <input type='hidden' class="-spec-select -spec-select-level-4" style="width: 100%">
</div> </div>
<div class="textAreaBlock2 text-nn box-sizing disTab"> <div class="textAreaBlock2 text-nn box-sizing disTab">
<input type="hidden" id="chosenSpecId" name="{{ portfolio_form.specialization.html_name }}" <input type="hidden" id="chosenSpecId" name="{{ portfolio_form.specialization.html_name }}"
value="{{ portfolio_form.specialization.value }}"> value="{{ portfolio_form.specialization.value }}">
</div> </div>
<div class="textAreaBlock2 polsF1 text-nn box-sizing disTab"> <div class="textAreaBlock2 polsF1 text-nn box-sizing disTab">
<p>Бюджет{{ portfolio_form.budget.errors.as_text }}</p> <p>Бюджет{{ portfolio_form.budget.errors.as_text }}</p>
<div class="row"> <div class="row">
<div class="col-lg-6"> <div class="col-lg-6">
<input type="text" class="box-sizing" name="{{ portfolio_form.budget.html_name }}" value="{{ portfolio_form.budget.value }}"> <input type="text" class="box-sizing" name="{{ portfolio_form.budget.html_name }}"
value="{{ portfolio_form.budget.value }}">
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
{{ portfolio_form.currency}} {{ portfolio_form.currency }}
</div> </div>
</div> </div>
</div> </div>
<div class="textAreaBlock2 polsF1 text-nn box-sizing disTab"> <div class="textAreaBlock2 polsF1 text-nn box-sizing disTab">
<p>Срок выполнения{{ portfolio_form.budget.errors.as_text }}</p> <p>Срок выполнения{{ portfolio_form.budget.errors.as_text }}</p>
<div class="row"> <div class="row">
<div class="col-lg-6"> <div class="col-lg-6">
<input type="text" class="box-sizing" name="{{ portfolio_form.budget.html_name }}" value="{{ portfolio_form.budget.value }}"> <input type="text" class="box-sizing" name="{{ portfolio_form.budget.html_name }}"
value="{{ portfolio_form.budget.value }}">
</div> </div>
<div class="col-lg-3"> <div class="col-lg-3">
{{ portfolio_form.term_type }} {{ portfolio_form.term_type }}
</div> </div>
</div> </div>
</div> </div>
<div class="textAreaBlock2 text-nn box-sizing disTab"></div> <div class="textAreaBlock2 polsF1text-nn box-sizing disTab"></div>
<div class="textAreaBlock2 polsF1 text-nn box-sizing disTab" id="modal_type_build"> <div class="textAreaBlock2 polsF1 text-nn box-sizing disTab" id="modal_type_build">
<p>Вид строительства</p>
<div class="row"> <div class="row">
<div class="col-lg-3"> <div class="col-lg-6">
<p>Вид строительства</p> {{ portfolio_form.construction_type }}
{{ portfolio_form.construction_type}}
</div> </div>
<div class="col-lg-3"> </div>
<p>Классификация здания</p> </div>
{{ portfolio_form.building_classification}}
<div class="textAreaBlock2 polsF1 text-nn box-sizing disTab">
<p>Классификация здания</p>
<div class="row">
<div class="col-lg-6">
{{ portfolio_form.building_classification }}
</div> </div>
</div> </div>
</div> </div>
<div class="polsF1 polsF2 disTab"> <div class="extAreaBlock2 polsF1 text-nn box-sizing disTab">
<p>Классификация здания</p> <p></p>
{{ portfolio_form.building_classification}} <div class="row">
</div> <div class="col-lg-6 make-new">
<div class="polsF1 polsF2 disTab"> <label>{{ portfolio_form.duplicate }}<span></span></label>
<input type="hidden" name="{{ portfolio_form.user.html_name }}" value="{{ request.user.pk }}" /> <p>Дублировать проект в готовые работы</p>
<input type="hidden" name="images-ids" id="upload-files-pk" /> </div>
{{ portfolio_form.duplicate }} Дублировать проект в готовые работы
</div>
<div class="polsF1 polsF2 disTab"> <input type="hidden" name="{{ portfolio_form.user.html_name }}" value="{{ request.user.pk }}"/>
<input type="hidden" name="" id="upload-files-pk" value="" /> <input type="hidden" name="images-ids" id="upload-files-pk"/>
</div>
</div> </div>
<!-- The fileinput-button span is used to style the file input field as button -->
<div class="textAreaBlock2 polsF1 text-nn box-sizing disTab" style="margin-bottom: 12px;"> <!-- The fileinput-button span is used to style the file input field as button -->
<div class="textAreaBlock2 polsF1 text-nn box-sizing disTab" style="margin-bottom: 12px;">
<span class="btn btn-success fileinput-button add_file_to_port"> <span class="btn btn-success fileinput-button add_file_to_port">
<span>Выберите файлы</span> <span>Выберите файлы</span>
<input id="fileupload" type="file" name="file" multiple value=""> <input id="fileupload" type="file" name="file" multiple value="">
</span> </span>
</div>
<br>
<br>
<!-- The global progress bar -->
<div id="progress-portfolio" class="progress">
<div class="progress-bar progress-bar-success"></div>
</div>
<!-- The container for the uploaded files -->
<div id="files" class="files"></div>
<br>
<div class="searchF1 polsF1 polsFF links-filter">
<input class="btn-submit-link" type="submit" value="Разместить портфолио">
</div> </div>
<br>
<br>
<!-- The global progress bar -->
<div id="progress-portfolio" class="progress">
<div class="progress-bar progress-bar-success"></div>
</div>
<!-- The container for the uploaded files -->
<div id="files" class="files"></div>
<br>
<!-- The global progress bar --> <!-- The global progress bar -->
<div class="textAreaBlock2 polsF1 text-nn box-sizing disTab"> <div class="textAreaBlock2 polsF1 text-nn box-sizing disTab">
<div id="progress-portfolio" class="progress"> <div id="progress-portfolio" class="progress">
@ -123,9 +133,9 @@
<div id="files" class="files"></div> <div id="files" class="files"></div>
</div> </div>
<div class="textAreaBlock2 polsF1 text-nn box-sizing disTab"> <div class="textAreaBlock2 polsF1 text-nn box-sizing disTab">
<input class="btn-submit-link add_file_to_port" type="submit" value="Разместить портфолио"> <input class="btn-submit-link add_file_to_port" type="submit" value="Разместить портфолио">
</div> </div>
<!-- </div> --> <!-- </div> -->
</form> </form>
</div> </div>

Loading…
Cancel
Save