remotes/origin/setup
ArturBaybulatov 10 years ago
parent 057178340e
commit 9aee1ec432
  1. 2
      projects/models.py
  2. 269
      projects/templates/project_detail.html
  3. 31
      projects/views.py
  4. 14
      templates/trash/contractor_project-detail.html

@ -133,7 +133,7 @@ class Answer(models.Model):
author = GenericForeignKey('content_type', 'object_id') author = GenericForeignKey('content_type', 'object_id')
def __str__(self): def __str__(self):
return self.text return "{author}'s answer ({id})".format(author=type(self.author).__name__, id=self.pk)
class Meta: class Meta:
verbose_name = 'Отклик на проект' verbose_name = 'Отклик на проект'

@ -157,22 +157,16 @@
{% if request.user.is_contractor %}
{% if False and request.user.is_contractor and request.user.contractor_answers.exists and request.user.contractor_answers.first in project.answers.all %}
{% with answer=request.user.contractor_answers.first %} {% if answer %}
<div class="candidateBlock disTab"> <div class="candidateBlock disTab">
<div class="candidate"> <div class="candidate can-new">
<div class="col-lg-4"> <div class="col-lg-4">
<a href="#" class="aLinkExe"> <a href="#" class="aLinkExe">
<div class="imgExecutor"> <div class="imgExecutor">
@ -183,9 +177,15 @@
{% endif %} {% endif %}
</div> </div>
</a> </a>
<p class="nameExecutor"> <p class="nameExecutor">
<a href="#">{{ answer.author.get_full_name }} [{{ answer.author.username }}]</a> {% if answer.author|class_name == 'User' %}
<a href="#">{{ answer.author.get_full_name }} [{{ answer.author.username }}]</a>
{% elif answer.author|class_name == 'Team' %}
<a href="#">{{ answer.author.name }}</a>
{% endif %}
</p> </p>
<p class="navv2">На сайте {{ answer.author.created }}</p> <p class="navv2">На сайте {{ answer.author.created }}</p>
{% if answer.author|class_name == 'User' %} {% if answer.author|class_name == 'User' %}
@ -208,12 +208,19 @@
</ul> </ul>
{% if answer.author|class_name == 'User' %} {% if answer.author|class_name == 'User' %}
<div class="sroUser sroExecutor"> {% if answer.author.cro %}
<div class="iconSRO"></div> <div class="sroUser sroExecutor">
<p>Есть допуск СРО</p> <div class="iconSRO"></div>
</div> <p>Есть допуск СРО</p>
{% else %} </div>
... {% endif %}
{% elif answer.author|class_name == 'Team' %}
{# {% if any of these motherfuckers "answer.author.contractors.all" got a cro, then... %}#}
<div class="sroUser sroExecutor">
<div class="iconSRO"></div>
<p>Есть допуск СРО</p>
</div>
{# {% endif %}#}
{% endif %} {% endif %}
</div> </div>
<div class="col-lg-2 listCens"> <div class="col-lg-2 listCens">
@ -228,46 +235,31 @@
<p>Опубликован: {{ answer.created }}</p> <p>Опубликован: {{ answer.created }}</p>
</div> </div>
<div class="col-lg-3 retts"> <div class="col-lg-3 retts">
<a href="{% url 'projects:add-candidate' answer_id=answer.pk project_id=project.pk %}" class="candLink candLink1"> <a href="#" onclick="return false" class="candLink candLink3">
Кандидат
</a>
<a href="{% url 'projects:offer-order' answer_id=answer.pk project_id=project.pk %}" class="candLink candLink2">
предложить проект
</a>
<a href="javascript:void(0)" class="candLink candLink3">
отказ отказ
</a> </a>
</div> </div>
<div class="gallMini disTab"> <div class="gallMini disTab">
<div class="col-lg-3"> {% for portf in answer.portfolios.all %}
<div class="insetCol box-sizing disTab"> <div class="col-lg-3">
<div class="imgGal"> <div class="insetCol box-sizing disTab">
<div class="imgFigure"></div> <div class="imgGal" style="background: url('{{ portf.photos.first.img.url }}') no-repeat center">
</div> <div class="imgFigure"></div>
</div> </div>
</div>
<div class="col-lg-3">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
<div class="imgFigure"></div>
</div>
</div>
</div>
<div class="col-lg-3">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
<div class="imgFigure"></div>
</div>
</div>
</div>
<div class="col-lg-3">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
<div class="imgFigure"></div>
</div> </div>
</div> </div>
</div> {% endfor %}
</div> </div>
<div class="commBlock44 disTab"> <div class="commBlock44 disTab">
<div class="comm44 disTab"> <div class="comm44 disTab">
<div class="col-lg-10 col-lg-offset-1"> <div class="col-lg-10 col-lg-offset-1">
@ -289,6 +281,10 @@
</p> </p>
</div> </div>
</div> </div>
<div class="comm44 disTab"> <div class="comm44 disTab">
<div class="col-lg-10 col-lg-offset-1"> <div class="col-lg-10 col-lg-offset-1">
<p class="nameComm nameCommAct"> <p class="nameComm nameCommAct">
@ -306,112 +302,107 @@
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
{% endwith %} {% else %}
<form action="{% url 'projects:detail' pk=project.pk %}" method="POST" enctype="multipart/form-data" novalidate>
{% csrf_token %}
<input type="hidden" name="next" value="{% url 'projects:detail' pk=project.pk %}">
{% elif request.user.is_contractor and not request.user.contractor_answers.exists %} <div class="polsF1 disTab">
<div class="col-lg-3">
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Стоимость <span style="color: red">{{ form.budget.errors.as_text }}</span></p>
<input type="text" class="box-sizing" name="{{ form.budget.html_name }}" value="{{ form.budget.value }}">
<form action="{% url 'projects:detail' pk=project.pk %}" method="POST" enctype="multipart/form-data" novalidate> </div>
{% csrf_token %} </div>
<input type="hidden" name="next" value="{% url 'projects:detail' pk=project.pk %}">
<div class="col-lg-3">
<div class="polsF1 disTab"> <div class="textAreaBlock2 text-nn box-sizing disTab">
<div class="col-lg-3"> {{ form.currency }}
<div class="textAreaBlock2 text-nn box-sizing disTab"> </div>
<p>Стоимость <span style="color: red">{{ form.budget.errors.as_text }}</span></p> </div>
<input type="text" class="box-sizing" name="{{ form.budget.html_name }}" value="{{ form.budget.value }}">
<div class="col-lg-3">
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Срок <span style="color: red">{{ form.term.errors.as_text }}</span></p>
<input type="text" class="box-sizing" name="{{ form.term.html_name }}" value="{{ form.term.value }}">
</div>
</div>
<div class="col-lg-3">
<div class="textAreaBlock2 text-nn box-sizing disTab">
{{ form.term_type }}
</div>
</div> </div>
</div> </div>
<div class="col-lg-3"> <div class="polsF1 disTab searchF1">
<div class="textAreaBlock2 text-nn box-sizing disTab"> <div class="col-lg-9">
{{ form.currency }} <div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Текст <span style="color: red">{{ form.text.errors.as_text }}</span></p>
<textarea name="{{ form.text.html_name }}" id="text-new">{{ form.text.value }}</textarea>
</div>
</div> </div>
<div class="col-lg-3"></div>
</div> </div>
<div class="col-lg-3"> <div class="polsF1 disTab searchF1">
<div class="textAreaBlock2 text-nn box-sizing disTab"> <div class="col-lg-9">
<p>Срок <span style="color: red">{{ form.term.errors.as_text }}</span></p> <p>Портфолио <span style="color: red">{{ form.portfolios.errors.as_text }}</span></p>
<input type="text" class="box-sizing" name="{{ form.term.html_name }}" value="{{ form.term.value }}">
<ul>
{% for p in request.user.portfolios.all %}
<li>
<input
type="checkbox"
name="{{ form.portfolios.html_name }}"
value="{{ p.pk }}"
{% if p.pk|str in form.portfolios.value %}checked{% endif %}>
{{ p.name }}
</li>
{% endfor %}
</ul>
</div> </div>
</div> </div>
<div class="col-lg-3"> <div class="polsF1 disTab searchF1">
<div class="textAreaBlock2 text-nn box-sizing disTab"> <div class="col-lg-9">
{{ form.term_type }} <div id="fileUploadContainer">
<div>
<button type="button" id="fileUploadAddBtn">Добавить файл</button> Не более 10 файлов общим объемом до 500 Мб
</div>
<ul class="list-new-new">
<li class="file-upload-widget" style="display: none">
<input type="file" name="new_files" class="file-upload-input" style="position: absolute; top: -1000px; left: -1000px">
<span class="file-upload-label"></span>
<a href="#" onclick="return false" class="file-upload-remove-btn">&times;</a>
</li>
</ul>
</div>
</div> </div>
</div> </div>
</div>
<div class="polsF1 disTab searchF1">
<div class="polsF1 disTab searchF1"> <div class="col-lg-9">
<div class="col-lg-9"> {{ form.secure_deal_only }} Работаю только по безопасной сделке
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Текст <span style="color: red">{{ form.text.errors.as_text }}</span></p>
<textarea name="{{ form.text.html_name }}" id="text-new">{{ form.text.value }}</textarea>
</div> </div>
</div> </div>
<div class="col-lg-3"></div>
</div> <div class="polsF1 disTab searchF1">
<div class="col-lg-3">
<div class="polsF1 disTab searchF1"> <button type="submit">Опубликовать ответ</button>
<div class="col-lg-9">
<p>Портфолио <span style="color: red">{{ form.portfolios.errors.as_text }}</span></p>
<ul>
{% for p in request.user.portfolios.all %}
<li>
<input
type="checkbox"
name="{{ form.portfolios.html_name }}"
value="{{ p.pk }}"
{% if p.pk|str in form.portfolios.value %}checked{% endif %}>
{{ p.name }}
</li>
{% endfor %}
</ul>
</div>
</div>
<div class="polsF1 disTab searchF1">
<div class="col-lg-9">
<div id="fileUploadContainer">
<div>
<button type="button" id="fileUploadAddBtn">Добавить файл</button> Не более 10 файлов общим объемом до 500 Мб
</div>
<ul class="list-new-new">
<li class="file-upload-widget" style="display: none">
<input type="file" name="new_files" class="file-upload-input" style="position: absolute; top: -1000px; left: -1000px">
<span class="file-upload-label"></span>
<a href="#" onclick="return false" class="file-upload-remove-btn">&times;</a>
</li>
</ul>
</div> </div>
</div> </div>
</div>
<div class="polsF1 disTab searchF1"></div>
<div class="polsF1 disTab searchF1"> </form>
<div class="col-lg-9"> {% endif %}
{{ form.secure_deal_only }} Работаю только по безопасной сделке
</div>
</div>
<div class="polsF1 disTab searchF1">
<div class="col-lg-3">
<button type="submit">Опубликовать ответ</button>
</div>
</div>
<div class="polsF1 disTab searchF1"></div>
</form>

@ -17,7 +17,7 @@ import re
from .mixins import LastAccessMixin from .mixins import LastAccessMixin
from .models import Project, ProjectFile, Portfolio, PortfolioPhoto,Candidate, Answer, AnswerFile, Realty, Order from .models import Project, ProjectFile, Portfolio, PortfolioPhoto,Candidate, Answer, AnswerFile, Realty, Order
from archilance.mixins import BaseMixin from archilance.mixins import BaseMixin
from users.models import User from users.models import User, Team
from work_sell.models import Picture from work_sell.models import Picture
from .forms import ( from .forms import (
@ -45,11 +45,32 @@ class ProjectDetailWithContractorAnswerView(BaseMixin, View):
project = get_object_or_404(Project, pk=kwargs.get('pk')) project = get_object_or_404(Project, pk=kwargs.get('pk'))
context.update({'project': project}) context.update({'project': project})
# context.update({'tmp_answer': ...}) # Tmp
if request.user.is_authenticated() and request.user.is_contractor(): if request.user.is_authenticated() and request.user.is_contractor():
form = self.form_class(request=request) project_answers = project.answers.all()
context.update({'form': form}) got_answer = None
contractor = request.user
answer = contractor.contractor_answers.first()
if answer and answer in project_answers:
got_answer = True
else:
team = None
answer = None
try: team = contractor.team
except Team.DoesNotExist: pass
if team:
answer = team.answers.first()
if answer and answer in project_answers:
got_answer = True
if got_answer:
context.update({'answer': answer})
else:
form = self.form_class(request=request)
context.update({'form': form})
return render(request, self.template_name, context) return render(request, self.template_name, context)

@ -231,6 +231,18 @@
отказ отказ
</a> </a>
</div> </div>
<div class="commBlock44 comm-new disTab"> <div class="commBlock44 comm-new disTab">
<div class="comm44 disTab"> <div class="comm44 disTab">
<div class="col-lg-10 col-lg-offset-1"> <div class="col-lg-10 col-lg-offset-1">
@ -352,4 +364,4 @@
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.10.0/js/i18n/defaults-*.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.10.0/js/i18n/defaults-*.min.js"></script>
<script src="js/main.js"></script> <script src="js/main.js"></script>
</body> </body>
</html> </html>

Loading…
Cancel
Save