You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
117 lines
4.8 KiB
117 lines
4.8 KiB
from django.shortcuts import render, redirect, get_object_or_404, render_to_response
|
|
from django.conf import settings
|
|
from django.contrib import auth
|
|
from django.http import HttpResponse
|
|
from django.template.loader import render_to_string, get_template
|
|
import weasyprint
|
|
import pytils
|
|
from django.core.urlresolvers import reverse
|
|
from django.http import JsonResponse
|
|
from django.contrib.admin.views.decorators import staff_member_required
|
|
from .models import ProductsInBasket, ProductsInOrder, Order
|
|
from .forms import OrderCreateForm
|
|
from .tasks import OrderCreated
|
|
from cart.cart import Cart
|
|
|
|
SUPPLIER_INFO = '''ООО "Русские Программы", ИНН 7713409230, КПП 771301001,
|
|
127411, Москва г, Дмитровское ш., дом № 157, корпус 7, тел.: +74957258950'''
|
|
|
|
requisites = {'name': 'ООО "Русские Программы"', 'bank': 'АО "СМП БАНК" Г. МОСКВА', 'INN': '7713409230',
|
|
'KPP': '771301001', 'BIK': '44525503', 'bank_acc': '30101810545250000503', 'acc': '40702810300750000177',
|
|
'sup_info': SUPPLIER_INFO}
|
|
|
|
def basket_adding(request):
|
|
return_dict = {}
|
|
session_key = request.session.session_key
|
|
data = request.POST
|
|
product_id = data.get("product_id")
|
|
nmb = data.get("nmb")
|
|
|
|
new_product, created = ProductsInBasket.objects.get_or_create(session_key=session_key, product_id=product_id, defaults={'number':nmb})
|
|
if not created:
|
|
new_product.number += int(nmb)
|
|
new_product.save(force_update=True)
|
|
|
|
products_in_basket = ProductsInBasket.objects.filter(session_key=session_key, is_active=True)
|
|
products_total_nmb = products_in_basket.count()
|
|
return_dict["products_total_nmb"] = products_total_nmb
|
|
return_dict["products"] = []
|
|
|
|
for item in products_in_basket:
|
|
product_dict = {}
|
|
product_dict["id"] = item.id
|
|
product_dict["name"] = item.product.name
|
|
product_dict["price_per_item"] = item.price_per_itom
|
|
product_dict["nmb"] = item.number
|
|
return_dict["products"].append(product_dict)
|
|
|
|
return JsonResponse(return_dict)
|
|
|
|
|
|
def basket_remove(request):
|
|
return_dict = {}
|
|
session_key = request.session.session_key
|
|
data = request.POST
|
|
product_id = data.get("product_id")
|
|
|
|
|
|
def OrderCreate(request):
|
|
cart = Cart(request)
|
|
user = auth.get_user(request)
|
|
profile = user.profile
|
|
if not user.username:
|
|
return redirect('auth:login')
|
|
if request.method == 'POST':
|
|
form = OrderCreateForm(request.POST)
|
|
if form.is_valid():
|
|
order = form.save(commit=False)
|
|
order.user = user
|
|
# if cart.discount:
|
|
# order.discount = cart.discount
|
|
# order.discount_value = cart.discount.discount
|
|
|
|
if cart.points:
|
|
print(cart.points_quant)
|
|
order.points_quant = cart.points_quant
|
|
profile.user_points -= cart.points_quant
|
|
profile.save()
|
|
order.save()
|
|
|
|
for item in cart:
|
|
ProductsInOrder.objects.create(order=order, product=item['offer'],
|
|
price_per_itom=item['price'],
|
|
number=item['quantity'])
|
|
cart.clear()
|
|
|
|
# Asinc mail sending
|
|
OrderCreated.delay(order.id)
|
|
request.session['order_id'] = order.id
|
|
|
|
# return redirect(reverse('payment:process'))
|
|
return render(request, 'orders/created.html', {'username': user.username, 'order': order})
|
|
else:
|
|
return render('orders/create.html', {'username': user.username, 'cart': cart, 'form': form})
|
|
|
|
form = OrderCreateForm(instance=profile)
|
|
return render(request, 'orders/create.html', {'username': user.username, 'cart': cart, 'form': form})
|
|
|
|
|
|
@staff_member_required
|
|
def AdminOrderDetail(request, order_id):
|
|
order = get_object_or_404(Order, id=order_id)
|
|
return render(request, 'admin/orders/detail.html', {'order': order})
|
|
|
|
|
|
@staff_member_required
|
|
def AdminOrderPDF(request, order_id):
|
|
order = get_object_or_404(Order, id=order_id)
|
|
verb_price = pytils.numeral.in_words(round(order.total_price))
|
|
verb_cur = pytils.numeral.choose_plural(round(order.total_price), ("рубль", "рубля", "рублей"))
|
|
html = render_to_string('orders/pdf.html', {**requisites, 'order': order,
|
|
'verb_cur': verb_cur, 'verb_price': verb_price})
|
|
rendered_html = html.encode(encoding="UTF-8")
|
|
response = HttpResponse(content_type='application/pdf')
|
|
response['Content-Disposition'] = 'filename=order_{}.pdf'.format(order.id)
|
|
weasyprint.HTML(string=rendered_html, base_url=request.build_absolute_uri()).write_pdf(response,
|
|
stylesheets=[weasyprint.CSS(settings.STATIC_ROOT + '/css/bootstrap.min.css')])
|
|
return response |