#ARC-6 Fixes bugs

remotes/origin/PR-39
Mukhtar 10 years ago
parent 4dd71cff71
commit 84598a1d34
  1. 27
      chat/templates/chat_contractor.html
  2. 26
      chat/templates/chat_customer.html
  3. 5
      chat/testapp.py
  4. 2
      projects/forms.py
  5. 7
      projects/templates/contractor_portfolio_edit.html
  6. 24
      projects/views.py
  7. 5
      ratings/templates/templatetags/ratings_widget.html
  8. 20
      users/templates/contractor_filter.html
  9. 7
      users/templates/contractor_office.html
  10. 12
      users/templates/contractor_profile.html
  11. 11
      users/templates/portfolio_create_form.html

@ -50,21 +50,7 @@
<div><a href="#" style="color:black;">{{ contact.username }}</a></div> <div><a href="#" style="color:black;">{{ contact.username }}</a></div>
</p> </p>
<div class="modal fade" id="userModal" tabindex="-1" role="dialog"> <a href="#" class="conMess">Контакты</a>
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button class="close" type="button" data-dismiss="modal">x</button>
<h4 class="modal-title" id="myModalLabel">Название модального
окна</h4>
</div>
<div class="modal-body">
<h3>Содержимое модального окна</h3>
</div>
</div>
</div>
</div>
<a href="#" data-target="#userModal" data-toggle="modal" class="conMess">Контакты</a>
<span>0</span> <span>0</span>
<a href="javascript:void(0)" class="deleteMess"> <a href="javascript:void(0)" class="deleteMess">
@ -299,7 +285,7 @@
console.log(message.msg); console.log(message.msg);
inbox.innerHTML += '<div class="col-lg-12 insetCommChat"><div class="topCommChat">' + inbox.innerHTML += '<div class="col-lg-12 insetCommChat"><div class="topCommChat">' +
'<p class="nameCommChat">ВЫ</p> <span>13.0.2016</span></div>' + '<p class="nameCommChat">ВЫ</p> <span>Сейчас</span></div>' +
'<p class="textCommChat">' + message.msg + '</p></div>'; '<p class="textCommChat">' + message.msg + '</p></div>';
}; };
@ -573,6 +559,11 @@
$('.user-block').on('click', function () { $('.user-block').on('click', function () {
var userId = $(this).attr('data-id'); var userId = $(this).attr('data-id');
$("#contact-chat-form #recipentId").val(userId); $("#contact-chat-form #recipentId").val(userId);
$('.user-block').each(function () {
$(this).removeClass('mesAct');
});
$(this).addClass('mesAct');
var inbox = document.getElementById('message-chat-space'); var inbox = document.getElementById('message-chat-space');
inbox.innerHTML = ''; inbox.innerHTML = '';
$.ajax({ $.ajax({
@ -647,10 +638,6 @@
}); });
var inbox = $('#message-chat-space').html(); var inbox = $('#message-chat-space').html();
$('#message-chat-space').html(inbox + '<div class="col-lg-12 insetCommChat"><div class="topCommChat">' +
'<p class="nameCommChat">Вы</p> <span>Сейчас</span></div>' +
'<p class="textCommChat">' + chatMessage + '</p></div>');
$("#chat").val(""); $("#chat").val("");
}); });

@ -56,20 +56,6 @@
</div> </div>
</div> </div>
<div class="modal fade" id="userModal" tabindex="-1" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button class="close" type="button" data-dismiss="modal">x</button>
<h4 class="modal-title" id="myModalLabel">Название модального
окна</h4>
</div>
<div class="modal-body">
<h3>Содержимое модального окна</h3>
</div>
</div>
</div>
</div>
<div class="col-lg-6 commChat" id="contact-chat"> <div class="col-lg-6 commChat" id="contact-chat">
<div id="message-chat-space"> <div id="message-chat-space">
</div> </div>
@ -473,6 +459,12 @@
$('.user-block').on('click', function () { $('.user-block').on('click', function () {
var userId = $(this).attr('data-id'); var userId = $(this).attr('data-id');
$("#contact-chat-form #recipentId").val(userId); $("#contact-chat-form #recipentId").val(userId);
$('.user-block').each(function () {
$(this).removeClass('mesAct');
});
$(this).addClass('mesAct');
var inbox = document.getElementById('message-chat-space'); var inbox = document.getElementById('message-chat-space');
inbox.innerHTML = ''; inbox.innerHTML = '';
$.ajax({ $.ajax({
@ -564,13 +556,13 @@
console.log(event.data); console.log(event.data);
var message = JSON.parse(event.data); var message = JSON.parse(event.data);
var inbox; var inbox;
if (message.answer_type == 'contact') { if (message.answer_type == 'contact' || message.answer_type == 'add_message_contact') {
inbox = document.getElementById('message-chat-space'); inbox = document.getElementById('message-chat-space');
} else if (message.answer_type == 'order' || message.answer_type == 'add_order') { } else if (message.answer_type == 'order' || message.answer_type == 'add_message_order') {
inbox = document.getElementById('message-chat-order-space') inbox = document.getElementById('message-chat-order-space')
} }
inbox.innerHTML += '<div class="col-lg-12 insetCommChat"><div class="topCommChat">' + inbox.innerHTML += '<div class="col-lg-12 insetCommChat"><div class="topCommChat">' +
'<p class="nameCommChat">Иванов</p> <span>13.0.2016</span></div>' + '<p class="nameCommChat">Вы</p> <span>Сейчас</span></div>' +
'<p class="textCommChat">' + message.msg + '</p></div>'; '<p class="textCommChat">' + message.msg + '</p></div>';
}; };

@ -61,12 +61,13 @@ class ChatHandler(websocket.WebSocketHandler):
answer_type = message_data['format_type'] answer_type = message_data['format_type']
private_type = 'true' if not order_id and not team_id else 'false' private_type = 'true' if not order_id and not team_id else 'false'
is_new = 'true'
team_value = "NULL" if team_id is None else team_id team_value = "NULL" if team_id is None else team_id
order_value = "NULL" if order_id is None else order_id order_value = "NULL" if order_id is None else order_id
insert_sql = "INSERT INTO chat_message (id,text,created, sender_id,recipent_id, private_type,team_id, order_id) " \ insert_sql = "INSERT INTO chat_message (id,text,created, sender_id,recipent_id, private_type,team_id, order_id,is_new) " \
"VALUES (DEFAULT,'{0}',NOW(),{1},{2},{3},{4},{5})".format(message, sender_id, recipent_id, private_type, team_value,order_value) "VALUES (DEFAULT,'{0}',NOW(),{1},{2},{3},{4},{5},{6})".format(message, sender_id, recipent_id, private_type, team_value,order_value,is_new)
yield self.db.execute(insert_sql) yield self.db.execute(insert_sql)
waiters = tuple(w for c, w in self.waiters if c == recipent_id or c == sender_id) waiters = tuple(w for c, w in self.waiters if c == recipent_id or c == sender_id)

@ -150,6 +150,8 @@ class RealtyForm(forms.ModelForm):
class PortfolioForm(forms.ModelForm): class PortfolioForm(forms.ModelForm):
duplicate = forms.BooleanField(required=False,label='Some label here')
class Meta: class Meta:
model = Portfolio model = Portfolio
fields = '__all__' fields = '__all__'

@ -81,13 +81,18 @@
<div class="polsF1 polsF2 disTab"> <div class="polsF1 polsF2 disTab">
<p>Классификация здания</p> <p>Классификация здания</p>
{{ form.building_classification}} {{ form.building_classification}}
</div> </div>
<div class="textAreaBlock2 text-nn box-sizing disTab"> <div class="textAreaBlock2 text-nn box-sizing disTab">
<input type="file" name="{{ form.img.html_name }}" > {# <input type="file" name="{{ form.img.html_name }}" >#}
<input type="hidden" name="{{ form.user.html_name }}" value="{{ form.user.value }}" >
</div> </div>
<div class="searchF1 polsF1 polsFF links-filter"> <div class="searchF1 polsF1 polsFF links-filter">
<input class="btn-submit-link" type="submit" value="Сохранить проект"> <input class="btn-submit-link" type="submit" value="Сохранить проект">
<input class="btn-submit-link" type="button" value="Отмена">
</div> </div>
</form> </form>

@ -18,7 +18,7 @@ from .mixins import LastAccessMixin
from .models import Project, ProjectFile, Portfolio, PortfolioPhoto, Candidate, Answer, AnswerFile, AnswerMessage, Realty, Order from .models import Project, ProjectFile, Portfolio, PortfolioPhoto, Candidate, Answer, AnswerFile, AnswerMessage, Realty, Order
from archilance.mixins import BaseMixin from archilance.mixins import BaseMixin
from users.models import User, Team from users.models import User, Team
from work_sell.models import Picture from work_sell.models import Picture, WorkSell, WorkSellPhoto
from .forms import ( from .forms import (
ContractorPortfolioTrashForm, ContractorPortfolioTrashForm,
@ -577,8 +577,23 @@ def contractor_portfolio_create(request):
form = PortfolioForm(data=request.POST) form = PortfolioForm(data=request.POST)
# import code; code.interact(local=dict(globals(), **locals())) # import code; code.interact(local=dict(globals(), **locals()))
if form.is_valid(): if form.is_valid():
duplicate = form.cleaned_data.get('duplicate')
instance = form.save(commit=False) instance = form.save(commit=False)
instance.user = request.user
instance.save() instance.save()
if duplicate:
work_sell = WorkSell()
work_sell.name = instance.name
work_sell.budget = instance.budget
work_sell.building_classification = instance.building_classification
work_sell.construction_type = instance.construction_type
work_sell.currency = instance.currency
work_sell.description = instance.description
work_sell.term = instance.term
work_sell.term_type = instance.term_type
work_sell.contractor = instance.user
work_sell.save()
images_ids = request.POST.get('images-ids').split(';')[:-1] images_ids = request.POST.get('images-ids').split(';')[:-1]
for pk in images_ids: for pk in images_ids:
picture = Picture.objects.get(pk=pk) picture = Picture.objects.get(pk=pk)
@ -588,6 +603,11 @@ def contractor_portfolio_create(request):
p_photo.img = temp_file p_photo.img = temp_file
p_photo.portfolio = instance p_photo.portfolio = instance
p_photo.save() p_photo.save()
if duplicate:
w_photo = WorkSellPhoto()
w_photo.img = temp_file
w_photo.worksell = work_sell
w_photo.save()
data = {'status': 'ok'} data = {'status': 'ok'}
else: else:
data = {'status': 'no', 'form_errors': form.errors} data = {'status': 'no', 'form_errors': form.errors}
@ -602,7 +622,7 @@ class ContractorPortfolioUpdateView(UpdateView):
template_name = 'contractor_portfolio_edit.html' template_name = 'contractor_portfolio_edit.html'
def get_success_url(self): def get_success_url(self):
return reverse('proje') return reverse('users:contractor-profile',kwargs={'pk':self.object.user_id})
class PortfolioDelete(DeleteView): class PortfolioDelete(DeleteView):

@ -1,6 +1,6 @@
<ul class="rettList {{ class_name }}"> <ul class="rettList {{ class_name }}">
<li><a href="javascript:void(0)">Рейтинг: <span> {{ ratings }}</span></a></li> <li>Рейтинг: <span> {{ ratings }}</span></li>
<li><a href="javascript:void(0)">Безопасные сделки: <span> 0</span></a></li> <li>Безопасные сделки: <span> 0</span></li>
<li> <li>
<a href="javascript:void(0)"> <a href="javascript:void(0)">
Отзывы: Отзывы:
@ -10,3 +10,4 @@
</a> </a>
</li> </li>
</ul> </ul>

@ -233,6 +233,7 @@
<div class="col-lg-3 retts"> <div class="col-lg-3 retts">
<ul class="rettList restList2"> <ul class="rettList restList2">
<li>Рейтинг: <span> 1245</span></li> <li>Рейтинг: <span> 1245</span></li>
<li>Безопасные сделки: <span> 5</span></li> <li>Безопасные сделки: <span> 5</span></li>
@ -335,13 +336,16 @@
смотреть профиль смотреть профиль
</a> </a>
</li> </li>
{% if request.user.is_customer %}
<li> <li>
<a href="javascript:void(0)"> <a href="javascript:void(0)">
предложить проект предложить проект
</a> </a>
</li> </li>
{% endif %}
<li> <li>
<a href="javascript:void(0)"> <a href="{% url 'chat:chat-user' %}?user_id={{ obj.pk }}">
написать сообщение написать сообщение
</a> </a>
</li> </li>
@ -384,21 +388,13 @@
<div class="col-lg-3 retts"> <div class="col-lg-3 retts">
<ul class="rettList restList2"> {% ratings_widget obj.pk 'restList2' %}
<li>Рейтинг: <span> 1245</span></li> {% if obj.cro %}
<li>Безопасные сделки: <span> 5</span></li>
<li>
<a href="javascript:void(0)">Отзывы:
<span> + 385</span>
<small> 0</small>
<mark> - 0</mark>
</a>
</li>
</ul>
<div class="sroUser sroExecutor"> <div class="sroUser sroExecutor">
<div class="iconSRO"></div> <div class="iconSRO"></div>
<p>Есть допуск СРО</p> <p>Есть допуск СРО</p>
</div> </div>
{% endif %}
</div> </div>

@ -68,7 +68,7 @@
</div> </div>
<div class="menuUser disTab"> <div class="menuUser disTab">
<a href="javascript:void(0)" class="add-man"> <a href="{% url 'users:contractor-filter' %}" class="add-man">
добавить участника добавить участника
</a> </a>
@ -86,7 +86,7 @@
</div> </div>
<p class="nameMess"> <p class="nameMess">
<a href="#">{{ p.get_full_name }}</a> <a href="{% url 'users:contractor-profile' p.pk %}">{{ p.get_full_name }}</a>
</p> </p>
<span>Программист</span> <span>Программист</span>
@ -123,10 +123,13 @@
{% if contractor.team %} {% if contractor.team %}
{% ratings_team_widget contractor.team.pk %} {% ratings_team_widget contractor.team.pk %}
{% endif %} {% endif %}
{% if contractor.cro %}
<div class="sroUser"> <div class="sroUser">
<div class="iconSRO"></div> <div class="iconSRO"></div>
<p>Есть допуск СРО</p> <p>Есть допуск СРО</p>
</div> </div>
{% endif %}
</div> </div>
</div> </div>

@ -318,10 +318,11 @@
<div class="col-lg-12 wr-inset-pluss"> <div class="col-lg-12 wr-inset-pluss">
<div class="pluss-block" id="resume-text-out"> <div class="pluss-block" id="resume-text-out">
{{ contractor.contractor_resume.text }} {{ contractor.contractor_resume.text }}
<a href="#" data-toggle="modal" data-target="#resume-text-edit">
</div>
<a href="#" data-toggle="modal" data-target="#resume-text-edit">
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span> <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
</a> </a>
</div>
<!-- Редактирование текста резюме (модальное окно)--> <!-- Редактирование текста резюме (модальное окно)-->
<div id="resume-text-edit" class="modal fade"> <div id="resume-text-edit" class="modal fade">
@ -437,8 +438,8 @@
</p> </p>
{% if review.project.deal_type == 'secure_deal' %} {% if review.project.deal_type == 'secure_deal' %}
<span class="dateComm44"> <span class="dateComm44">
Безопасная сделка Безопасная сделка
</span> </span>
{% endif %} {% endif %}
<div class="stars box-sizing"> <div class="stars box-sizing">
<a href="#">положительный отзыв</a> <a href="#">положительный отзыв</a>
@ -485,7 +486,8 @@
console.log(data); console.log(data);
if (data.status == 'ok') { if (data.status == 'ok') {
$("#resume-text-out").html(data.text); $("#resume-text-out").html(data.text);
$("#resume-text-edit").close(); $("#resume-text-edit").modal('hide');
} }
}, },
error: function (jqXHR, exception) { error: function (jqXHR, exception) {

@ -41,7 +41,7 @@
<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="{{ form.budget.html_name }}" value="{{ 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-6"> <div class="col-lg-6">
{{ portfolio_form.currency}} {{ portfolio_form.currency}}
@ -53,7 +53,7 @@
<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="{{ form.budget.html_name }}" value="{{ 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-6"> <div class="col-lg-6">
{{ portfolio_form.term_type }} {{ portfolio_form.term_type }}
@ -74,12 +74,11 @@
<div class="polsF1 polsF2 disTab"> <div class="polsF1 polsF2 disTab">
<input type="hidden" name="{{ portfolio_form.user.html_name }}" value="{{ request.user.pk }}" /> <input type="hidden" name="{{ portfolio_form.user.html_name }}" value="{{ request.user.pk }}" />
</div>
<div class="polsF1 polsF2 disTab">
<input type="hidden" name="images-ids" id="upload-files-pk" /> <input type="hidden" name="images-ids" id="upload-files-pk" />
{{ portfolio_form.duplicate }} Дублировать проект в готовые работы
</div> </div>
<!-- The fileinput-button span is used to style the file input field as button --> <!-- The fileinput-button span is used to style the file input field as button -->
<span class="btn btn-success fileinput-button"> <span class="btn btn-success fileinput-button">
@ -98,7 +97,7 @@
<div id="files" class="files"></div> <div id="files" class="files"></div>
<br> <br>
<div class="searchF1 polsF1 polsFF links-filter"> <div class="searchF1 polsF1 polsFF links-filter">
<input class="btn-submit-link" type="submit" value="Разместить портфолио"> <input class="btn-submit-link" type="submit" value="Разместить портфолио">
</div> </div>
</form> </form>
</div> </div>

Loading…
Cancel
Save