remotes/origin/setup
Mukhtar 10 years ago
commit 45b607b256
  1. 1
      archilance/management/commands/generate_users.py
  2. 4
      projects/models.py
  3. 103
      projects/templates/project_detail.html
  4. 4
      projects/urls.py
  5. 27
      projects/views.py
  6. 12
      templates/trash/contractor_project-detail.html

@ -86,6 +86,7 @@ class Command(BaseCommand):
email='%s@example.com' % username,
is_active=True,
contractor_status=_.sample(User.STATUSES)[0],
cro=_.sample((True, False)),
)
users = _.times(create_user, 500)

@ -50,7 +50,7 @@ class Realty(models.Model):
construction_type = models.ForeignKey(ConstructionType, related_name='realties')
location = TreeForeignKey('common.Location', related_name='realties', null=True, blank=True)
name = models.CharField(max_length=255)
user = models.ForeignKey(User, related_name='realties')
user = models.ForeignKey(User, related_name='realties') # Do we actually need this field?
def __str__(self):
return self.name
@ -133,7 +133,7 @@ class Answer(models.Model):
author = GenericForeignKey('content_type', 'object_id')
def __str__(self):
return self.text
return "{author}'s answer ({id})".format(author=type(self.author).__name__, id=self.pk)
class Meta:
verbose_name = 'Отклик на проект'

@ -157,22 +157,16 @@
{% if request.user.is_contractor %}
{% if request.user.is_contractor and request.user.contractor_answers.exists %}
{% with answer=request.user.contractor_answers.first %}
{% if answer %}
<div class="candidateBlock disTab">
<div class="candidate">
<div class="candidate can-new">
<div class="col-lg-4">
<a href="#" class="aLinkExe">
<div class="imgExecutor">
@ -183,9 +177,15 @@
{% endif %}
</div>
</a>
<p class="nameExecutor">
{% 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 class="navv2">На сайте {{ answer.author.created }}</p>
{% if answer.author|class_name == 'User' %}
@ -207,10 +207,21 @@
</li>
</ul>
{% if answer.author|class_name == 'User' %}
{% if answer.author.cro %}
<div class="sroUser sroExecutor">
<div class="iconSRO"></div>
<p>Есть допуск СРО</p>
</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 %}
</div>
<div class="col-lg-2 listCens">
<p>
@ -224,46 +235,31 @@
<p>Опубликован: {{ answer.created }}</p>
</div>
<div class="col-lg-3 retts">
<a href="{% url 'projects:add-candidate' answer_id=answer.pk project_id=project.pk %}" class="candLink candLink1">
Кандидат
</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 href="#" onclick="return false" class="candLink candLink3">
отказ
</a>
</div>
<div class="gallMini disTab">
{% for portf in answer.portfolios.all %}
<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 class="col-lg-3">
<div class="insetCol box-sizing disTab">
<div class="imgGal">
<div class="imgGal" style="background: url('{{ portf.photos.first.img.url }}') no-repeat center">
<div class="imgFigure"></div>
</div>
</div>
</div>
{% endfor %}
</div>
<div class="commBlock44 disTab">
<div class="comm44 disTab">
<div class="col-lg-10 col-lg-offset-1">
@ -285,6 +281,10 @@
</p>
</div>
</div>
<div class="comm44 disTab">
<div class="col-lg-10 col-lg-offset-1">
<p class="nameComm nameCommAct">
@ -302,19 +302,12 @@
</div>
</div>
</div>
</div>
</div>
{% endwith %}
{% elif request.user.is_contractor %}
</div>
</div>
{% 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 %}">
@ -409,6 +402,7 @@
<div class="polsF1 disTab searchF1"></div>
</form>
{% endif %}
@ -416,6 +410,10 @@
{% elif request.user.is_customer %}
<div class="exBigBlock disTab">
<div class="col-lg-12">
<p class="titleEx">Исполнители</p>
@ -446,6 +444,15 @@
</div>
{% for answer_p in project.answers.all %}
<div class="candidateBlock disTab">
<div class="candidate">

@ -4,6 +4,7 @@ from django.views.generic import TemplateView
from .views import (
add_candidate,
contractor_portfolio_create,
ContractorPortfolioTrashView,
ContractorPortfolioUpdateView,
CustomerProjectCreateView,
CustomerProjectDeleteView,
@ -12,9 +13,8 @@ from .views import (
CustomerProjectTrashView,
OfferOrderView,
ProjectComparisonView,
ProjectFilterView,
ProjectDetailWithContractorAnswerView,
ContractorPortfolioTrashView,
ProjectFilterView,
)
app_name = 'projects'

@ -17,10 +17,11 @@ import re
from .mixins import LastAccessMixin
from .models import Project, ProjectFile, Portfolio, PortfolioPhoto,Candidate, Answer, AnswerFile, Realty, Order
from archilance.mixins import BaseMixin
from users.models import User
from users.models import User, Team
from work_sell.models import Picture
from .forms import (
ContractorPortfolioTrashForm,
ContractorProjectAnswerForm,
CustomerProjectDeleteForm,
CustomerProjectEditForm,
@ -31,7 +32,6 @@ from .forms import (
ProjectFilterForm,
ProjectFilterRealtyForm,
RealtyForm,
ContractorPortfolioTrashForm,
)
@ -46,6 +46,29 @@ class ProjectDetailWithContractorAnswerView(BaseMixin, View):
context.update({'project': project})
if request.user.is_authenticated() and request.user.is_contractor():
project_answers = project.answers.all()
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})

@ -231,6 +231,18 @@
отказ
</a>
</div>
<div class="commBlock44 comm-new disTab">
<div class="comm44 disTab">
<div class="col-lg-10 col-lg-offset-1">

Loading…
Cancel
Save