0.12.36 pays and subscribes
This commit is contained in:
0
BillingApp/__init__.py
Normal file
0
BillingApp/__init__.py
Normal file
37
BillingApp/admin.py
Normal file
37
BillingApp/admin.py
Normal file
@@ -0,0 +1,37 @@
|
||||
from sets.admin import *
|
||||
from .models import *
|
||||
from django.contrib import admin
|
||||
|
||||
class Admin_SubscribeOrder(Admin_BaseModel):
|
||||
|
||||
fieldsets = (
|
||||
(None, {
|
||||
'classes': ['wide'],
|
||||
'fields': (
|
||||
('user', 'subscribe', 'subscribe_for_user'),
|
||||
('enable', 'order'),
|
||||
('sum', 'currency'),
|
||||
('status', 'last_operation_status'),
|
||||
('bank_order_id', 'pay_page'),
|
||||
)
|
||||
}),
|
||||
)
|
||||
|
||||
list_display = [
|
||||
'id', 'enable',
|
||||
'user', 'subscribe', 'subscribe_for_user',
|
||||
'sum', 'currency',
|
||||
'status', 'last_operation_status',
|
||||
'order', 'modifiedDT', 'createDT'
|
||||
]
|
||||
|
||||
list_display_links = ['id', 'user', 'subscribe']
|
||||
list_editable = ['enable']
|
||||
|
||||
readonly_fields = ['subscribe_for_user', 'sum', 'currency', 'modifiedDT', 'createDT']
|
||||
|
||||
list_filter = ['enable', 'status', 'modifiedDT', 'createDT']
|
||||
search_fields = ['id', 'last_operation_status', 'status']
|
||||
# filter_horizontal = ['options']
|
||||
|
||||
admin.site.register(SubscribeOrder, Admin_SubscribeOrder)
|
||||
6
BillingApp/apps.py
Normal file
6
BillingApp/apps.py
Normal file
@@ -0,0 +1,6 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class BillingappConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'BillingApp'
|
||||
88
BillingApp/funcs.py
Normal file
88
BillingApp/funcs.py
Normal file
@@ -0,0 +1,88 @@
|
||||
from datetime import datetime
|
||||
|
||||
from .models import *
|
||||
import json
|
||||
|
||||
|
||||
def get_order_status(order):
|
||||
from BaseModels.pay_systems.DVL_Group_kaz.api.funcs import get_order_status
|
||||
res_status = None
|
||||
|
||||
try:
|
||||
res_data = get_order_status(order.bank_order_id)
|
||||
|
||||
res = json.loads(res_data.text)
|
||||
order.json_data['status'] = res
|
||||
res = res['orders'][0]
|
||||
|
||||
order.status = res['status']
|
||||
|
||||
|
||||
# if res['amount'] == res['amount_charged'] and res['status'] == 'charged':
|
||||
order.save()
|
||||
return order.status
|
||||
|
||||
|
||||
except Exception as e:
|
||||
msg = f'Exception get_order_status = {str(e)}'
|
||||
if order:
|
||||
msg = f'Exception get_order_status (data = {str(order.id)}) = {str(e)}'
|
||||
print(msg)
|
||||
|
||||
return None
|
||||
|
||||
def get_orders_for_user(user):
|
||||
|
||||
orders = SubscribeOrder.objects.filter(
|
||||
enable=True,
|
||||
user=user,
|
||||
subscribe_for_user=None
|
||||
).order_by('-modifiedDT')
|
||||
return orders
|
||||
|
||||
|
||||
def create_subscribe_order(data):
|
||||
order = None
|
||||
|
||||
try:
|
||||
|
||||
order = SubscribeOrder.objects.create(**data)
|
||||
|
||||
from GeneralApp.funcs_options import get_options_by_opt_types, get_mail_send_options
|
||||
sets = get_options_by_opt_types(['domain', 'project_name'], only_vals=True)
|
||||
|
||||
from BaseModels.pay_systems.DVL_Group_kaz.api.funcs import create_order
|
||||
data = {
|
||||
'currency': data['currency'],
|
||||
'amount': data['sum'],
|
||||
'description': f'Заказ {order.id} на подписку '
|
||||
f'{data["subscribe"].name} '
|
||||
f'для пользователя {data["user"].username}',
|
||||
'options': {
|
||||
'auto_charge': 1,
|
||||
'return_url': f'{sets["domain"]}/profile/page/my_subscribe/'
|
||||
}
|
||||
}
|
||||
|
||||
res_data = create_order(data)
|
||||
|
||||
order.pay_page = res_data.headers.get('location')
|
||||
|
||||
res = json.loads(res_data.text)
|
||||
order.json_data['create_order'] = res
|
||||
res = res['orders'][0]
|
||||
order.modifiedDT = datetime.strptime(res['updated'], '%Y-%m-%d %H:%M:%S')
|
||||
order.status = res['status']
|
||||
order.bank_order_id = res['id']
|
||||
if 'segment' in res:
|
||||
order.segment = res['segment']
|
||||
if 'merchant_order_id' in res:
|
||||
order.merchant_order_id = res['merchant_order_id']
|
||||
order.save()
|
||||
|
||||
|
||||
except Exception as e:
|
||||
msg = f'Exception create_subscribe_order (data = {str(data)}) = {str(e)}'
|
||||
print(msg)
|
||||
|
||||
return order
|
||||
0
BillingApp/migrations/__init__.py
Normal file
0
BillingApp/migrations/__init__.py
Normal file
51
BillingApp/models.py
Normal file
51
BillingApp/models.py
Normal file
@@ -0,0 +1,51 @@
|
||||
from django.db import models
|
||||
from BaseModels.base_models import BaseModel
|
||||
from SubscribesApp.models import Subscribe, SubscribeForUser
|
||||
from AuthApp.models import User
|
||||
from django.utils.translation import gettext as _
|
||||
|
||||
class SubscribeOrder(BaseModel):
|
||||
|
||||
subscribe = models.ForeignKey(
|
||||
Subscribe, verbose_name=_('Подписка'),
|
||||
on_delete=models.SET_NULL, blank=True, null=True,
|
||||
related_name='subscribe_orders_for_subscribe'
|
||||
)
|
||||
|
||||
user = models.ForeignKey(
|
||||
User, verbose_name=_('Пользователь'),
|
||||
on_delete=models.SET_NULL, blank=True, null=True,
|
||||
related_name='subscribe_orders_for_user'
|
||||
)
|
||||
|
||||
subscribe_for_user = models.OneToOneField(
|
||||
SubscribeForUser, verbose_name=_('Подписка пользователя'),
|
||||
on_delete=models.SET_NULL, blank=True, null=True,
|
||||
related_name='subscribe_orders_for_user_subscribe'
|
||||
)
|
||||
|
||||
sum = models.PositiveSmallIntegerField(verbose_name=_('Сумма'), default=0)
|
||||
currency = models.CharField(verbose_name=_('Валюта'), max_length=3, default='USD')
|
||||
segment = models.CharField(verbose_name=_('ID Сегмента'), null=True, default=None)
|
||||
merchant_order_id = models.CharField(verbose_name=_('merchant_order_id'), null=True, default=None)
|
||||
bank_order_id = models.CharField(verbose_name=_('ID заказа в банке'), null=True, default=None)
|
||||
|
||||
status = models.CharField(verbose_name=_('Статус заказа в банке'), null=True, default=None)
|
||||
last_operation_status = models.CharField(verbose_name=_('Статус последней операции'), null=True, default=None)
|
||||
|
||||
pay_page = models.URLField(verbose_name=_('Ссылка на страницу оплаты'), null=True, blank=True, default=None)
|
||||
|
||||
class Meta:
|
||||
verbose_name = _('Заказ на подписку')
|
||||
verbose_name_plural = _('Заказы на подписки')
|
||||
|
||||
def __str__(self):
|
||||
res = 'Заказ'
|
||||
if self.subscribe:
|
||||
res += f' на подписку {self.subscribe.name}'
|
||||
if self.user:
|
||||
res += f' для {self.user.username}'
|
||||
|
||||
if not res:
|
||||
res += f' {str(self.id)}'
|
||||
return res
|
||||
3
BillingApp/tests.py
Normal file
3
BillingApp/tests.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
3
BillingApp/views.py
Normal file
3
BillingApp/views.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from django.shortcuts import render
|
||||
|
||||
# Create your views here.
|
||||
Reference in New Issue
Block a user