lingo: make it possible to mark a regie as default (#12758)
This commit is contained in:
parent
396e6eb29a
commit
699e24f1f4
|
@ -31,6 +31,11 @@ class RegieCreateView(CreateView):
|
|||
fields = '__all__'
|
||||
success_url = reverse_lazy('lingo-manager-regie-list')
|
||||
|
||||
def get_initial(self):
|
||||
if self.model.objects.all().count() == 0:
|
||||
return {'is_default': True}
|
||||
return {}
|
||||
|
||||
|
||||
class RegieUpdateView(UpdateView):
|
||||
model = Regie
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('lingo', '0021_transactionoperation'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='regie',
|
||||
name='is_default',
|
||||
field=models.BooleanField(default=False, verbose_name='Default Regie'),
|
||||
),
|
||||
]
|
|
@ -81,6 +81,7 @@ class Regie(models.Model):
|
|||
max_length=64, choices=SERVICES)
|
||||
service_options = JSONField(blank=True,
|
||||
verbose_name=_('Payment Service Options'))
|
||||
is_default = models.BooleanField(verbose_name=_('Default Regie'), default=False)
|
||||
webservice_url = models.URLField(_('Webservice URL to retrieve remote items'),
|
||||
blank=True)
|
||||
payment_min_amount = models.DecimalField(_('Minimal payment amount'),
|
||||
|
@ -95,10 +96,18 @@ class Regie(models.Model):
|
|||
|
||||
class Meta:
|
||||
verbose_name = _('Regie')
|
||||
ordering = ('label',)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
if self.webservice_url and self.webservice_url.endswith('/'):
|
||||
self.webservice_url = self.webservice_url.strip('/')
|
||||
if self.is_default:
|
||||
qs = self.__class__.objects.filter(is_default=True)
|
||||
if self.pk:
|
||||
qs = qs.exclude(pk=self.pk)
|
||||
qs.update(is_default=False)
|
||||
elif self.__class__.objects.filter(is_default=True).count() == 0:
|
||||
self.is_default = True
|
||||
super(Regie, self).save(*args, **kwargs)
|
||||
|
||||
def natural_key(self):
|
||||
|
|
|
@ -17,7 +17,10 @@
|
|||
<div class="objects-list">
|
||||
{% for regie in object_list %}
|
||||
<div>
|
||||
<a href="{% url 'lingo-manager-regie-edit' pk=regie.id %}">{{ regie.label }} <span>({{regie.service}})</span></a>
|
||||
<a href="{% url 'lingo-manager-regie-edit' pk=regie.id %}">{{ regie.label }}
|
||||
<span>({{regie.service}})</span>
|
||||
{% if regie.is_default %}<span class="extra-info">{% trans "(default regie)" %}</span>{% endif %}
|
||||
</a>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
|
|
@ -129,9 +129,12 @@ class AddBasketItemApiView(View):
|
|||
if request.GET.get('regie_id'):
|
||||
item.regie = Regie.objects.get(id=request.GET.get('regie_id'))
|
||||
else:
|
||||
# if there's no regie specified, use the first one we get from the
|
||||
# database...
|
||||
item.regie = Regie.objects.all()[0]
|
||||
try:
|
||||
item.regie = Regie.objects.get(is_default=True)
|
||||
except Regie.DoesNotExist:
|
||||
# if there's no default regie, use the first one we get from
|
||||
# the database...
|
||||
item.regie = Regie.objects.all()[0]
|
||||
|
||||
if request.GET.get('cancellable') == 'no':
|
||||
item.user_cancellable = False
|
||||
|
|
|
@ -329,3 +329,8 @@ body.dragging-cell div.empty-cell-list {
|
|||
border: 1px solid #eee;
|
||||
box-shadow: rgba(0, 0, 0, 0.04) 0px 1px 1px 0px;
|
||||
}
|
||||
|
||||
span.extra-info {
|
||||
font-size: 80%;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
|
|
@ -38,11 +38,13 @@ def test_add_regie(app, admin_user):
|
|||
resp.forms[0]['slug'] = 'test'
|
||||
resp.forms[0]['description'] = 'description'
|
||||
resp.forms[0]['service'] = 'dummy'
|
||||
assert resp.form['is_default'].checked is True
|
||||
resp = resp.forms[0].submit()
|
||||
assert resp.location == 'http://localhost:80/manage/lingo/regies/'
|
||||
assert Regie.objects.count() == 1
|
||||
regie = Regie.objects.all()[0]
|
||||
assert regie.label == 'Test'
|
||||
assert regie.is_default is True
|
||||
|
||||
def test_edit_regie(app, admin_user):
|
||||
test_add_regie(app, admin_user)
|
||||
|
@ -66,3 +68,22 @@ def test_delete_regie(app, admin_user):
|
|||
resp = resp.forms[0].submit()
|
||||
assert resp.location == 'http://localhost:80/manage/lingo/regies/'
|
||||
assert Regie.objects.count() == 0
|
||||
|
||||
def test_add_second_regie(app, admin_user):
|
||||
test_add_regie(app, admin_user)
|
||||
regie = Regie.objects.all()[0]
|
||||
|
||||
app = login(app)
|
||||
resp = app.get('/manage/lingo/regies/', status=200)
|
||||
resp = resp.click('New')
|
||||
resp.forms[0]['label'] = 'Test2'
|
||||
resp.forms[0]['slug'] = 'test2'
|
||||
resp.forms[0]['description'] = 'description'
|
||||
resp.forms[0]['service'] = 'dummy'
|
||||
assert resp.form['is_default'].checked is False
|
||||
resp = resp.forms[0].submit()
|
||||
assert resp.location == 'http://localhost:80/manage/lingo/regies/'
|
||||
|
||||
assert Regie.objects.count() == 2
|
||||
assert Regie.objects.get(id=regie.id).is_default is True
|
||||
assert Regie.objects.exclude(id=regie.id)[0].is_default is False
|
||||
|
|
|
@ -52,6 +52,22 @@ def login(username='admin', password='admin'):
|
|||
resp = client.post('/login/', {'username': username, 'password': password})
|
||||
assert resp.status_code == 302
|
||||
|
||||
def test_default_regie():
|
||||
Regie.objects.all().delete()
|
||||
regie1 = Regie(label='foo', slug='foo')
|
||||
regie1.save()
|
||||
assert bool(regie1.is_default) is True
|
||||
regie2 = Regie(label='bar', slug='bar')
|
||||
regie2.save()
|
||||
assert bool(regie2.is_default) is False
|
||||
|
||||
regie2.is_default = True
|
||||
regie2.save()
|
||||
regie2 = Regie.objects.get(id=regie2.id)
|
||||
assert bool(regie2.is_default) is True
|
||||
regie1 = Regie.objects.get(id=regie1.id)
|
||||
assert bool(regie1.is_default) is False
|
||||
|
||||
def test_payment_min_amount(regie, user):
|
||||
items = {'item1': {'amount': '1.5', 'source_url': '/item/1'},
|
||||
'item2': {'amount': '2.4', 'source_url': '/item/2'}
|
||||
|
@ -98,6 +114,9 @@ def test_successfull_items_payment(regie, user):
|
|||
assert resp.status_code == 200
|
||||
|
||||
def test_add_amount_to_basket(regie, user):
|
||||
other_regie = Regie(label='test2', slug='test2')
|
||||
other_regie.save()
|
||||
|
||||
user_email = 'foo@example.com'
|
||||
User.objects.get_or_create(email=user_email)
|
||||
amount = 42
|
||||
|
@ -109,6 +128,7 @@ def test_add_amount_to_basket(regie, user):
|
|||
assert resp.status_code == 200
|
||||
assert json.loads(resp.content)['result'] == 'success'
|
||||
assert BasketItem.objects.filter(amount=amount).exists()
|
||||
assert BasketItem.objects.filter(amount=amount)[0].regie_id == regie.id
|
||||
|
||||
data['extra'] = {'amount': '22.22'}
|
||||
url = sign_url(url, settings.LINGO_API_SIGN_KEY)
|
||||
|
@ -125,6 +145,27 @@ def test_add_amount_to_basket(regie, user):
|
|||
assert json.loads(resp.content)['result'] == 'success'
|
||||
assert BasketItem.objects.filter(amount=Decimal('81.22')).exists()
|
||||
|
||||
other_regie.is_default = True
|
||||
other_regie.save()
|
||||
data['amount'] = []
|
||||
data['extra'] = {'amount': '22.23'}
|
||||
url = sign_url(url, settings.LINGO_API_SIGN_KEY)
|
||||
resp = client.post(url, json.dumps(data), content_type='application/json')
|
||||
assert resp.status_code == 200
|
||||
assert json.loads(resp.content)['result'] == 'success'
|
||||
assert BasketItem.objects.filter(amount=Decimal('22.23')).exists()
|
||||
assert BasketItem.objects.filter(amount=Decimal('22.23'))[0].regie_id == other_regie.id
|
||||
|
||||
url = '%s?email=%s®ie_id=%s' % (
|
||||
reverse('api-add-basket-item'), user_email, regie.id)
|
||||
data['extra'] = {'amount': '22.24'}
|
||||
url = sign_url(url, settings.LINGO_API_SIGN_KEY)
|
||||
resp = client.post(url, json.dumps(data), content_type='application/json')
|
||||
assert resp.status_code == 200
|
||||
assert json.loads(resp.content)['result'] == 'success'
|
||||
assert BasketItem.objects.filter(amount=Decimal('22.24')).exists()
|
||||
assert BasketItem.objects.filter(amount=Decimal('22.24'))[0].regie_id == regie.id
|
||||
|
||||
def test_cancel_basket_item(regie, user):
|
||||
user_email = 'foo@example.com'
|
||||
User.objects.get_or_create(email=user_email)
|
||||
|
|
Loading…
Reference in New Issue