diff --git a/apps/core/views.py b/apps/core/views.py index df53a3f..514f82a 100644 --- a/apps/core/views.py +++ b/apps/core/views.py @@ -12,6 +12,7 @@ from rest_framework.views import APIView from apps.core.forms import ChargeForm from apps.core.models import Charge from apps.core.serializers import ChargeSerializer +from apps.wallet.constans import StateChoices from apps.wallet.models import Transaction @@ -38,29 +39,32 @@ class ChargeView(UpdateView): def get_queryset(self): return Charge.objects.all() + # return Charge.objects.filter(state__in=[StateChoices.CREATED.value, StateChoices.SUCCESS.value]) def form_valid(self, form): self.object = form.save() amount = form.cleaned_data['amount'] payer_pk = 'a95557d6-4f21-4717-99c2-354db85f940e' - charge = self.get_object() - transaction = Transaction.objects.create( - uuid= charge.uuid, - payee_id= charge.user.pk, - payee_type=1, - payer_id=payer_pk, - payer_type=2, - amount=amount, - details = {'description': 'شارژ مجازی کیف پول'} - ) - + charge: Charge = self.get_object() try: + charge.change_state(from_state=StateChoices.CREATED.value, to_state=StateChoices.PENDING.value) + transaction = Transaction.objects.create( + uuid= charge.uuid, + payee_id= charge.user.pk, + payee_type=1, + payer_id=payer_pk, + payer_type=2, + amount=amount, + details = {'description': 'شارژ مجازی کیف پول'} + ) transaction.submit() transaction.verify() + charge.change_state(from_state=StateChoices.PENDING.value, to_state=StateChoices.SUCCESS.value) messages.success(self.request, 'شارژ انجام شد') except: messages.error(self.request, 'خطایی رخ داده است') + charge.change_state(from_state=StateChoices.PENDING.value, to_state=StateChoices.EXPECTED_FAILURE.value) return HttpResponseRedirect(self.get_success_url()) diff --git a/templates/core/charge.html b/templates/core/charge.html index 787c2d2..c47c3e4 100644 --- a/templates/core/charge.html +++ b/templates/core/charge.html @@ -8,6 +8,7 @@ {% block content %} + {% if object.state in '1' %}
+ {% else %} + {{ object.amount }} in state {{ object.get_state_display }}