remotes/origin/PR-39
ArturBaybulatov 10 years ago
commit d6f19afb5a
  1. 16
      assets/js/chat.js
  2. 25
      chat/chat.py
  3. 2
      chat/serializers.py
  4. 23
      chat/templates/chat_customer.html
  5. 24
      projects/templates/project_detail.html
  6. 2
      projects/urls.py
  7. 31
      projects/views.py
  8. 8
      ratings/templates/templatetags/ratings_widget.html
  9. 37
      ratings/templates/templatetags/specializations_widget.html
  10. 18
      ratings/templatetags/specializtions_tags.py
  11. 7
      users/mixins.py
  12. 58
      users/templates/contractor_office.html
  13. 9
      users/templates/contractor_profile.html
  14. 1
      users/views.py
  15. 1
      wallets/forms.py
  16. 2
      wallets/signals.py
  17. 17
      wallets/templates/score-detail.html
  18. 59
      wallets/views.py

@ -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 () {
@ -23,9 +23,17 @@ var SocketHandler = function () {
alert('approve stages');
}
if (inbox) {
inbox.innerHTML += '<div class="col-lg-12 insetCommChat"><div class="topCommChat">' +
'<p class="nameCommChat">ВЫ</p> <span>Сейчас</span></div>' +
'<p class="textCommChat">' + message.msg + '</p></div>';
var textMessage = message.msg;
var classMessage = 'youChat';
var senderName = 'Вы';
var timeMessage = message.msg_time;
if (message.sender_id != userId){
senderName = message.sender_name;
classMessage = '';
}
inbox.innerHTML += '<div class="col-lg-12 insetCommChat '+ classMessage +'"><div class="topCommChat">' +
'<p class="nameCommChat">'+ senderName +'</p> <span>' + timeMessage + '</span></div>' +
'<p class="textCommChat">' + textMessage + '</p></div>';
}
};

@ -1,4 +1,4 @@
import os.path
import html
from tornado import gen, web, websocket, escape, options
from tornado.ioloop import IOLoop
from tornado.httpserver import HTTPServer
@ -33,7 +33,6 @@ class ChatHandler(websocket.WebSocketHandler):
if 'dummy' in parsed:
return
print(parsed['format_type'])
if 'approve_stages' in parsed['format_type']:
self.approve_stages(parsed)
else:
@ -60,6 +59,8 @@ class ChatHandler(websocket.WebSocketHandler):
order_id = message_data['data'].get('order_id', None)
team_id = message_data['data'].get('team_id', None)
message = message_data['data'].get('chat_message', None)
message = html.escape(message)
message = message.replace('\n', '<br />')
answer_type = message_data['format_type']
private_type = 'true' if not order_id and not team_id else 'false'
@ -74,14 +75,26 @@ class ChatHandler(websocket.WebSocketHandler):
insert_sql = "INSERT INTO chat_message (id,text,created, sender_id,recipent_id," \
" private_type,team_id, order_id,is_delete,is_new) " \
"VALUES (DEFAULT,'{0}',NOW(),{1},{2},{3},{4},{5},{6},{7})".\
"VALUES (DEFAULT,'{0}',NOW(),{1},{2},{3},{4},{5},{6},{7}) RETURNING id".\
format(message, sender_id, recipent_id, private_type, team_value,order_value, is_delete, is_new)
yield self.db.execute(insert_sql)
waiters = tuple(w for c, w in self.waiters if c == recipent_id or c == sender_id)
cursor_list = yield dict(cursor=self.db.execute(insert_sql))
cursor = cursor_list.get('cursor')
result = cursor.fetchone()
message_id = result[0]
select_last_sql = "SELECT chat_message.id, chat_message.text, chat_message.created, chat_message.sender_id," \
"users_user.id, users_user.username FROM chat_message" \
" INNER JOIN users_user ON (chat_message.sender_id = users_user.id)" \
" WHERE chat_message.id = {0}".format(message_id)
cursor_msg = yield self.db.execute(select_last_sql)
msg_data = cursor_msg.fetchone()
sender_name = msg_data[5]
msg_time = msg_data[2].strftime("%Y-%m-%d %H:%M:%S")
waiters = tuple(w for c, w in self.waiters if c == recipent_id or c == sender_id)
for waiter in waiters:
waiter.write_message({'msg': message, 'answer_type': answer_type})
waiter.write_message({'msg': message, 'msg_time': msg_time, 'sender_id': sender_id, 'sender_name': sender_name, 'answer_type': answer_type})
def check_origin(self, origin):
return True

@ -1,3 +1,4 @@
from rest_framework import serializers
from rest_framework.serializers import ModelSerializer
from .models import Message, Notes, Documents
@ -20,6 +21,7 @@ class DocumentsSerializer(ModelSerializer):
class MessageSerializer(ModelSerializer):
sender = UserSerializer()
recipent = UserSerializer()
created = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S")
class Meta:
model = Message

@ -72,7 +72,7 @@
</span>
</div>
<a id="contact-chat-add-message" href="javascript:void(0)">отправить</a>
<a id="contact-chat-add-message" href="#">отправить</a>
</div>
</form>
@ -108,7 +108,7 @@
<p class="pOB">
<span>Испонитель:</span> {{ order.order.contractor.get_full_name }}
</p>
<a href="javascript:void(0)" class="linkChat11">
<a href="#" class="linkChat11">
<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
Полное описание заказа
</a>
@ -134,7 +134,7 @@
Не более 10 файлов с общим объемом 500мб
</span>
</div>
<a href="javascript:void(0)" id="order-chat-add-message">отправить</a>
<a href="#" id="order-chat-add-message">отправить</a>
</div>
</form>
@ -448,18 +448,7 @@
}
ii--;
});
}
{# #}
{# var updateFormStages = $(".update-stages-form");#}
{# var limitCount = countStage + 1;#}
{# for (var i = 2; i < limitCount; i++) {#}
{# var stageCopy = $("#stage1").clone().attr("id", "stage" + i).addClass("stages_form");#}
{# stageCopy.find('.stage-span-id').html(i);#}
{# $("#stage1").after(stageCopy);#}
{##}
{# }#}
});
$('.order-block').on('click', function () {
@ -545,7 +534,8 @@
});
$('#contact-chat-add-message').on('click', function () {
$('#contact-chat-add-message').on('click', function (e) {
e.preventDefault();
var chatMessage = $("#chat").val();
var recipentId = $("#recipentId").val();
var senderId = $("#senderId").val();
@ -566,7 +556,8 @@
alert('add review');
});
$('#order-chat-add-message').on('click', function () {
$('#order-chat-add-message').on('click', function (e) {
e.preventDefault();
var chatMessage = $("#chat-order-add #chat").val();
var recipentId = $("#chat-order-add #recipentId").val();
var senderId = $("#chat-order-add #senderId").val();

@ -580,9 +580,15 @@
</a>
{% endif %}
<a href="{% url 'chat:chat-user' %}" class="candLink candLink2">
предложить проект
</a>
{% if not project.order.contractor and not project.order.team %}
<form action="{% url 'projects:customer-offer-order' answer_id=answer.pk project_id=project.pk %}" method="POST" novalidate>
{% csrf_token %}
<a href="#" onclick="$(this).closest('form').submit(); return false" class="candLink candLink2">
предложить проект
</a>
</form>
{% endif %}
<form action="{% url 'projects:reject-project-answer' pk=answer.pk %}" method="POST" novalidate>
{% csrf_token %}
@ -728,9 +734,15 @@
</div>
<div class="col-lg-3 retts">
<a href="{% url 'chat:chat-user' %}" class="candLink candLink2">
предложить проект
</a>
{% if not project.order.contractor and not project.order.team %}
<form action="{% url 'projects:customer-offer-order' answer_id=answer.pk project_id=project.pk %}" method="POST" novalidate>
{% csrf_token %}
<a href="#" onclick="$(this).closest('form').submit(); return false" class="candLink candLink2">
предложить проект
</a>
</form>
{% endif %}
<form action="{% url 'projects:reject-project-answer' pk=answer.pk %}" method="POST" novalidate>
{% csrf_token %}

@ -47,7 +47,7 @@ urlpatterns = [
urls.url(r'^candidate/comparison/sort/$', sort_candidates, name='comparison-sort'),
urls.url(r'^candidate/comparison/(?P<pk>\d+)/$', ProjectComparisonView.as_view(), name='comparison'),
urls.url(r'^offerorder/(?P<answer_id>(\d+))/(?P<project_id>(\d+))/$', OfferOrderView.as_view(), name='offer-order'),
urls.url(r'^offerorder/(?P<answer_id>(\d+))/(?P<project_id>(\d+))/$', OfferOrderView.as_view(), name='customer-offer-order'),
# urls.url(r'^portfolio/create/$', PortfolioCreateView.as_view(), name='portfolio-create'),
]

@ -1,4 +1,5 @@
from django.conf import settings
from django.core.exceptions import PermissionDenied
from django.contrib import messages
from django.contrib.auth.mixins import PermissionRequiredMixin, LoginRequiredMixin
from django.core.exceptions import PermissionDenied
@ -9,7 +10,7 @@ from django.db.models import Q, F
from django.http import HttpResponseForbidden, HttpResponseRedirect, HttpResponse, Http404
from django.shortcuts import render, get_object_or_404, redirect
from django.views.generic import ListView, DetailView, CreateView, DeleteView, View, UpdateView, TemplateView, FormView
from django.views.generic.base import ContextMixin
from hitcount.models import HitCount
from hitcount.views import HitCountMixin
from pprint import pprint, pformat
@ -328,7 +329,7 @@ class CustomerProjectCreateView(BaseMixin, View):
if request.user.is_authenticated() and request.user.is_customer():
return super().dispatch(request, *args, **kwargs)
else:
return HttpResponseForbidden()
raise PermissionDenied
def get(self, request, *args, **kwargs):
form = self.form_class(request=request)
@ -604,6 +605,7 @@ class CandidateDeleteView(DeleteView):
def get(self, *args, **kwargs):
return self.post(*args, **kwargs)
def sort_candidates(request):
if request.is_ajax():
items = request.POST.getlist('items[]')
@ -623,8 +625,29 @@ def sort_candidates(request):
class OfferOrderView(View):
template_name = 'chattest.html'
def get(self, request, *args, **kwargs):
return render(request, self.template_name)
def post(self, request, *args, **kwargs):
project_id = kwargs.get('project_id')
answer_id = kwargs.get('answer_id')
try:
project = Project.objects.get(pk=project_id)
except Project.DoesNotExist:
project = None
try:
answer = Answer.objects.get(pk=answer_id)
except Answer.DoesNotExist:
answer = None
order = project.order
if not order.contractor and not order.team:
if isinstance(answer.author, User):
order.contractor = answer.author
order.save()
elif isinstance(answer.author, Team):
order.team = answer.author
order.save()
redirect_url = reverse('chat:chat-user') + '?order_id=' + str(order.pk)
return HttpResponseRedirect(redirect_url)
def contractor_portfolio_create(request):

@ -1,12 +1,12 @@
<ul class="rettList {{ class_name }}">
<li>Рейтинг: <span> {{ ratings }}</span></li>
<li>Безопасные сделки: <span> 0</span></li>
<li>Безопасные сделки: <span> {{ deals }}</span></li> {# TODO #}
<li>
<a href="javascript:void(0)">
Отзывы:
<span> + 0</span>
<small> 0</small>
<mark> - 0</mark>
<span> + {{ reviews_p }}</span>
<small> {{ reviews_n }}</small>
<mark> - {{ reviews_m }}</mark>
</a>
</li>
</ul>

@ -1,38 +1,3 @@
{#<!-- Новая вёрстка ---------------------------------------------------->#}
{##}
{# <div class="dashedCol4 dashedCol44">#}
{# <p class="specUser">#}
{# Специализации:#}
{# </p>#}
{# <div class="insetSpec">#}
{# <span>Интерьеры</span>#}
{# <span>2-й</span>#}
{# </div>#}
{# <div class="insetSpec">#}
{# <span>Визуализация/3D</span>#}
{# <span>45-й</span>#}
{# </div>#}
{# <div class="insetSpec">#}
{# <span>Экстерьеры</span>#}
{# <span>10-й</span>#}
{# </div>#}
{# <div class="showSpec">#}
{# <div class="insetSpec">#}
{# <span>Архитектура</span>#}
{# <span>3-й</span>#}
{# </div>#}
{# <div class="insetSpec">#}
{# <span>3D Моделирование</span>#}
{# <span>100-й</span>#}
{# </div>#}
{# </div>#}
{# <button class="showPress">#}
{# #}
{# </button>#}
{# </div>#}
<div class="dashedCol4">
<p class="specUser">Специализации:</p>
{% for spec in specializations %}
@ -40,5 +5,7 @@
<span>{{ spec.specialization.name }}</span>
<span>{{ spec.position }}-й</span>
</div>
{% empty %}
Рейтинги скоро будут рассчитаны
{% endfor %}
</div>

@ -1,11 +1,13 @@
from django import template
from archilance import util
from users.models import User, Team
from projects.models import Order
from ratings.models import SpecializationRating
from reviews.models import Review
from users.models import User, Team
register = template.Library()
@register.inclusion_tag('templatetags/specializations_widget.html', takes_context=True)
def specialization_widget(context, user_id, class_name=None):
user_id = int(user_id)
@ -25,18 +27,26 @@ def specialization_team_widget(context, team_id):
}
@register.inclusion_tag("templatetags/ratings_widget.html", takes_context=True)
def ratings_widget(context, user_id, class_name=None):
ratings = User.objects.get(pk=user_id).rating
return {
'ratings': ratings,
'class_name': class_name
'class_name': class_name,
'deals': Order.objects.filter(secure=True, contractor_id=user_id, status=1).count(),
'reviews_n': Review.objects.filter(target_contractor_id=user_id, type='neutral').count(),
'reviews_m': Review.objects.filter(target_contractor_id=user_id, type='negative').count(),
'reviews_p': Review.objects.filter(target_contractor_id=user_id, type='positive').count(),
}
@register.inclusion_tag("templatetags/ratings_widget.html", takes_context=True)
def ratings_team_widget(context, team_id):
ratings = Team.objects.get(pk=team_id).rating
return {
'ratings': ratings,
'deals': Order.objects.filter(secure=True, team_id=team_id, status=1).count(),
'reviews_n': Review.objects.filter(target_team_id=team_id, type='neutral').count(),
'reviews_m': Review.objects.filter(target_team_id=team_id, type='negative').count(),
'reviews_p': Review.objects.filter(target_team_id=team_id, type='positive').count(),
}

@ -1,5 +1,4 @@
from django.http import HttpResponseForbidden
from django.contrib import messages
from django.core.exceptions import PermissionDenied
class CheckForUserMixin(object):
@ -8,9 +7,9 @@ class CheckForUserMixin(object):
pk = kwargs.get('pk')
if pk:
if request.user.pk != int(pk):
return HttpResponseForbidden('403 Forbidden')
raise PermissionDenied
else:
return HttpResponseForbidden('403 Forbidden')
raise PermissionDenied
return super().dispatch(request, *args, **kwargs)

@ -91,7 +91,8 @@
<span>Программист</span>
</div>
{% empty %}
В группе пока нет участников
{% endfor %}
</div>
</div>
@ -176,15 +177,19 @@
</div>
</div>
</div>
{% empty %}
<div class="col-lg-12">
<p style="text-align: center;margin-top: 25px;">Работ в портфолио пока нет</p>
</div>
{% endfor %}
</div>
<div class="col-lg-9 col-lg-offset-3">
<div class="linkElse">
<a href="javascript:void(0)" class="showElse">показать еще</a>
</div>
</div>
{# TODO:#}
{# <div class="col-lg-9 col-lg-offset-3">#}
{# <div class="linkElse">#}
{# <a href="javascript:void(0)" class="showElse">показать еще</a>#}
{# </div>#}
{# </div>#}
</div>
<div id="tab12" class="tab-pane fade">
@ -208,38 +213,45 @@
</div>
</div>
{% empty %}
<div class="col-lg-12">
<p style="text-align: center;margin-top: 25px;">Готовых работ пока нет</p>
</div>
{% endfor %}
</div>
<div class="col-lg-9 col-lg-offset-3">
<div class="linkElse">
<a href="javascript:void(0)" class="showElse">показать еще</a>
</div>
</div>
{# TODO#}
{# <div class="col-lg-9 col-lg-offset-3">#}
{# <div class="linkElse">#}
{# <a href="javascript:void(0)" class="showElse">показать еще</a>#}
{# </div>#}
{# </div>#}
</div>
<div id="tab13" class="tab-pane fade">
{% for review in reviews %}
<div class="new-comm-44">
<div class="col-lg-12">
<p class="nameComm">
<a href="#">Иванов Петр Иванович</a>
<a href="">{{ review.get_sender }}</a>
</p>
<span class="dateComm44">
Безопасная сделка
</span>
{% if review.project.deal_type == 'secure_deal' %}
<span class="dateComm44">
Безопасная сделка
</span>
{% endif %}
<div class="stars box-sizing">
<span class="glyphicon glyphicon-star starAct" aria-hidden="true"></span>
<span class="glyphicon glyphicon-star starAct" aria-hidden="true"></span>
<span class="glyphicon glyphicon-star starAct" aria-hidden="true"></span>
<span class="glyphicon glyphicon-star" aria-hidden="true"></span>
<span class="glyphicon glyphicon-star" aria-hidden="true"></span>
<a href="#">положительный отзыв</a>
</div>
<p class="textComm44">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum
{{ review.text|safe }}
</p>
</div>
</div>
{% empty %}
<div class="new-comm-44">
<p style="text-align: center;">Отзывов пока нет</p>
</div>
{% endfor %}
</div>
</div>
</div>

@ -196,7 +196,12 @@
{% endif %}
</div>
</div>
{% empty %}
<div class="col-lg-4">
<p style="text-align: center;">Работ в портфолио пока нет</p>
</div>
{% endfor %}
</div>
<div class="col-lg-9 col-lg-offset-3">
@ -455,6 +460,10 @@
</p>
</div>
</div>
{% empty %}
<div class="new-comm-44">
<p style="text-align: center;">Отзывов пока нет</p>
</div>
{% endfor %}
</div>
</div>

@ -375,6 +375,7 @@ class ContractorOfficeDetailView(DetailView):
work_sells = WorkSell.objects.filter(contractor__in=user_ids)
context['portfolios'] = portfolios
context['work_sells'] = work_sells
context['reviews'] = Review.objects.filter(target_contractor__in=user_ids)
return context

@ -43,6 +43,7 @@ class TmpPaymentAvisoForm(forms.Form):
md5 = forms.CharField()
shopId = forms.IntegerField()
invoiceId = forms.IntegerField()
orderSumAmount = forms.DecimalField()
def clean_action(self):
action = self.cleaned_data.get('action')

@ -22,7 +22,7 @@ def send_for_accountant(sender, instance, created, **kwargs):
@receiver(post_save, sender=Transaction)
def add_invoice_history(sender, instance, created, **kwargs):
if 'add' in instance.type:
if 'add' in instance.type and instance.complete:
inv_history = InvoiceHistory()
inv_history.comment = 'Пополнение счета'
inv_history.sum = instance.sum

@ -23,7 +23,7 @@
{% endif %}
<div class="col-lg-6">
<a href="javascript:void(0)" data-toggle="modal" data-target="#withdraw-money"
<a href="#" data-toggle="modal" data-target="#withdraw-money"
class="linkS linkS2">вывести средства</a>
</div>
@ -75,15 +75,14 @@
<div class="modal-body">
<div style="height: 150px;">
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Кол-во денег {{ YANDEX_MONEY.scid }}</p>
<p>Кол-во денег</p>
<input type="text" name="sum">
<p>shopId: <input type='hidden' name='shopId' value='{{ YANDEX_MONEY.shop_id }}'></p>
<p>scid: <input type='hidden' name='scid' value='{{ YANDEX_MONEY.scid }}'></p>
<p>customerNumber: <input type='hidden' name='customerNumber' value='{{ user_score.pk }}'></p>
<p>paymentType: <input type='hidden' name='paymentType' value='AC'></p>
<p>transactionId: <input type='hidden' name='transactionId' value='{{ transaction.pk }}'></p>
<input type='hidden' name='shopId' value='{{ YANDEX_MONEY.shop_id }}'>
<input type='hidden' name='scid' value='{{ YANDEX_MONEY.scid }}'>
<input type='hidden' name='customerNumber' value='{{ user_score.pk }}'>
<input type='hidden' name='paymentType' value='AC'>
<input type='hidden' name='transactionId' value='{{ transaction.pk }}'>
</div>
</div>
@ -91,7 +90,7 @@
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Закрыть</button>
<button type="submit" class="btn btn-primary">Вывести</button>
<button type="submit" class="btn btn-primary">Пополнить</button>
</div>
</form>

@ -1,27 +1,25 @@
from django.conf import urls, settings
from django.conf import settings
from django.contrib import messages
from django.contrib.auth.mixins import LoginRequiredMixin
from django.db.models import Sum
from django.http import HttpResponse, JsonResponse, HttpResponseForbidden
from django.http import HttpResponse, JsonResponse
from django.shortcuts import render, get_object_or_404
from django.utils import timezone
from django.utils.decorators import method_decorator
from django.views.decorators.csrf import csrf_exempt
from django.views.generic import DetailView, CreateView
from django.views.generic.base import View
from pprint import pprint, pformat
import logging
from users.models import User
from .forms import WithDrawForm, TmpCheckOrderForm, TmpPaymentAvisoForm
from .models import InvoiceHistory, WithDraw, Transaction
from users.mixins import CheckForUserMixin
from users.models import User
class ScoreDetailView(DetailView):
model = User
template_name = 'score-detail.html'
context_object_name = 'user_score'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
user_score_balance = InvoiceHistory.objects.filter(user=self.get_object()).aggregate(Sum('sum'))
@ -30,23 +28,20 @@ class ScoreDetailView(DetailView):
return context
class ScoreView(View):
class ScoreView(LoginRequiredMixin, View):
template_name = 'score-detail.html'
def dispatch(self, request, *args, **kwargs):
if request.user.is_authenticated() and request.user.is_customer():
return super().dispatch(request, *args, **kwargs)
else:
return HttpResponseForbidden('403 Forbidden')
def get(self, request, *args, **kwargs):
transaction = Transaction.objects.get_or_create(customer=request.user, complete=False)
user_score = get_object_or_404(User.customer_objects, pk=kwargs.get('pk'))
transaction = Transaction.objects.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,
'YANDEX_MONEY': settings.YANDEX_MONEY,
'user_score': user_score,
'user_score_balance': user_score_balance,
})
@ -98,23 +93,22 @@ class WithDrawCreate(CreateView):
return super().form_invalid(form)
# Yandex Money ------------------------------------------------
class TmpCheckOrderView(View):
form_class = TmpCheckOrderForm
@method_decorator(csrf_exempt)
def dispatch(self, request, *args, **kwargs):
return super().dispatch(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
# trans = form.cleaned_data.get('transaction')
if form.is_valid():
res = """<?xml version="1.0" encoding="utf-8"?>
<checkOrderResponse
@ -127,7 +121,7 @@ class TmpCheckOrderView(View):
invoice_id=form.cleaned_data.get('invoiceId'),
shop_id=form.cleaned_data.get('shopId'),
)
return HttpResponse(res, content_type='application/xml')
else:
res = """<?xml version="1.0" encoding="utf-8"?>
@ -143,22 +137,27 @@ class TmpCheckOrderView(View):
invoice_id=form.cleaned_data.get('invoiceId'),
shop_id=form.cleaned_data.get('shopId'),
)
return HttpResponse(res, content_type='application/xml')
# return HttpResponse('<pre>{msg}</pre>'.format(msg=pformat(form.errors))) # Debug
class TmpPaymentAvisoView(View):
form_class = TmpPaymentAvisoForm
@method_decorator(csrf_exempt)
def dispatch(self, request, *args, **kwargs):
return super().dispatch(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
if form.is_valid():
transaction = form.cleaned_data.get('transaction_id')
transaction.complete = True
transaction.sum = form.cleaned_data.get('orderSumAmount')
transaction.save()
res = """<?xml version="1.0" encoding="utf-8"?>
<paymentAvisoResponse
performedDatetime="{date}"
@ -170,7 +169,7 @@ class TmpPaymentAvisoView(View):
invoice_id=form.cleaned_data.get('invoiceId'),
shop_id=form.cleaned_data.get('shopId'),
)
return HttpResponse(res, content_type='application/xml')
else:
res = """<?xml version="1.0" encoding="utf-8"?>
@ -180,6 +179,6 @@ class TmpPaymentAvisoView(View):
message="Payment aviso, validation error"
techMessage="Payment aviso, validation error"/>
""".format(date=timezone.now().isoformat())
return HttpResponse(res, content_type='application/xml')
# return HttpResponse('<pre>{msg}</pre>'.format(msg=pformat(form.errors))) # Debug

Loading…
Cancel
Save