From 1e5a6a11f7746fc61283569a5234a350de96423f Mon Sep 17 00:00:00 2001 From: mitri4 Date: Tue, 7 Mar 2017 09:10:02 +0300 Subject: [PATCH] start add currency tag on tamplate --- batiskaf/jinja2.py | 2 +- batiskaf/templates/jinja2/base.jinja | 8 ++--- batiskaf/templates/jinja2/index.jinja | 6 +--- batiskaf/urls.py | 3 +- static/less/components/_navbar.less | 4 --- store/currency.py | 44 ++++++++++++++++++++++----- store/views.py | 13 ++++++++ 7 files changed, 57 insertions(+), 23 deletions(-) diff --git a/batiskaf/jinja2.py b/batiskaf/jinja2.py index 4d9717b..91ee1ec 100644 --- a/batiskaf/jinja2.py +++ b/batiskaf/jinja2.py @@ -16,7 +16,7 @@ def environment(**options): 'url': reverse, 'main_categories': Category.objects.filter(parent__isnull=True).order_by('pk'), 'all_brands': Brand.objects.order_by('title'), - 'all_currency': Currency.objects.all(), + 'currencies': Currency.objects.all(), }) env.filters['linebreaks'] = linebreaks env.filters['thumbnail'] = thumbnail diff --git a/batiskaf/templates/jinja2/base.jinja b/batiskaf/templates/jinja2/base.jinja index e51b8f7..8711988 100644 --- a/batiskaf/templates/jinja2/base.jinja +++ b/batiskaf/templates/jinja2/base.jinja @@ -146,14 +146,14 @@
- - Валюта ₸ ₽ $ - - {{ product.min_price(request.user) }} ₸ - + {{ (request|currency).get_price(product.min_price(request.user)) }}
{% if product.in_stock() %}
diff --git a/batiskaf/urls.py b/batiskaf/urls.py index 42713d2..227cbf2 100644 --- a/batiskaf/urls.py +++ b/batiskaf/urls.py @@ -4,7 +4,7 @@ from django.http import HttpResponse from api.views import call_order from news.views import NewsSitemap from promo.views import PromoSitemap -from store.views import order_view, order_print, ProductSitemap, CategorySitemap, order_kkb, kkb_result +from store.views import order_view, order_print, ProductSitemap, CategorySitemap, order_kkb, kkb_result, set_currency from main.views import * from rest_framework import routers # from api.urls import router @@ -124,5 +124,6 @@ urlpatterns = ( url(r'^faq/$', faq, name='faq'), url(r'^fest/$', fest, name='fest'), url(r'^fest_success/$', fest_success, name='fest_success'), + url(r'^currencies/(?P.+)/$', set_currency, name='set_currency'), url(r'^admin2517_garpun/', include(admin.site.urls)), ) diff --git a/static/less/components/_navbar.less b/static/less/components/_navbar.less index 9551448..045953a 100644 --- a/static/less/components/_navbar.less +++ b/static/less/components/_navbar.less @@ -5,10 +5,6 @@ background: @brand-roballen; } -.open .navbar-item__currency { - //color: #fed000 !important; -} - .navbar-item__currency { float: left; height: 50px; diff --git a/store/currency.py b/store/currency.py index c9509d5..593f1c0 100644 --- a/store/currency.py +++ b/store/currency.py @@ -1,20 +1,48 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +from markupsafe import Markup from .models import Currency as CurrencyModel -MAIN_CURRENCY_ID = '1' +MAIN_CURRENCY_ID = 1 +DEFAULT_SYMBOL = '₸' # Тенге class Currency(object): - currency_id = '' + id = '' + exchange = '' + symbol = '' def __init__(self, request): - self.cart_id = request.session.get('currency_id', None) - if not self.currency_id: - self.currency_id = MAIN_CURRENCY_ID + self.id = request.session.get('currency_id', None) + + if self.id: + try: + _currency = CurrencyModel.objects.get(pk=self.id) + self.exchange = _currency.exchange + self.symbol = _currency.HTML_letter_code + except CurrencyModel.DoesNotExist: + pass + + else: + self.id = MAIN_CURRENCY_ID + self.symbol = DEFAULT_SYMBOL + self.exchange = 1 request.session['currency_id'] = MAIN_CURRENCY_ID - - - + def set_currency(self, c_id, request): + self.id = c_id + try: + _currency = CurrencyModel.objects.get(pk=self.id) + self.symbol = _currency.HTML_letter_code + self.exchange = _currency.exchange + except CurrencyModel.DoesNotExist: + self.symbol = DEFAULT_SYMBOL + request.session['currency_id'] = c_id + + def get_symbol(self): + return Markup(self.symbol) + + def get_price(self, price): + _price = int(price * self.exchange) + return Markup('{price} {code}'.format(price=_price, code=self.symbol)) diff --git a/store/views.py b/store/views.py index 00e8b4e..92a0387 100644 --- a/store/views.py +++ b/store/views.py @@ -12,6 +12,7 @@ from main.models import ProductsUpdate from .models import * from store.alemtat import AlemTat from store.cart import Cart, CartItem +from store.currency import Currency as _Currency from django.contrib import messages from store.forms import OrderForm, ProductFeedbackForm from django.http import JsonResponse @@ -469,3 +470,15 @@ class CategorySitemap(Sitemap): def items(self): return Category.objects.all() + + +def set_currency(request, currency_code): + current_url = request.META.get('HTTP_REFERER', '/') + _currency = _Currency(request) + try: + current_currency = Currency.objects.get(ISO_letter_code=currency_code) + except Currency.DoesNotExist: + current_currency = Currency.objects.get(pk=1) + _currency.set_currency(current_currency.id, request) + + return redirect(current_url)