remotes/origin/PR-39
Mukhtar 9 years ago
commit 6330b48194
  1. 18
      archilance/views.py
  2. 2
      assets/index.js
  3. 2
      assets/js/chat.js
  4. 18
      common/mixins.py
  5. 5
      common/templatetags/common_tags.py
  6. 27
      projects/serializers.py
  7. 169
      projects/templates/comparison.html
  8. 7
      projects/urls.py
  9. 20
      projects/views.py
  10. 2
      templates/partials/base.html
  11. 9
      templates/partials/header.html
  12. 12
      templates/test.html
  13. 117
      users/templates/contractor_filter.html
  14. 83
      users/templates/contractor_profile.html
  15. 5
      users/templatetags/user_tags.py
  16. 39
      work_sell/templates/worksell_detail.html

@ -7,9 +7,11 @@ from django.http import HttpResponseForbidden, JsonResponse, HttpResponseRedirec
from django.shortcuts import render, get_object_or_404, redirect
from django.views.generic import TemplateView, View
from pprint import pprint, pformat
import json
import logging
from .mixins import BaseMixin
from archilance import util
from chat.models import Documents
from common.models import MainPage, PrintDocuments
from projects.models import Order
@ -52,8 +54,22 @@ class TestView(BaseMixin, View):
def get(self, request, *args, **kwargs):
context = self.get_context_data(**kwargs)
data = {}
context['foo'] = 'bar'
from projects.models import Project
from projects.serializers import ProjectSerializer
from users.models import User
from users.serializers import UserSerializer
contractor = User.contractor_objects.get(pk=11)
project = Project.objects.get(pk=153)
data['contractor'] = UserSerializer(contractor).data
data['project'] = ProjectSerializer(project).data
context['data_json'] = json.dumps(data)
return render(request, self.template_name, context)
# return redirect('projects:detail', pk=153)
# import code; code.interact(local=dict(globals(), **locals()))

@ -239,7 +239,7 @@ var projectSelectOptions = {
}
function initProjectSelect($select, customerId) {
return $.ajax({url: '/api/projects/?customer=' + customerId, method: 'GET', dataType: 'json'})
return $.ajax({url: '/api/projects/?state=active&customer=' + customerId, method: 'GET', dataType: 'json'})
.then(function(res) {
var projects = res.results

@ -1,6 +1,6 @@
var SocketHandler = function () {
domain = domain.replace(':' + port, '');
var url = 'ws://' + domain + '/chat/' + userId + '/';
var url = 'ws://' + domain + ':8888/chat/' + userId + '/';
var sock = new WebSocket(url);
var intervalId;
sock.onopen = function () {

@ -1,3 +1,5 @@
from django.contrib.auth.mixins import LoginRequiredMixin
from django.core.exceptions import PermissionDenied
from django.utils.decorators import method_decorator
from django.views.decorators.csrf import csrf_exempt
from django.views.generic import View
@ -7,3 +9,19 @@ class NoCsrfMixin(View):
@method_decorator(csrf_exempt)
def dispatch(self, request, *args, **kwargs):
return super().dispatch(request, *args, **kwargs)
class CustomerRequiredMixin(LoginRequiredMixin, View):
def dispatch(self, request, *args, **kwargs):
if request.user.is_customer():
return super().dispatch(request, *args, **kwargs)
else:
raise PermissionDenied
class ContractorRequiredMixin(LoginRequiredMixin, View):
def dispatch(self, request, *args, **kwargs):
if request.user.is_contractor():
return super().dispatch(request, *args, **kwargs)
else:
raise PermissionDenied

@ -61,6 +61,11 @@ def to_list(val):
return list(val)
@register.filter('repr')
def to_repr(val):
return repr(val)
@register.filter
def class_name(val):
return type(val).__name__

@ -71,11 +71,34 @@ class StageSerializer(ModelSerializer):
)
class OrderSerializer_(ModelSerializer):
contractor = UserSerializer()
stages = StageSerializer(many=True)
team = TeamSerializer()
project_id = PrimaryKeyRelatedField(read_only=True, source='project')
class Meta:
model = Order
fields = (
'created',
'id',
'secure',
'status',
'contractor',
'project_id',
'stages',
'team',
)
class ProjectSerializer(ModelSerializer):
customer = UserSerializer()
specialization = SpecializationSerializer()
realty = RealtySerializer()
order = OrderSerializer_() # TODO: Can't serialize a reverse/reciprocal relation
class Meta:
model = Project
@ -89,6 +112,7 @@ class ProjectSerializer(ModelSerializer):
'deal_type',
'id',
'name',
'order',
'price_and_term_required',
'realty',
'specialization',
@ -97,7 +121,6 @@ class ProjectSerializer(ModelSerializer):
'term_type',
'text',
'work_type',
)

@ -9,8 +9,7 @@
<div class="container mainScore">
<div class="row">
<div class="col-lg-12">
<p class="titleScore">
Сравнение кандидатов по проекту</p>
<p class="titleScore">Сравнение кандидатов по проекту</p>
</div>
<div class="titleBlockComparison disTab">
@ -18,92 +17,95 @@
<p>{{ object }}</p>
<table class="compTable" id="compTable">
<thead>
<tr>
<th></th>
<th>Кандидат</th>
<th>Цена</th>
<th>Срок</th>
<th>Описание</th>
<th>Рейтинги/отзывы</th>
<th>Безопасные сделки</th>
<th>Решение</th>
</tr>
<tr>
<th></th>
<th>Кандидат</th>
<th>Цена</th>
<th>Срок</th>
<th>Описание</th>
<th>Рейтинги/отзывы</th>
<th>Безопасные сделки</th>
<th>Решение</th>
</tr>
</thead>
<tbody>
{% for cand in object.candidates.all %}
<tr style="cursor:move;" class="items[]_{{ cand.pk }}" data-class="items[]_{{ cand.pk }}">
<td>{{ cand.position }}</td>
<td>
{% if cand.answer.author|class_name == 'User' %}
{{ cand.answer.author.get_full_name }}
{% elif cand.answer.author|class_name == 'Team' %}
{{ cand.answer.author.name }}
{% endif %}
</td>
<td>{{ cand.answer.budget }} <i class="{% fa_currency_classes cand.answer.currency %}"></i></td>
<td>
{% if cand.answer.term_type == 'project' %}
За проект
{% else %}
{% morph cand.answer.term TERM_TYPE_MORPHS|get:cand.answer.term_type %}
{% endif %}
</td>
<td>
<span class="glyphicon glyphicon-info-sign" aria-hidden="true" data-tooltip data-placement="right" title="{{ cand.answer.get_first_message }}"></span>
</td>
<td>
<ul>
<li><span>{{ cand.answer.author.rating }}</span></li>
<li>
<span>+0</span> 0 <small> - 0</small>
</li>
{% if cand.answer.author.cro %}
{% for cand in object.candidates.all %}
<tr style="cursor:move;" class="items[]_{{ cand.pk }}" data-class="items[]_{{ cand.pk }}">
<td>{{ cand.position }}</td>
<td>
{% if cand.answer.author|class_name == 'User' %}
{{ cand.answer.author.get_full_name }}
{% elif cand.answer.author|class_name == 'Team' %}
{{ cand.answer.author.name }}
{% endif %}
</td>
<td>{{ cand.answer.budget }} <i class="{% fa_currency_classes cand.answer.currency %}"></i></td>
<td>
{% if cand.answer.term_type == 'project' %}
За проект
{% else %}
{% morph cand.answer.term TERM_TYPE_MORPHS|get:cand.answer.term_type %}
{% endif %}
</td>
<td>
<span class="glyphicon glyphicon-info-sign" aria-hidden="true" data-tooltip data-placement="right" title="{{ cand.answer.get_first_message }}"></span>
</td>
<td>
<ul>
<li><span>{{ cand.answer.author.rating }}</span></li>
<li>
СРО
<span>+0</span> 0 <small> - 0</small>
</li>
{% if cand.answer.author.cro %}
<li>
СРО
</li>
{% endif %}
</ul>
</td>
<td>
<span>0</span><br>
{% if cand.answer.secure_deal_only %}
Готов работать по безопасной сделке
{% endif %}
</ul>
</td>
<td>
<span>0</span><br>
{% if cand.answer.secure_deal_only %}
Готов работать по безопасной сделке
{% endif %}
</td>
<td>
<div class="tableButtons disTab">
<form action="{% url 'projects:customer-offer-order' answer_id=cand.answer.pk project_id=cand.project.pk %}" method="POST" novalidate>
{% csrf_token %}
<a href="#" onclick="$(this).closest('form').submit(); return false">
<div class="btnTab btnTab1"></div>
</td>
<td>
<div class="tableButtons disTab">
<form action="{% url 'projects:customer-offer-order' answer_id=cand.answer.pk project_id=cand.project.pk %}" method="POST" novalidate>
{% csrf_token %}
<a href="#" onclick="$(this).closest('form').submit(); return false">
<div class="btnTab btnTab1" title="Предложить проект"></div>
</a>
</form>
<a href="{% url 'chat:chat-user' %}?user_id={{ cand.answer.author.pk }}">
<div class="btnTab btnTab2" title="Перейти в чат"></div>
</a>
</form>
<a href="{% url 'chat:chat-user' %}?user_id={{ cand.answer.author.pk }}">
<div class="btnTab btnTab2"></div>
</a>
<form method="POST" action="{% url 'projects:delete-candidate' cand.pk %}">
{% csrf_token %}<input class="btnTab btnTab3" type="submit" value="">
</form>
<a href="{% url 'users:contractor-profile' cand.answer.author.pk %}#open-contact">
<div class="btnTab btnTab4"></div>
</a>
</div>
</td>
</tr>
{% endfor %}
<form method="POST" action="{% url 'projects:delete-candidate' cand.pk %}">
{% csrf_token %}
<input class="btnTab btnTab3" type="submit" value="" title="Удалить из сравнения">
</form>
<a href="{% url 'users:contractor-profile' cand.answer.author.pk %}#open-contact">
<div class="btnTab btnTab4" title="Показать контакты"></div>
</a>
</div>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
@ -112,8 +114,9 @@
</div>
</div>
{% endblock %}
{% block js_block %}
<script type="text/javascript">
<script>
$(function () {
var fixHelper = function (e, ui) {
ui.children().each(function () {

@ -7,6 +7,7 @@ from .views import (
CandidateDeleteView,
contractor_portfolio_create,
ContractorAnswerArchiveView,
ContractorOfferOrder,
ContractorPortfolioTrashView,
ContractorPortfolioUpdateView,
CustomerOfferOrderView,
@ -22,6 +23,7 @@ from .views import (
ProjectFilterView,
RejectProjectAnswerView,
sort_candidates,
TeamOfferOrder,
)
app_name = 'projects'
@ -45,7 +47,7 @@ urlpatterns = [
urls.url(r'^arbitration/create/$', ArbitrationCreateView.as_view(), name='arbitration-create'),
urls.url(r'^portfolio/(?P<pk>\d+)/?$', PortfolioDetail.as_view(), name='contractor-portfolio-detail'),
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/delete/(?P<pk>(\d+))/$', CandidateDeleteView.as_view(), name='delete-candidate'),
urls.url(r'^candidate/comparison/sort/$', sort_candidates, name='comparison-sort'),
@ -53,5 +55,6 @@ urlpatterns = [
urls.url(r'^customer-offer-order/(?P<answer_id>(\d+))/(?P<project_id>(\d+))/$', CustomerOfferOrderView.as_view(), name='customer-offer-order'),
# urls.url(r'^portfolio/create/$', PortfolioCreateView.as_view(), name='portfolio-create'),
urls.url(r'^(?P<project_id>\d+)/contractor-offer-order/(?P<contractor_id>\d+)/$', ContractorOfferOrder.as_view(), name='contractor-offer-order'),
urls.url(r'^(?P<project_id>\d+)/team-offer-order/(?P<team_id>\d+)/$', TeamOfferOrder.as_view(), name='team-offer-order'),
]

@ -20,6 +20,7 @@ import re
from .mixins import LastAccessMixin
from archilance import util
from archilance.mixins import BaseMixin
from common.mixins import CustomerRequiredMixin, ContractorRequiredMixin, NoCsrfMixin
from users.models import User, Team
from work_sell.models import Picture, WorkSell, WorkSellPhoto
@ -778,4 +779,23 @@ class ArbitrationCreateView(CreateView):
return JsonResponse(form.errors, status=400)
return super().form_invalid(form)
class ContractorOfferOrder(NoCsrfMixin, CustomerRequiredMixin, View):
def post(self, request, *args, project_id, contractor_id, **kwargs):
project = get_object_or_404(Project, pk=project_id)
contractor = get_object_or_404(User.contractor_objects, pk=contractor_id)
# project.order.contractor
return JsonResponse({'status': 'success'})
class TeamOfferOrder(NoCsrfMixin, CustomerRequiredMixin, View):
def post(self, request, *args, project_id, team_id, **kwargs):
project = get_object_or_404(Project, pk=project_id)
team = get_object_or_404(Team, pk=team_id)
return JsonResponse({'status': 'success'})
# import code; code.interact(local=dict(globals(), **locals()))

@ -87,7 +87,7 @@
if ((queryString.indexOf('/chat') != 0) && (queryString.indexOf('/users/contractor-office/510/work-projects') != 0)) {
domain = domain.replace(':' + port, '');
var url = 'ws://' + domain + '/chat/' + userId + '/';
var url = 'ws://' + domain + ':8888/chat/' + userId + '/';
var sock = new WebSocket(url);
var intervalId;
sock.onopen = function () {

@ -21,7 +21,7 @@
<div class="col-lg-7">
<ul class="mainMenu">
<li class="icon_tm1">
<a href="{% url 'projects:project-filter' %}">Биржа проектов</a>
<a href="{% url 'projects:project-filter' %}">Поиск заказов</a>
<span></span>
</li>
@ -48,7 +48,7 @@
<div class="col-lg-7">
<ul class="mainMenu">
<li class="icon_tm1">
<a href="{% url 'projects:project-filter' %}">Биржа проектов</a>
<a href="{% url 'projects:project-filter' %}">Поиск заказов</a>
<span></span>
</li>
<li class="icon_tm2">
@ -93,7 +93,7 @@
</a>
</li>
{% endif %}
<li class="icon_mm3">
<li class="icon_mm8">
<a href="{{ profile_url }}">
Профиль<span></span>
</a>
@ -112,14 +112,13 @@
<a href="/pages/faq">FAQ<span></span></a>
</li>
<li class="icon_mm6">
<li class="icon_mm7">
<a href="{% url 'auth_logout' %}">Выйти<span></span></a>
</li>
</ul>
</div>
</div>
<div class="imgProfile">
{% if request.user.is_contractor %}
<a href="{{ profile_url }}">

@ -9,19 +9,17 @@
<link rel='stylesheet' href='{% static "lib/jquery-ui/jquery-ui.css" %}'>
<link rel='stylesheet' href='{% static "css/bootstrap.css" %}'>
<script>
window.djangoData = JSON.parse({{ data_json|repr|safe }})
</script>
</head>
<body>
<div class='container-fluid'>
<div class='row'>
<div class='col-xs-12' style='margin-top: 15px'>
{# {% url 'projects:customer-offer-order-answerless' contractor_id=11 project_id=485 as url %}#}
{# #}
{# <form action="{{ url }}" method="POST" novalidate>#}
{# {% csrf_token %}#}
{# #}
{# <button type="submit">{{ url }}</button>#}
{# </form>#}
<pre>{{ data_json }}</pre>
</div>
</div>
</div>

@ -173,7 +173,7 @@
{% with team=obj %}
<div class="executorBlock clearfix">
<div class="col-lg-4">
<a href="#" class="aLinkExe">
<a href="{% url 'users:team-profile' pk=team.pk %}" class="aLinkExe">
<div class="imgExecutor">
{% if team.owner.avatar %}
{% thumbnail team.owner.avatar "126x125" crop="center" as avatar %}
@ -185,7 +185,7 @@
</div>
</a>
<p class="nameExecutor">
<a href="">{{ team.name }}</a> {# TODO #}
<a href="{% url 'users:team-profile' pk=team.pk %}">{{ team.name }}</a>
</p>
<p class="navv2">На сайте 8 лет и 3 месяца</p>
<div class="statusUser">Свободен</div>
@ -201,15 +201,20 @@
</li>
<li>
{% if request.user.is_customer %}
<a href="#" onclick="return false" class="-contractor-offer-order" data-contractor-id="{{ team.owner.pk }}" data-is-team-offer="true">
предложить проект
<a
href="#"
onclick="return false"
data-contractor-id="{{ team.owner.pk }}"
data-team-id="{{ team.pk }}"
data-is-team-offer="true"
data-toggle="modal"
data-target="#projectSelectionModal">
предложить проект
</a>
{% endif %}
</li>
<li>
{# TODO #}
{# <a href="{% url 'chat:chat-user' %}?user_id={{ team..owner.pk }}">#}
<a href="#">
<a href="{% url 'chat:chat-user' %}?user_id={{ team.owner.pk }}">
написать сообщение
</a>
</li>
@ -223,17 +228,9 @@
<div class="col-lg-3 retts">
<ul class="rettList restList2">
<li>Рейтинг: <span> 1245</span></li>
<li>Безопасные сделки: <span> 5</span></li>
<li>
<a href="javascript:void(0)">Отзывы:
<span> + 385</span>
<small> 0</small>
<mark> - 0</mark>
</a>
</li>
</ul>
{% ratings_team_widget team.pk 'restList2' %}
<!-- TODO -->
<div class="sroUser sroExecutor">
<div class="iconSRO"></div>
<p>Есть допуск СРО</p>
@ -329,7 +326,6 @@
<a
href="#"
onclick="return false"
class="-contractor-offer-order"
data-contractor-id="{{ contractor.pk }}"
data-toggle="modal"
data-target="#projectSelectionModal">
@ -354,11 +350,12 @@
<div class="col-lg-3 retts">
{% ratings_widget contractor.pk 'restList2' %}
{% if contractor.cro %}
<div class="sroUser sroExecutor">
<div class="iconSRO"></div>
<p>Есть допуск СРО</p>
</div>
<div class="sroUser sroExecutor">
<div class="iconSRO"></div>
<p>Есть допуск СРО</p>
</div>
{% endif %}
</div>
@ -415,6 +412,9 @@
{% if request.user.is_customer %}
var customerId = {{ request.user.pk }}
var $projectSelectionModal = $('#projectSelectionModal')
var projectUrl_ = '/projects/%id%/'
var projectOrderChatUrl_ = '/chat/#order%orderId%'
$projectSelectionModal.on('shown.bs.modal', function($evt) {
var $that = $(this)
@ -427,33 +427,66 @@
initProjectSelect($projectSelect, customerId)
})
$projectSelectionModal.find('.-action-button').first().on('click', function($evt) {
var $projectSelect = $projectSelectionModal.find('.-project-select').first()
var $modalOpenButton = $projectSelectionModal.data('modalOpenButton')
var isTeamOffer = $modalOpenButton.data('isTeamOffer')
var project = $projectSelect.select2('data')
var contractorId = $modalOpenButton.data('contractorId')
var project = $projectSelect.select2('data').origItem
var projectUrl = _.replace('%id%', project.id, projectUrl_)
var projectOrderChatUrl = _.replace('%orderId%', project.order.id, projectOrderChatUrl_)
$projectSelectionModal.modal('hide')
$projectSelect.select2('destroy')
if (isTeamOffer)
var msg = 'Вашей команде предлагается проект ' + project.id
else
var msg = 'Вам предлагается проект ' + project.id
socketMain.add_message({
format_type: 'add_message_contact',
if (isTeamOffer) {
var contractorId = $modalOpenButton.data('contractorId')
var teamId = $modalOpenButton.data('teamId')
data: {
sender_id: customerId,
recipent_id: contractorId,
chat_message: msg,
},
})
$.jGrowl('Предложение успешно отправлено')
$modalOpenButton.fadeOut()
if (project.order.team && project.order.team.id === teamId) {
window.location.href = projectOrderChatUrl
} else {
var msg = 'Вашей команде предлагается проект http://{{ request.get_host }}' + projectUrl
socketMain.add_message({
format_type: 'add_message_contact',
data: {
sender_id: customerId,
recipent_id: contractorId,
chat_message: msg,
},
})
}
$.jGrowl('Предложение успешно отправлено')
$modalOpenButton.fadeOut()
} else {
var contractorId = $modalOpenButton.data('contractorId')
if (project.order.contractor && project.order.contractor.id === contractorId) {
window.location.href = projectOrderChatUrl
} else {
var msg = 'Вам предлагается проект http://{{ request.get_host }}' + projectUrl
socketMain.add_message({
format_type: 'add_message_contact',
data: {
sender_id: customerId,
recipent_id: contractorId,
chat_message: msg,
},
})
}
$.jGrowl('Предложение успешно отправлено')
$modalOpenButton.fadeOut()
}
})
$projectSelectionModal.on('hidden.bs.modal', function($evt) {
$(this).find('.-project-select').first().select2('destroy')
})
{% endif %}
</script>

@ -4,6 +4,7 @@
{% load thumbnail %}
{% block content %}
{% include 'partials/modals/project_selection.html' %}
{% include 'partials/header.html' %}
<div class="container mainScore mainBlock2">
@ -52,8 +53,13 @@
{% if request.user.is_customer %}
<li class="icon_um4">
<a href="javascript:void(0)">
предложить заказ
<a
href="#"
onclick="return false"
data-contractor-id="{{ contractor.pk }}"
data-toggle="modal"
data-target="#projectSelectionModal">
предложить заказ
</a>
<span></span>
</li>
@ -487,12 +493,13 @@
</div>
</div>
<div class="col-lg-12 wr-inset-pluss">
<a href="#" data-toggle="modal" data-target="#resume-text-edit" style="float: left; margin-right: 10px;">
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
</a>
<div class="pluss-block" id="resume-text-out">
{{ contractor.contractor_resume.text|safe }}
</div>
<a href="#" data-toggle="modal" data-target="#resume-text-edit">
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
</a>
<!-- Редактирование текста резюме (модальное окно)-->
<div id="resume-text-edit" class="modal fade">
@ -794,6 +801,72 @@
{% endif %}
// Contractor order offer --------------------------------------
{% if request.user.is_customer %}
var customerId = {{ request.user.pk }}
var $projectSelectionModal = $('#projectSelectionModal')
var projectUrl_ = '/projects/%id%/'
var projectOrderChatUrl_ = '/chat/#order%orderId%'
$projectSelectionModal.on('shown.bs.modal', function($evt) {
var $that = $(this)
var $modalOpenButton = $($evt.relatedTarget)
var $projectSelect = $that.find('.-project-select').first()
$that.data('modalOpenButton', $modalOpenButton)
initProjectSelect($projectSelect, customerId)
})
$projectSelectionModal.find('.-action-button').first().on('click', function($evt) {
var $projectSelect = $projectSelectionModal.find('.-project-select').first()
var $modalOpenButton = $projectSelectionModal.data('modalOpenButton')
var contractorId = $modalOpenButton.data('contractorId')
var project = $projectSelect.select2('data').origItem
var projectUrl = _.replace('%id%', project.id, projectUrl_)
var projectOrderChatUrl = _.replace('%orderId%', project.order.id, projectOrderChatUrl_)
$projectSelectionModal.modal('hide')
if (project.order.contractor && project.order.contractor.id === contractorId) {
window.location.href = projectOrderChatUrl
} else {
var msg = 'Вам предлагается проект http://{{ request.get_host }}' + projectUrl
socketMain.add_message({
format_type: 'add_message_contact',
data: {
sender_id: customerId,
recipent_id: contractorId,
chat_message: msg,
},
})
}
$.jGrowl('Предложение успешно отправлено')
$modalOpenButton.closest('.icon_um4').fadeOut()
})
$projectSelectionModal.on('hidden.bs.modal', function($evt) {
$(this).find('.-project-select').first().select2('destroy')
})
{% endif %}
//-----------------------------------------------------------------

@ -27,8 +27,3 @@ def contractor_indicator(context, contractor):
def has_group(user, group_name):
groups = user.groups.all().values_list('name', flat=True)
return True if group_name in groups else False
@register.simple_tag
def test():
return 'Hello there'

@ -20,30 +20,33 @@
</div>
{% endif %}
</div>
<div class="btnReadyBlock disTab">
<div class="triangle1"></div>
<div class="col-lg-3">
<p class="cenaReady">{{ object.budget }} <i class="{% fa_currency_classes object.currency %}"></i></p>
</div>
{% if request.user.is_authenticated %}
{% if object.contractor %}
<div class="btnReadyBlock disTab">
<div class="triangle1"></div>
<div class="col-lg-3">
<a href="{% url 'users:contractor-profile' object.contractor.pk %}" class="linkReady LR1">
купить
</a>
<p class="cenaReady">{{ object.budget }} <i class="{% fa_currency_classes object.currency %}"></i></p>
</div>
{% if request.user.is_authenticated %}
<div class="col-lg-3">
<a href="{% url 'users:contractor-profile' object.contractor.pk %}" class="linkReady LR1">
купить
</a>
</div>
<div class="col-lg-3">
<a href="{% url 'chat:chat-user' %}?user_id={{ object.contractor.pk }}" class="linkReady LR2">
Написать сообщение
</a>
</div>
{% endif %}
<div class="col-lg-3">
<a href="{% url 'chat:chat-user' %}?user_id={{ object.contractor.pk }}" class="linkReady LR2">
Написать сообщение
<a href="{% url 'users:contractor-profile' object.contractor.pk %}" class="linkReady LR3">
посмотреть контакты
</a>
</div>
{% endif %}
<div class="col-lg-3">
<a href="{% url 'users:contractor-profile' object.contractor.pk %}" class="linkReady LR3">
посмотреть контакты
</a>
</div>
</div>
{% endif %}
<div class="desReadyBlock">

Loading…
Cancel
Save