diff --git a/assets/js/chat.js b/assets/js/chat.js index ab650dd..5430d7f 100644 --- a/assets/js/chat.js +++ b/assets/js/chat.js @@ -20,7 +20,7 @@ var SocketHandler = function () { } else if (message.answer_type == 'add_message_team') { inbox = document.getElementById('message-chat-team-space'); } else if (message.answer_type == 'approve_stages') { - alert('approve stages'); + console.log('approve stages'); } if (inbox) { var textMessage = message.msg; diff --git a/chat/templates/chat_customer.html b/chat/templates/chat_customer.html index 664c422..70e5022 100644 --- a/chat/templates/chat_customer.html +++ b/chat/templates/chat_customer.html @@ -101,7 +101,7 @@

Заказы

{% for order in orders %}
+ id="orderBlock{{ order.order.id }}" data-secure-deal="{% if order.order.secure %}true{% else %}false{% endif %}" data-recipent-id="{{ order.order.contractor.pk }}" data-id="{{ order.order.id }}">

{{ order }}

@@ -151,7 +151,7 @@
-
+ -
+ '; } var statusNotAgreed = true; @@ -313,13 +344,19 @@ }); if (statusNotAgreed) { - htmlInbox += '
' + - '
' + - 'Перейти в режим безопасной сделки
' + - '
' + + if(secureOrder) { + var orderSecureCheckbox = 'checked="checked"'; + htmlInbox += '
' + + '
' + + 'Перейти в режим безопасной сделки
'; + } + + htmlInbox +=''; + }else if(json.results.length>0){ + $("#reserveSpace").show(); } htmlInbox = htmlInboxStage + htmlInbox; $("#order-stages").html(htmlInbox); @@ -414,8 +451,8 @@ var currentOrderId = $(this).attr('data-order-id'); var currentRecipentId = $(this).attr('data-recipent-id'); - - getStages(currentOrderId,userId,currentRecipentId); + var secureOrder = true + getStages(currentOrderId,userId,currentRecipentId,secureOrder); socket.send_stages_approve({ "format_type": "approve_stages", @@ -446,11 +483,9 @@ '' + '' + '' + - '' + '' '
'; - lastFormStage.after(addFormTemplate); - } }else if (countStage < currentCountStage) { @@ -477,6 +512,8 @@ $(this).addClass('orAct'); var orderId = $(this).attr('data-id'); var recipentId = $(this).attr('data-recipent-id'); + var secureOrder = $(this).attr('data-secure-deal'); + secureOrder = Boolean(secureOrder); $("#chat-order-add #orderId").val(orderId); $("#projectReviewId").val(orderId); $("#reserve-button").attr('data-order-id', orderId); @@ -506,7 +543,7 @@ }); } }); - getStages(orderId,userId,recipentId); + getStages(orderId,userId,recipentId, secureOrder); }); // Вытащить сообщения для конактов diff --git a/chat/templates/reverse_stage_modal.html b/chat/templates/reverse_stage_modal.html index 5732c93..ef4701a 100644 --- a/chat/templates/reverse_stage_modal.html +++ b/chat/templates/reverse_stage_modal.html @@ -12,7 +12,7 @@

Сумма оплаты всего заказа

@@ -26,10 +26,10 @@
-

Оплатить этап


+

Оплатить этап


Бюджет Этапа 1: р.
Итого к оплате: р. @@ -44,6 +44,27 @@

Резервирование средств

+
{% csrf_token %} + + + +
+
diff --git a/chat/views.py b/chat/views.py index 63fb363..424e45b 100644 --- a/chat/views.py +++ b/chat/views.py @@ -1,5 +1,6 @@ import json from django.shortcuts import render +from django.conf import settings from django.views.generic import View from django.http import HttpResponse, Http404 from django.db.models import Q @@ -7,6 +8,7 @@ from django.contrib.auth.mixins import LoginRequiredMixin from .models import Message from projects.models import Order +from wallets.models import Transaction from users.models import User, Team @@ -16,7 +18,7 @@ class ChatUserView(LoginRequiredMixin, View): def get(self, request, *args, **kwargs): # import code; code.interact(local=dict(globals(), **locals())) user_id = request.GET.get('user_id',None) - if request.user.is_authenticated() and request.user.is_customer(): + if request.user.is_customer(): customer_contacts = Message.objects.values_list('sender_id', 'recipent_id'). \ filter(Q(recipent_id=request.user.pk) | Q(sender_id=request.user.pk)).filter(Q(team_id=None)).distinct() @@ -34,10 +36,15 @@ class ChatUserView(LoginRequiredMixin, View): chat_messages = Message.objects.filter(Q(sender=request.user.pk) | Q(recipent=request.user.pk)) orders = request.user.projects.select_related('order').exclude(order__contractor__isnull=True) + transaction = Transaction.objects.get_or_create(customer=request.user, type='reservation') + print(transaction) self.template_name = 'chat_customer.html' return render(request, self.template_name, {'contacts_users': contacts_users, 'chat_messages': chat_messages, - 'orders': orders}) + 'orders': orders, + 'transaction': transaction[0], + 'YANDEX_MONEY': settings.YANDEX_MONEY, + }) else: orders = request.user.orders.all() contractor_contacts = Message.objects.values_list('sender_id', 'recipent_id').filter( @@ -60,13 +67,13 @@ class ChatUserView(LoginRequiredMixin, View): else: teams = Team.objects.filter(contractors__id=request.user.pk).all() team_orders = Order.objects.filter(team_id__in=[team.pk for team in teams]).all() - # team_orders = [] self.template_name = 'chat_contractor.html' return render(request, self.template_name, {'orders': orders, 'contacts_users': contacts_users, 'chat_messages': chat_messages, 'team_orders': team_orders, + }) diff --git a/projects/migrations/0015_auto_20160824_1119.py b/projects/migrations/0015_auto_20160824_1119.py new file mode 100644 index 0000000..84fa9a6 --- /dev/null +++ b/projects/migrations/0015_auto_20160824_1119.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.7 on 2016-08-24 08:19 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('projects', '0014_auto_20160824_0154'), + ] + + operations = [ + migrations.AlterField( + model_name='order', + name='status', + field=models.CharField(choices=[('created', 'Создан'), ('process', 'В процессе'), ('completed', 'Завершен')], default='created', max_length=30), + ), + ] diff --git a/projects/models.py b/projects/models.py index 49971af..9cbb45f 100644 --- a/projects/models.py +++ b/projects/models.py @@ -199,12 +199,17 @@ class AnswerFile(models.Model): class Order(models.Model): + STATUSES = ( + ('created', 'Создан'), + ('process', 'В процессе'), + ('completed', 'Завершен'), + ) contractor = models.ForeignKey(User, null=True, blank=True, related_name='orders') team = models.ForeignKey(Team, null=True, blank=True, related_name='orders') created = models.DateTimeField(default=timezone.now) project = models.OneToOneField(Project, related_name='order') secure = models.BooleanField(default=False) - status = models.BooleanField(default=False) + status = models.CharField(max_length=30, choices=STATUSES, default='created') def __str__(self): return self.project.name diff --git a/projects/views.py b/projects/views.py index 0c5d098..034c2da 100644 --- a/projects/views.py +++ b/projects/views.py @@ -374,8 +374,12 @@ class CustomerProjectCreateView(BaseMixin, View): project.customer = request.user project.save() form.save_m2m() + + secure = False + if 'secure_deal' in project.deal_type: + secure = True - Order.objects.create(project=project) + Order.objects.create(project=project, secure=secure) for file in request.FILES.getlist('new_files'): ProjectFile.objects.create(file=file, project=project) diff --git a/wallets/migrations/0009_transaction_stages_id.py b/wallets/migrations/0009_transaction_stages_id.py new file mode 100644 index 0000000..a8de5a4 --- /dev/null +++ b/wallets/migrations/0009_transaction_stages_id.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.7 on 2016-08-24 12:53 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('wallets', '0008_wallet'), + ] + + operations = [ + migrations.AddField( + model_name='transaction', + name='stages_id', + field=models.CharField(blank=True, max_length=100, null=True), + ), + ] diff --git a/wallets/models.py b/wallets/models.py index bebbc19..6acef3a 100644 --- a/wallets/models.py +++ b/wallets/models.py @@ -70,6 +70,7 @@ class Transaction(models.Model): voids_at = models.DateTimeField() sum = models.DecimalField(max_digits=20, decimal_places=0, default=0) type = models.CharField(max_length=20, choices=TYPES, default='add') + stages_id = models.CharField(max_length=100, null=True, blank=True) def save(self, *args, **kwargs): if not self.pk and self.created_at: diff --git a/wallets/views.py b/wallets/views.py index e5a11f8..9785045 100644 --- a/wallets/views.py +++ b/wallets/views.py @@ -35,13 +35,13 @@ class ScoreView(View): def get(self, request, *args, **kwargs): # transaction = Transaction.objects.get_or_create(customer=request.user, complete=False) - transaction = Transaction.objects.create(customer=request.user,type='add') + transaction = Transaction.objects.get_or_create(customer=request.user, type='add') user_score = get_object_or_404(User.objects, pk=kwargs.get('pk')) current_sum_info = InvoiceHistory.objects.filter(user=user_score).aggregate(Sum('sum')) user_score_balance = current_sum_info['sum__sum'] or 0 return render(request, self.template_name, { - 'transaction': transaction, + 'transaction': transaction[0], 'YANDEX_MONEY': settings.YANDEX_MONEY, 'user_score': user_score, 'user_score_balance': user_score_balance,