aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatryk Zawadzki <patrys@room-303.com>2016-02-05 13:29:10 +0100
committerPatryk Zawadzki <patrys@room-303.com>2016-02-08 12:05:30 +0100
commit53906dc799407275c23c38866a14dd7855b27682 (patch)
tree3e6567503756f7c062e1293f16889e3425ef670e
parent45e5cef56545d48b6188f03d28a3e839180c0f45 (diff)
downloadsaleor-frontend-53906dc799407275c23c38866a14dd7855b27682.tar.gz
saleor-frontend-53906dc799407275c23c38866a14dd7855b27682.tar.bz2
saleor-frontend-53906dc799407275c23c38866a14dd7855b27682.zip
Improve UI and translations
-rw-r--r--.editorconfig3
-rw-r--r--saleor/dashboard/discount/forms.py37
-rw-r--r--saleor/dashboard/discount/views.py26
-rw-r--r--saleor/dashboard/templates/dashboard/discount/voucher_form.html2
-rw-r--r--saleor/dashboard/templates/materializecssform/field.html3
-rw-r--r--saleor/discount/models.py70
-rw-r--r--saleor/static/scss/widget/_form.scss8
7 files changed, 89 insertions, 60 deletions
diff --git a/.editorconfig b/.editorconfig
index edab84c9..0cd5e5a0 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -18,5 +18,8 @@ indent_size = 2
[*.jsx]
indent_size = 2
+[*.scss]
+indent_size = 2
+
[*.yml]
indent_size = 2
diff --git a/saleor/dashboard/discount/forms.py b/saleor/dashboard/discount/forms.py
index f06bd3a3..5d3a04c5 100644
--- a/saleor/dashboard/discount/forms.py
+++ b/saleor/dashboard/discount/forms.py
@@ -2,7 +2,7 @@ import uuid
from django import forms
from django.conf import settings
-from django.utils.translation import pgettext_lazy, gettext as _
+from django.utils.translation import pgettext_lazy
from django_prices.forms import PriceField
from ...discount.models import Sale, Voucher
@@ -28,13 +28,13 @@ class SaleForm(forms.ModelForm):
class VoucherForm(forms.ModelForm):
- ALL_BASKETS = 'all_baskets'
+ ALL_PURCHASES = 'all_purchases'
DISCOUNT_TYPES = (
- (ALL_BASKETS, 'All baskets'),
+ (ALL_PURCHASES, pgettext_lazy('voucher', 'All purchases')),
) + Voucher.TYPE_CHOICES
type = forms.ChoiceField(
- choices=DISCOUNT_TYPES, initial=ALL_BASKETS,
- label=pgettext_lazy('voucher_form', 'Discount for'))
+ choices=DISCOUNT_TYPES, initial=ALL_PURCHASES,
+ label=pgettext_lazy('voucher', 'Discount for'))
class Meta:
model = Voucher
@@ -43,8 +43,9 @@ class VoucherForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
initial = kwargs.get('initial', {})
instance = kwargs.get('instance')
- if instance and instance.type == Voucher.BASKET_TYPE and instance.limit is None:
- initial['type'] = VoucherForm.ALL_BASKETS
+ if (instance and instance.type == Voucher.VALUE_TYPE and
+ instance.limit is None):
+ initial['type'] = VoucherForm.ALL_PURCHASES
if instance and instance.id is None and not initial.get('code'):
initial['code'] = self._generate_code
kwargs['initial'] = initial
@@ -58,8 +59,8 @@ class VoucherForm(forms.ModelForm):
def clean(self):
cleaned_data = super(VoucherForm, self).clean()
- if cleaned_data['type'] == VoucherForm.ALL_BASKETS:
- cleaned_data['type'] = Voucher.BASKET_TYPE
+ if cleaned_data['type'] == VoucherForm.ALL_PURCHASES:
+ cleaned_data['type'] = Voucher.VALUE_TYPE
return cleaned_data
@@ -71,7 +72,8 @@ class CountriesField(forms.ChoiceField):
country_codes = country_codes.distinct()
country_dict = dict(ShippingMethodCountry.COUNTRY_CODE_CHOICES)
kwargs['choices'] = [
- (country_code, country_dict[country_code]) for country_code in country_codes]
+ (country_code, country_dict[country_code])
+ for country_code in country_codes]
super(CountriesField, self).__init__(*args, **kwargs)
@@ -79,9 +81,9 @@ class ShippingVoucherForm(forms.ModelForm):
limit = PriceField(
min_value=0, required=False, currency=settings.DEFAULT_CURRENCY,
- label=pgettext_lazy('voucher_form', 'Shipping cost equal or less than'),
- help_text=pgettext_lazy('voucher_form', 'Any shipping if empty'))
- apply_to = CountriesField(label='Country')
+ label=pgettext_lazy(
+ 'voucher', 'Only if shipping cost is less than or equal to'))
+ apply_to = CountriesField(label=pgettext_lazy('voucher', 'Country'))
class Meta:
model = Voucher
@@ -93,11 +95,12 @@ class ShippingVoucherForm(forms.ModelForm):
return super(ShippingVoucherForm, self).save(commit)
-class BasketVoucherForm(forms.ModelForm):
+class ValueVoucherForm(forms.ModelForm):
limit = PriceField(
- min_value=0, required=True, currency = settings.DEFAULT_CURRENCY,
- label=pgettext_lazy('voucher_form', 'Basket total equal or greater than'))
+ min_value=0, required=True, currency=settings.DEFAULT_CURRENCY,
+ label=pgettext_lazy(
+ 'voucher', 'Purchase value greater than or equal to'))
class Meta:
model = Voucher
@@ -107,7 +110,7 @@ class BasketVoucherForm(forms.ModelForm):
self.instance.category = None
self.instance.limit = None
self.instance.product = None
- return super(BasketVoucherForm, self).save(commit)
+ return super(ValueVoucherForm, self).save(commit)
class ProductVoucherForm(forms.ModelForm):
diff --git a/saleor/dashboard/discount/views.py b/saleor/dashboard/discount/views.py
index 3db73c01..e6948bf2 100644
--- a/saleor/dashboard/discount/views.py
+++ b/saleor/dashboard/discount/views.py
@@ -4,6 +4,7 @@ from django.contrib.admin.views.decorators import staff_member_required
from django.shortcuts import get_object_or_404, redirect
from django.template.response import TemplateResponse
from django.utils.translation import ugettext_lazy as _
+
from ...discount.models import Sale, Voucher
from . import forms
@@ -49,22 +50,30 @@ def sale_delete(request, pk):
def voucher_list(request):
vouchers = Voucher.objects.select_related('product', 'category')
ctx = {'vouchers': vouchers}
- return TemplateResponse(request, 'dashboard/discount/voucher_list.html', ctx)
+ return TemplateResponse(
+ request, 'dashboard/discount/voucher_list.html', ctx)
@staff_member_required
def voucher_edit(request, pk=None):
- instance = get_object_or_404(Voucher, pk=pk) if pk is not None else Voucher()
+ if pk is not None:
+ instance = get_object_or_404(Voucher, pk=pk)
+ else:
+ instance = Voucher()
voucher_form = forms.VoucherForm(request.POST or None, instance=instance)
type_base_forms = {
Voucher.SHIPPING_TYPE: forms.ShippingVoucherForm(
- request.POST or None, instance=instance, prefix=Voucher.SHIPPING_TYPE),
- Voucher.BASKET_TYPE: forms.BasketVoucherForm(
- request.POST or None, instance=instance, prefix=Voucher.BASKET_TYPE),
+ request.POST or None, instance=instance,
+ prefix=Voucher.SHIPPING_TYPE),
+ Voucher.VALUE_TYPE: forms.ValueVoucherForm(
+ request.POST or None, instance=instance,
+ prefix=Voucher.VALUE_TYPE),
Voucher.PRODUCT_TYPE: forms.ProductVoucherForm(
- request.POST or None, instance=instance, prefix=Voucher.PRODUCT_TYPE),
+ request.POST or None, instance=instance,
+ prefix=Voucher.PRODUCT_TYPE),
Voucher.CATEGORY_TYPE: forms.CategoryVoucherForm(
- request.POST or None, instance=instance, prefix=Voucher.CATEGORY_TYPE),
+ request.POST or None, instance=instance,
+ prefix=Voucher.CATEGORY_TYPE),
}
if voucher_form.is_valid():
voucher_type = voucher_form.cleaned_data['type']
@@ -81,7 +90,8 @@ def voucher_edit(request, pk=None):
ctx = {
'voucher': instance, 'default_currency': settings.DEFAULT_CURRENCY,
'form': voucher_form, 'type_base_forms': type_base_forms}
- return TemplateResponse(request, 'dashboard/discount/voucher_form.html', ctx)
+ return TemplateResponse(
+ request, 'dashboard/discount/voucher_form.html', ctx)
@staff_member_required
diff --git a/saleor/dashboard/templates/dashboard/discount/voucher_form.html b/saleor/dashboard/templates/dashboard/discount/voucher_form.html
index 2ecd6c4b..8f3ec341 100644
--- a/saleor/dashboard/templates/dashboard/discount/voucher_form.html
+++ b/saleor/dashboard/templates/dashboard/discount/voucher_form.html
@@ -54,7 +54,6 @@
<div class="col s12 l8">
<div class="row">
{{ form.code|materializecss }}
- {{ form.usage_limit|materializecss }}
{{ form.name|materializecss }}
{{ form.discount_value|materializecss:"s12 m8" }}
{{ form.discount_value_type|materializecss:"s12 m4" }}
@@ -73,6 +72,7 @@
<div class="row">
{{ form.start_date|materializecss:"input-field s12" }}
{{ form.end_date|materializecss:"input-field s12" }}
+ {{ form.usage_limit|materializecss }}
</div>
</div>
</div>
diff --git a/saleor/dashboard/templates/materializecssform/field.html b/saleor/dashboard/templates/materializecssform/field.html
index 4ae4d55f..e050730e 100644
--- a/saleor/dashboard/templates/materializecssform/field.html
+++ b/saleor/dashboard/templates/materializecssform/field.html
@@ -52,7 +52,8 @@
{% elif field|is_date_input %}
<div class="input col {{ classes.label }}">
- <label for="{{ field.id_for_label }}">{{ field.label }}</label>
+ <label class="active{% if not field.field.required %} optional{% endif %}"
+ for="{{ field.auto_id }}">{{ field.label }}</label>
<input type="date" id="{{ field.auto_id }}" class="datepicker"
name="{{ field.name }}"
value="{% if field.value %}{{ field.value }}{% endif %}"
diff --git a/saleor/discount/models.py b/saleor/discount/models.py
index cbed7eb7..4dd7b0ac 100644
--- a/saleor/discount/models.py
+++ b/saleor/discount/models.py
@@ -4,12 +4,10 @@ from decimal import Decimal
from django.conf import settings
from django.db import models
-from django.utils.safestring import mark_safe
-from django.utils.translation import pgettext_lazy, gettext as _
+from django.utils.translation import pgettext, pgettext_lazy
from django.utils.encoding import python_2_unicode_compatible
from django_countries import countries
from django_prices.models import PriceField
-from django_prices.templatetags.prices import gross
from prices import FixedDiscount, percentage_discount, Price
@@ -25,43 +23,50 @@ class Voucher(models.Model):
APPLY_TO_PRODUCT_CHOICES = (
(APPLY_TO_ONE_PRODUCT,
- pgettext_lazy('voucher_form', 'Apply only once')),
+ pgettext_lazy('voucher', 'Apply to a single item')),
(APPLY_TO_ALL_PRODUCTS,
- pgettext_lazy('voucher_form', 'Apply to all matching products')))
+ pgettext_lazy('voucher', 'Apply to all matching products')))
DISCOUNT_VALUE_FIXED = 'fixed'
DISCOUNT_VALUE_PERCENTAGE = 'percentage'
DISCOUNT_VALUE_TYPE_CHOICES = (
- (DISCOUNT_VALUE_FIXED, pgettext_lazy('voucher_model', settings.DEFAULT_CURRENCY)), # noqa
- (DISCOUNT_VALUE_PERCENTAGE, pgettext_lazy('voucher_model', '%')))
+ (DISCOUNT_VALUE_FIXED,
+ pgettext_lazy('voucher', settings.DEFAULT_CURRENCY)), # noqa
+ (DISCOUNT_VALUE_PERCENTAGE, pgettext_lazy('voucher', '%')))
PRODUCT_TYPE = 'product'
CATEGORY_TYPE = 'category'
SHIPPING_TYPE = 'shipping'
- BASKET_TYPE = 'basket'
+ VALUE_TYPE = 'value'
TYPE_CHOICES = (
- (PRODUCT_TYPE, pgettext_lazy('voucher_model', 'Product')),
- (CATEGORY_TYPE, pgettext_lazy('voucher_model', 'Category')),
- (SHIPPING_TYPE, pgettext_lazy('voucher_model', 'Shipping')),
- (BASKET_TYPE, pgettext_lazy('voucher_model', 'Baskets over'))
- )
+ (PRODUCT_TYPE, pgettext_lazy('voucher', 'One product')),
+ (CATEGORY_TYPE, pgettext_lazy('voucherl', 'Category of products')),
+ (SHIPPING_TYPE, pgettext_lazy('voucher', 'Shipping')),
+ (VALUE_TYPE, pgettext_lazy('voucher', 'Purchases over certain value')))
type = models.CharField(max_length=20, choices=TYPE_CHOICES)
- name = models.CharField(max_length=255, null=True, blank=True)
- code = models.CharField(max_length=12, unique=True, db_index=True)
+ name = models.CharField(
+ pgettext_lazy('voucher', 'name'), max_length=255, null=True,
+ blank=True)
+ code = models.CharField(
+ pgettext_lazy('voucher', 'code'), max_length=12, unique=True,
+ db_index=True)
usage_limit = models.PositiveIntegerField(
- null=True, blank=True,
- help_text=pgettext_lazy('voucher_model', 'Unlimited if empty'))
+ pgettext_lazy('voucher', 'usage limit'), null=True, blank=True)
used = models.PositiveIntegerField(default=0, editable=False)
- start_date = models.DateField(default=date.today)
- end_date = models.DateField(null=True, blank=True, help_text=pgettext_lazy(
- 'voucher_model', 'Never expire if empty'))
+ start_date = models.DateField(
+ pgettext_lazy('voucher', 'start date'), default=date.today)
+ end_date = models.DateField(
+ pgettext_lazy('voucher', 'end date'), null=True, blank=True)
discount_value_type = models.CharField(
- max_length=10, choices=DISCOUNT_VALUE_TYPE_CHOICES, default=DISCOUNT_VALUE_FIXED)
- discount_value = models.DecimalField(max_digits=12, decimal_places=2)
+ pgettext_lazy('voucher', 'discount type'), max_length=10,
+ choices=DISCOUNT_VALUE_TYPE_CHOICES, default=DISCOUNT_VALUE_FIXED)
+ discount_value = models.DecimalField(
+ pgettext_lazy('voucher', 'discount value'), max_digits=12,
+ decimal_places=2)
# not mandatory fields, usage depends on type
product = models.ForeignKey('product.Product', blank=True, null=True)
@@ -72,8 +77,8 @@ class Voucher(models.Model):
@property
def is_free(self):
- return (self.discount_value == Decimal(100)
- and self.discount_value_type == Voucher.DISCOUNT_VALUE_PERCENTAGE)
+ return (self.discount_value == Decimal(100) and
+ self.discount_value_type == Voucher.DISCOUNT_VALUE_PERCENTAGE)
def __str__(self):
if self.name:
@@ -82,24 +87,25 @@ class Voucher(models.Model):
self.discount_value, self.get_discount_value_type_display())
if self.type == Voucher.SHIPPING_TYPE:
if self.is_free:
- return _('Free shipping')
+ return pgettext('voucher', 'Free shipping')
else:
- return _('%(discount)s off shipping') % {'discount': discount}
+ return pgettext('voucher', '%(discount)s off shipping') % {
+ 'discount': discount}
if self.type == Voucher.PRODUCT_TYPE:
- return _('%(discount)s off %(product)s') % {
+ return pgettext('voucher', '%(discount)s off %(product)s') % {
'discount': discount, 'product': self.product}
if self.type == Voucher.CATEGORY_TYPE:
- return _('%(discount)s off %(category)s') % {
+ return pgettext('voucher', '%(discount)s off %(category)s') % {
'discount': discount, 'category': self.category}
- return _('%(discount)s off') % {'discount': discount}
-
+ return pgettext('voucher', '%(discount)s off') % {'discount': discount}
def get_apply_to_display(self):
if self.type == Voucher.SHIPPING_TYPE and self.apply_to:
return countries.name(self.apply_to)
if self.type == Voucher.SHIPPING_TYPE:
- return _('Any country')
- if self.apply_to and self.type in (Voucher.PRODUCT_TYPE, Voucher.CATEGORY_TYPE):
+ return pgettext('voucher', 'Any country')
+ if self.apply_to and self.type in {
+ Voucher.PRODUCT_TYPE, Voucher.CATEGORY_TYPE}:
choices = dict(self.APPLY_TO_PRODUCT_CHOICES)
return choices[self.apply_to]
diff --git a/saleor/static/scss/widget/_form.scss b/saleor/static/scss/widget/_form.scss
index 6d1bc38f..16956f5e 100644
--- a/saleor/static/scss/widget/_form.scss
+++ b/saleor/static/scss/widget/_form.scss
@@ -90,12 +90,18 @@
}
}
- &#form-discounts {
+ &#form-sales {
#id_name {
@extend %input-lg;
}
}
+ &#form-vouchers {
+ #id_code {
+ @extend %input-lg;
+ }
+ }
+
.sizedimage-mod {
margin-bottom: $gutter-width/2;