django-cfg 1.3.3__py3-none-any.whl → 1.3.7__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- django_cfg/__init__.py +1 -1
- django_cfg/apps/payments/admin_interface/old/payments/base.html +175 -0
- django_cfg/apps/payments/admin_interface/old/payments/components/dev_tool_card.html +125 -0
- django_cfg/apps/payments/admin_interface/old/payments/components/ngrok_status_card.html +113 -0
- django_cfg/apps/payments/admin_interface/old/payments/components/status_card.html +35 -0
- django_cfg/apps/payments/admin_interface/old/payments/payment_dashboard.html +309 -0
- django_cfg/apps/payments/admin_interface/old/payments/payment_form.html +303 -0
- django_cfg/apps/payments/admin_interface/old/payments/payment_list.html +382 -0
- django_cfg/apps/payments/admin_interface/old/payments/webhook_dashboard.html +518 -0
- django_cfg/apps/payments/{static → admin_interface/old/static}/payments/css/components.css +248 -9
- django_cfg/apps/payments/admin_interface/old/static/payments/js/ngrok-status.js +163 -0
- django_cfg/apps/payments/admin_interface/serializers/__init__.py +39 -0
- django_cfg/apps/payments/admin_interface/serializers/payment_serializers.py +149 -0
- django_cfg/apps/payments/admin_interface/serializers/webhook_serializers.py +114 -0
- django_cfg/apps/payments/admin_interface/templates/payments/base.html +55 -90
- django_cfg/apps/payments/admin_interface/templates/payments/components/dialog.html +81 -0
- django_cfg/apps/payments/admin_interface/templates/payments/components/ngrok_help_dialog.html +112 -0
- django_cfg/apps/payments/admin_interface/templates/payments/components/ngrok_status.html +175 -0
- django_cfg/apps/payments/admin_interface/templates/payments/components/status_card.html +21 -17
- django_cfg/apps/payments/admin_interface/templates/payments/payment_dashboard.html +123 -250
- django_cfg/apps/payments/admin_interface/templates/payments/payment_form.html +170 -269
- django_cfg/apps/payments/admin_interface/templates/payments/payment_list.html +152 -355
- django_cfg/apps/payments/admin_interface/templates/payments/webhook_dashboard.html +202 -551
- django_cfg/apps/payments/admin_interface/views/__init__.py +25 -14
- django_cfg/apps/payments/admin_interface/views/api/__init__.py +20 -0
- django_cfg/apps/payments/admin_interface/views/api/payments.py +191 -0
- django_cfg/apps/payments/admin_interface/views/api/stats.py +206 -0
- django_cfg/apps/payments/admin_interface/views/api/users.py +60 -0
- django_cfg/apps/payments/admin_interface/views/api/webhook_admin.py +257 -0
- django_cfg/apps/payments/admin_interface/views/api/webhook_public.py +70 -0
- django_cfg/apps/payments/admin_interface/views/base.py +114 -0
- django_cfg/apps/payments/admin_interface/views/dashboard.py +60 -0
- django_cfg/apps/payments/admin_interface/views/forms.py +94 -0
- django_cfg/apps/payments/config/helpers.py +2 -2
- django_cfg/apps/payments/management/commands/cleanup_expired_data.py +16 -6
- django_cfg/apps/payments/management/commands/currency_stats.py +72 -5
- django_cfg/apps/payments/management/commands/manage_currencies.py +9 -20
- django_cfg/apps/payments/management/commands/manage_providers.py +5 -5
- django_cfg/apps/payments/middleware/api_access.py +35 -34
- django_cfg/apps/payments/migrations/0001_initial.py +1 -1
- django_cfg/apps/payments/models/managers/api_key_managers.py +4 -0
- django_cfg/apps/payments/models/managers/payment_managers.py +5 -0
- django_cfg/apps/payments/models/subscriptions.py +0 -24
- django_cfg/apps/payments/services/cache/__init__.py +1 -1
- django_cfg/apps/payments/services/core/balance_service.py +13 -2
- django_cfg/apps/payments/services/integrations/ngrok_service.py +3 -3
- django_cfg/apps/payments/services/providers/registry.py +20 -0
- django_cfg/apps/payments/signals/balance_signals.py +7 -4
- django_cfg/apps/payments/static/payments/js/api-client.js +385 -0
- django_cfg/apps/payments/static/payments/js/ngrok-status.js +58 -0
- django_cfg/apps/payments/static/payments/js/payment-dashboard.js +50 -0
- django_cfg/apps/payments/static/payments/js/payment-form.js +175 -0
- django_cfg/apps/payments/static/payments/js/payment-list.js +95 -0
- django_cfg/apps/payments/static/payments/js/webhook-dashboard.js +154 -0
- django_cfg/apps/payments/urls.py +4 -0
- django_cfg/apps/payments/urls_admin.py +37 -18
- django_cfg/apps/payments/views/api/api_keys.py +14 -0
- django_cfg/apps/payments/views/api/base.py +1 -0
- django_cfg/apps/payments/views/api/currencies.py +2 -2
- django_cfg/apps/payments/views/api/payments.py +11 -5
- django_cfg/apps/payments/views/api/subscriptions.py +36 -31
- django_cfg/apps/payments/views/overview/__init__.py +40 -0
- django_cfg/apps/payments/views/overview/serializers.py +205 -0
- django_cfg/apps/payments/views/overview/services.py +439 -0
- django_cfg/apps/payments/views/overview/urls.py +27 -0
- django_cfg/apps/payments/views/overview/views.py +231 -0
- django_cfg/apps/payments/views/serializers/api_keys.py +20 -6
- django_cfg/apps/payments/views/serializers/balances.py +5 -8
- django_cfg/apps/payments/views/serializers/currencies.py +2 -6
- django_cfg/apps/payments/views/serializers/payments.py +37 -32
- django_cfg/apps/payments/views/serializers/subscriptions.py +4 -26
- django_cfg/core/config.py +25 -15
- django_cfg/core/generation.py +12 -12
- django_cfg/core/integration/display/startup.py +1 -1
- django_cfg/core/validation.py +4 -4
- django_cfg/management/commands/show_config.py +2 -2
- django_cfg/management/commands/tree.py +1 -3
- django_cfg/middleware/__init__.py +2 -0
- django_cfg/middleware/static_nocache.py +55 -0
- django_cfg/models/payments.py +13 -15
- django_cfg/models/security.py +15 -0
- django_cfg/modules/django_ngrok.py +6 -0
- django_cfg/modules/django_unfold/dashboard.py +1 -3
- django_cfg/utils/smart_defaults.py +41 -1
- {django_cfg-1.3.3.dist-info → django_cfg-1.3.7.dist-info}/METADATA +1 -1
- {django_cfg-1.3.3.dist-info → django_cfg-1.3.7.dist-info}/RECORD +97 -64
- django_cfg/apps/payments/admin_interface/templates/payments/components/dev_tool_card.html +0 -38
- django_cfg/apps/payments/admin_interface/views/payment_views.py +0 -259
- django_cfg/apps/payments/admin_interface/views/webhook_dashboard.py +0 -37
- /django_cfg/apps/payments/admin_interface/{templates → old}/payments/components/loading_spinner.html +0 -0
- /django_cfg/apps/payments/admin_interface/{templates → old}/payments/components/notification.html +0 -0
- /django_cfg/apps/payments/admin_interface/{templates → old}/payments/components/provider_card.html +0 -0
- /django_cfg/apps/payments/admin_interface/{templates → old}/payments/currency_converter.html +0 -0
- /django_cfg/apps/payments/admin_interface/{templates → old}/payments/payment_status.html +0 -0
- /django_cfg/apps/payments/{static → admin_interface/old/static}/payments/css/dashboard.css +0 -0
- /django_cfg/apps/payments/{static → admin_interface/old/static}/payments/js/components.js +0 -0
- /django_cfg/apps/payments/{static → admin_interface/old/static}/payments/js/utils.js +0 -0
- {django_cfg-1.3.3.dist-info → django_cfg-1.3.7.dist-info}/WHEEL +0 -0
- {django_cfg-1.3.3.dist-info → django_cfg-1.3.7.dist-info}/entry_points.txt +0 -0
- {django_cfg-1.3.3.dist-info → django_cfg-1.3.7.dist-info}/licenses/LICENSE +0 -0
@@ -1,300 +1,173 @@
|
|
1
1
|
{% extends 'payments/base.html' %}
|
2
2
|
{% load static %}
|
3
|
-
{% load payment_tags %}
|
4
3
|
|
5
|
-
{% block
|
6
|
-
|
4
|
+
{% block title %}Dashboard - Payment Admin{% endblock %}
|
5
|
+
|
6
|
+
{% block page_title %}Payment Dashboard{% endblock %}
|
7
|
+
{% block page_subtitle %}Overview of payment system status and metrics{% endblock %}
|
7
8
|
|
8
9
|
{% block content %}
|
9
10
|
<div x-data="paymentDashboard()" x-init="init()">
|
10
|
-
<!--
|
11
|
+
<!-- Stats Cards -->
|
11
12
|
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8">
|
12
13
|
<!-- Total Payments -->
|
13
|
-
{% include 'payments/components/status_card.html' with title="Total Payments" value=
|
14
|
+
{% include 'payments/components/status_card.html' with title="Total Payments" value="0" icon="payment" status="info" %}
|
14
15
|
|
15
|
-
<!--
|
16
|
-
{% include 'payments/components/status_card.html' with title="
|
16
|
+
<!-- Successful Payments -->
|
17
|
+
{% include 'payments/components/status_card.html' with title="Successful" value="0" icon="check_circle" status="success" %}
|
17
18
|
|
18
19
|
<!-- Pending Payments -->
|
19
|
-
{% include 'payments/components/status_card.html' with title="Pending" value=
|
20
|
+
{% include 'payments/components/status_card.html' with title="Pending" value="0" icon="schedule" status="warning" %}
|
20
21
|
|
21
22
|
<!-- Failed Payments -->
|
22
|
-
{% include 'payments/components/status_card.html' with title="Failed" value=
|
23
|
+
{% include 'payments/components/status_card.html' with title="Failed" value="0" icon="error" status="error" %}
|
23
24
|
</div>
|
24
25
|
|
25
|
-
|
26
|
-
|
27
|
-
<div class="lg:col-span-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
<div class="payment-card">
|
34
|
-
<div class="payment-card-header">
|
35
|
-
<h3 class="font-medium text-gray-900 dark:text-white flex items-center">
|
36
|
-
<span class="material-icons-outlined mr-2">flash_on</span>
|
37
|
-
Quick Actions
|
38
|
-
</h3>
|
39
|
-
</div>
|
40
|
-
<div class="payment-card-content">
|
41
|
-
<div class="grid grid-cols-2 md:grid-cols-4 gap-4">
|
42
|
-
<a href="{% url 'cfg_payments_admin:payment-create' %}"
|
43
|
-
class="flex flex-col items-center p-4 bg-blue-50 dark:bg-blue-900/20 rounded-lg hover:bg-blue-100 dark:hover:bg-blue-900/30 transition-colors">
|
44
|
-
<span class="material-icons-outlined text-blue-600 dark:text-blue-400 mb-2">add_circle</span>
|
45
|
-
<span class="text-sm font-medium text-gray-900 dark:text-white">Create Payment</span>
|
46
|
-
</a>
|
47
|
-
|
26
|
+
<div class="grid grid-cols-1 lg:grid-cols-3 gap-8">
|
27
|
+
<!-- Main Content -->
|
28
|
+
<div class="lg:col-span-2 space-y-8">
|
29
|
+
<!-- Recent Payments -->
|
30
|
+
<div class="bg-white dark:bg-gray-800 shadow rounded-lg">
|
31
|
+
<div class="px-6 py-4 border-b border-gray-200 dark:border-gray-700">
|
32
|
+
<div class="flex items-center justify-between">
|
33
|
+
<h3 class="text-lg font-medium text-gray-900 dark:text-white">Recent Payments</h3>
|
48
34
|
<a href="{% url 'cfg_payments_admin:payment-list' %}"
|
49
|
-
class="
|
50
|
-
|
51
|
-
<span class="text-sm font-medium text-gray-900 dark:text-white">View All</span>
|
52
|
-
</a>
|
53
|
-
|
54
|
-
<a href="{% url 'cfg_payments_admin:webhook-dashboard' %}"
|
55
|
-
class="flex flex-col items-center p-4 bg-purple-50 dark:bg-purple-900/20 rounded-lg hover:bg-purple-100 dark:hover:bg-purple-900/30 transition-colors">
|
56
|
-
<span class="material-icons-outlined text-purple-600 dark:text-purple-400 mb-2">webhook</span>
|
57
|
-
<span class="text-sm font-medium text-gray-900 dark:text-white">Webhooks</span>
|
58
|
-
</a>
|
59
|
-
|
60
|
-
<a href="{% url 'cfg_payments_admin:currency-converter' %}"
|
61
|
-
class="flex flex-col items-center p-4 bg-orange-50 dark:bg-orange-900/20 rounded-lg hover:bg-orange-100 dark:hover:bg-orange-900/30 transition-colors">
|
62
|
-
<span class="material-icons-outlined text-orange-600 dark:text-orange-400 mb-2">currency_exchange</span>
|
63
|
-
<span class="text-sm font-medium text-gray-900 dark:text-white">Converter</span>
|
35
|
+
class="text-sm text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300">
|
36
|
+
View all
|
64
37
|
</a>
|
65
38
|
</div>
|
66
39
|
</div>
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
</div>
|
86
|
-
<div class="payment-card-content">
|
87
|
-
{% if stats.recent_payments %}
|
88
|
-
<div class="space-y-3">
|
89
|
-
{% for payment in stats.recent_payments %}
|
90
|
-
<div class="flex items-center justify-between p-3 bg-gray-50 dark:bg-gray-700 rounded-lg">
|
91
|
-
<div class="flex items-center space-x-3">
|
92
|
-
<div class="w-8 h-8 rounded-full flex items-center justify-center
|
93
|
-
{% if payment.status == 'completed' %}bg-green-100 dark:bg-green-900
|
94
|
-
{% elif payment.status == 'pending' %}bg-yellow-100 dark:bg-yellow-900
|
95
|
-
{% elif payment.status == 'processing' %}bg-blue-100 dark:bg-blue-900
|
96
|
-
{% else %}bg-red-100 dark:bg-red-900{% endif %}">
|
97
|
-
<span class="material-icons-outlined text-sm
|
98
|
-
{% if payment.status == 'completed' %}text-green-600 dark:text-green-400
|
99
|
-
{% elif payment.status == 'pending' %}text-yellow-600 dark:text-yellow-400
|
100
|
-
{% elif payment.status == 'processing' %}text-blue-600 dark:text-blue-400
|
101
|
-
{% else %}text-red-600 dark:text-red-400{% endif %}">
|
102
|
-
{% if payment.status == 'completed' %}check_circle
|
103
|
-
{% elif payment.status == 'pending' %}schedule
|
104
|
-
{% elif payment.status == 'processing' %}sync
|
105
|
-
{% else %}error{% endif %}
|
106
|
-
</span>
|
107
|
-
</div>
|
108
|
-
<div>
|
109
|
-
<div class="text-sm font-medium text-gray-900 dark:text-white">
|
110
|
-
${{ payment.amount_usd|floatformat:2 }}
|
40
|
+
|
41
|
+
<div class="p-6">
|
42
|
+
<div x-show="recentPayments.length === 0 && !loading" class="text-center py-8">
|
43
|
+
<span class="material-icons-outlined text-gray-400 text-4xl mb-2">payment</span>
|
44
|
+
<p class="text-gray-500 dark:text-gray-400">No recent payments</p>
|
45
|
+
</div>
|
46
|
+
|
47
|
+
<div x-show="loading" class="text-center py-8">
|
48
|
+
<div class="inline-block animate-spin rounded-full h-6 w-6 border-b-2 border-blue-600"></div>
|
49
|
+
<p class="mt-2 text-sm text-gray-500 dark:text-gray-400">Loading...</p>
|
50
|
+
</div>
|
51
|
+
|
52
|
+
<div class="space-y-4">
|
53
|
+
<template x-for="payment in recentPayments.slice(0, 5)" :key="payment.id">
|
54
|
+
<div class="flex items-center justify-between p-4 bg-gray-50 dark:bg-gray-700 rounded-lg">
|
55
|
+
<div class="flex items-center">
|
56
|
+
<div class="w-8 h-8 bg-blue-100 dark:bg-blue-900 rounded-full flex items-center justify-center mr-3">
|
57
|
+
<span class="material-icons-outlined text-blue-600 dark:text-blue-400 text-sm">payment</span>
|
111
58
|
</div>
|
112
|
-
<div
|
113
|
-
|
59
|
+
<div>
|
60
|
+
<div class="text-sm font-medium text-gray-900 dark:text-white" x-text="payment.id.substring(0, 8)"></div>
|
61
|
+
<div class="text-xs text-gray-500 dark:text-gray-400" x-text="payment.provider"></div>
|
114
62
|
</div>
|
115
63
|
</div>
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
64
|
+
<div class="text-right">
|
65
|
+
<div class="text-sm font-medium text-gray-900 dark:text-white" x-text="`$${payment.amount_usd}`"></div>
|
66
|
+
<span class="inline-flex px-2 py-1 text-xs font-semibold rounded-full"
|
67
|
+
:class="{
|
68
|
+
'bg-green-100 text-green-800 dark:bg-green-900/20 dark:text-green-400': payment.status === 'completed',
|
69
|
+
'bg-yellow-100 text-yellow-800 dark:bg-yellow-900/20 dark:text-yellow-400': payment.status === 'pending',
|
70
|
+
'bg-red-100 text-red-800 dark:bg-red-900/20 dark:text-red-400': payment.status === 'failed'
|
71
|
+
}"
|
72
|
+
x-text="payment.status">
|
73
|
+
</span>
|
120
74
|
</div>
|
121
|
-
<a href="{% url 'cfg_payments_admin:payment-detail' payment.id %}"
|
122
|
-
class="text-xs text-blue-600 dark:text-blue-400 hover:text-blue-800 dark:hover:text-blue-300">
|
123
|
-
View Details
|
124
|
-
</a>
|
125
75
|
</div>
|
126
|
-
</
|
127
|
-
{% endfor %}
|
76
|
+
</template>
|
128
77
|
</div>
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
78
|
+
</div>
|
79
|
+
</div>
|
80
|
+
|
81
|
+
<!-- Quick Actions -->
|
82
|
+
<div class="bg-white dark:bg-gray-800 shadow rounded-lg">
|
83
|
+
<div class="px-6 py-4 border-b border-gray-200 dark:border-gray-700">
|
84
|
+
<h3 class="text-lg font-medium text-gray-900 dark:text-white">Quick Actions</h3>
|
85
|
+
</div>
|
86
|
+
|
87
|
+
<div class="p-6">
|
88
|
+
<div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
|
89
|
+
<a href="{% url 'cfg_payments_admin:payment-form' %}"
|
90
|
+
class="flex items-center p-4 bg-blue-50 dark:bg-blue-900/20 rounded-lg hover:bg-blue-100 dark:hover:bg-blue-900/30 transition-colors">
|
91
|
+
<div class="w-10 h-10 bg-blue-100 dark:bg-blue-900 rounded-full flex items-center justify-center mr-4">
|
92
|
+
<span class="material-icons-outlined text-blue-600 dark:text-blue-400">add</span>
|
93
|
+
</div>
|
94
|
+
<div>
|
95
|
+
<div class="text-sm font-medium text-gray-900 dark:text-white">Create Payment</div>
|
96
|
+
<div class="text-xs text-gray-500 dark:text-gray-400">Start a new payment</div>
|
97
|
+
</div>
|
98
|
+
</a>
|
99
|
+
|
100
|
+
<a href="{% url 'cfg_payments_admin:webhook-dashboard' %}"
|
101
|
+
class="flex items-center p-4 bg-green-50 dark:bg-green-900/20 rounded-lg hover:bg-green-100 dark:hover:bg-green-900/30 transition-colors">
|
102
|
+
<div class="w-10 h-10 bg-green-100 dark:bg-green-900 rounded-full flex items-center justify-center mr-4">
|
103
|
+
<span class="material-icons-outlined text-green-600 dark:text-green-400">webhook</span>
|
104
|
+
</div>
|
105
|
+
<div>
|
106
|
+
<div class="text-sm font-medium text-gray-900 dark:text-white">Webhook Dashboard</div>
|
107
|
+
<div class="text-xs text-gray-500 dark:text-gray-400">Monitor webhooks</div>
|
108
|
+
</div>
|
137
109
|
</a>
|
138
110
|
</div>
|
139
|
-
|
111
|
+
</div>
|
140
112
|
</div>
|
141
113
|
</div>
|
142
114
|
|
143
|
-
<!--
|
144
|
-
<div class="
|
145
|
-
|
146
|
-
|
147
|
-
<span class="material-icons-outlined mr-2">monitor_heart</span>
|
148
|
-
System Status
|
149
|
-
</h3>
|
150
|
-
<button @click="refreshSystemStatus()"
|
151
|
-
class="text-sm text-blue-600 dark:text-blue-400 hover:text-blue-800 dark:hover:text-blue-300 flex items-center">
|
152
|
-
<span class="material-icons-outlined text-sm" :class="{ 'animate-spin': refreshing }">refresh</span>
|
153
|
-
</button>
|
154
|
-
</div>
|
155
|
-
<div class="payment-card-content">
|
156
|
-
<div class="space-y-4">
|
157
|
-
<!-- Payment System Status -->
|
158
|
-
<div class="flex items-center justify-between">
|
159
|
-
<div class="flex items-center space-x-2">
|
160
|
-
<span class="material-icons-outlined text-green-600 dark:text-green-400 text-sm">check_circle</span>
|
161
|
-
<span class="text-sm text-gray-900 dark:text-white">Payment System</span>
|
162
|
-
</div>
|
163
|
-
<span class="text-xs text-green-600 dark:text-green-400 font-medium">Online</span>
|
164
|
-
</div>
|
115
|
+
<!-- Sidebar -->
|
116
|
+
<div class="space-y-8">
|
117
|
+
<!-- Ngrok Status -->
|
118
|
+
{% include 'payments/components/ngrok_status.html' %}
|
165
119
|
|
166
|
-
|
120
|
+
<!-- System Status -->
|
121
|
+
<div class="bg-white dark:bg-gray-800 shadow rounded-lg">
|
122
|
+
<div class="px-6 py-4 border-b border-gray-200 dark:border-gray-700">
|
123
|
+
<h3 class="text-lg font-medium text-gray-900 dark:text-white">System Status</h3>
|
124
|
+
</div>
|
125
|
+
|
126
|
+
<div class="p-6 space-y-4">
|
167
127
|
<div class="flex items-center justify-between">
|
168
|
-
<div class="flex items-center
|
169
|
-
<
|
170
|
-
<span class="text-sm text-gray-900 dark:text-white">
|
128
|
+
<div class="flex items-center">
|
129
|
+
<div class="w-3 h-3 bg-green-500 rounded-full mr-2"></div>
|
130
|
+
<span class="text-sm text-gray-900 dark:text-white">API Status</span>
|
171
131
|
</div>
|
172
|
-
<span class="text-
|
132
|
+
<span class="text-sm text-green-600 dark:text-green-400">Operational</span>
|
173
133
|
</div>
|
174
|
-
|
175
|
-
<!-- Database Status -->
|
134
|
+
|
176
135
|
<div class="flex items-center justify-between">
|
177
|
-
<div class="flex items-center
|
178
|
-
<
|
136
|
+
<div class="flex items-center">
|
137
|
+
<div class="w-3 h-3 bg-green-500 rounded-full mr-2"></div>
|
179
138
|
<span class="text-sm text-gray-900 dark:text-white">Database</span>
|
180
139
|
</div>
|
181
|
-
<span class="text-
|
182
|
-
</div>
|
183
|
-
|
184
|
-
<!-- Webhook Status -->
|
185
|
-
<div class="flex items-center justify-between">
|
186
|
-
<div class="flex items-center space-x-2">
|
187
|
-
<span class="material-icons-outlined text-green-600 dark:text-green-400 text-sm">webhook</span>
|
188
|
-
<span class="text-sm text-gray-900 dark:text-white">Webhooks</span>
|
189
|
-
</div>
|
190
|
-
<span class="text-xs text-green-600 dark:text-green-400 font-medium" x-text="systemStatus.webhooks || 'Active'">Active</span>
|
140
|
+
<span class="text-sm text-green-600 dark:text-green-400">Connected</span>
|
191
141
|
</div>
|
142
|
+
|
192
143
|
</div>
|
144
|
+
</div>
|
193
145
|
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
<
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
146
|
+
<!-- Recent Activity -->
|
147
|
+
<div class="bg-white dark:bg-gray-800 shadow rounded-lg">
|
148
|
+
<div class="px-6 py-4 border-b border-gray-200 dark:border-gray-700">
|
149
|
+
<h3 class="text-lg font-medium text-gray-900 dark:text-white">Recent Activity</h3>
|
150
|
+
</div>
|
151
|
+
|
152
|
+
<div class="p-6">
|
153
|
+
<div class="space-y-3">
|
154
|
+
<template x-for="activity in recentActivity" :key="activity.id">
|
155
|
+
<div class="flex items-start">
|
156
|
+
<div class="w-2 h-2 bg-blue-500 rounded-full mt-2 mr-3"></div>
|
157
|
+
<div class="flex-1">
|
158
|
+
<p class="text-sm text-gray-900 dark:text-white" x-text="activity.message"></p>
|
159
|
+
<p class="text-xs text-gray-500 dark:text-gray-400" x-text="activity.time"></p>
|
160
|
+
</div>
|
161
|
+
</div>
|
162
|
+
</template>
|
207
163
|
</div>
|
208
164
|
</div>
|
209
165
|
</div>
|
210
166
|
</div>
|
211
167
|
</div>
|
212
|
-
|
213
|
-
<!-- Loading Spinner Component -->
|
214
|
-
<div x-show="loading" x-cloak class="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50">
|
215
|
-
{% include 'payments/components/loading_spinner.html' %}
|
216
|
-
</div>
|
217
|
-
|
218
|
-
<!-- Notifications -->
|
219
|
-
<div x-show="notification.show" x-cloak
|
220
|
-
class="fixed top-4 right-4 z-50"
|
221
|
-
x-transition:enter="transition ease-out duration-300"
|
222
|
-
x-transition:enter-start="opacity-0 transform translate-x-full"
|
223
|
-
x-transition:enter-end="opacity-100 transform translate-x-0"
|
224
|
-
x-transition:leave="transition ease-in duration-200"
|
225
|
-
x-transition:leave-start="opacity-100 transform translate-x-0"
|
226
|
-
x-transition:leave-end="opacity-0 transform translate-x-full">
|
227
|
-
{% include 'payments/components/notification.html' with type="notification.type" message="notification.message" %}
|
228
|
-
</div>
|
229
168
|
</div>
|
230
169
|
{% endblock %}
|
231
170
|
|
232
171
|
{% block extra_js %}
|
233
|
-
<script>
|
234
|
-
function paymentDashboard() {
|
235
|
-
return {
|
236
|
-
loading: false,
|
237
|
-
refreshing: false,
|
238
|
-
systemStatus: {
|
239
|
-
providers: 'Active',
|
240
|
-
webhooks: 'Active'
|
241
|
-
},
|
242
|
-
notification: {
|
243
|
-
show: false,
|
244
|
-
type: 'info',
|
245
|
-
message: ''
|
246
|
-
},
|
247
|
-
|
248
|
-
init() {
|
249
|
-
// Initialize dashboard
|
250
|
-
this.loadSystemStatus();
|
251
|
-
},
|
252
|
-
|
253
|
-
async loadSystemStatus() {
|
254
|
-
try {
|
255
|
-
// This would typically fetch from an API endpoint
|
256
|
-
// For now, we'll simulate the data
|
257
|
-
this.systemStatus = {
|
258
|
-
providers: 'Active (1/1)',
|
259
|
-
webhooks: 'Active'
|
260
|
-
};
|
261
|
-
} catch (error) {
|
262
|
-
console.error('Failed to load system status:', error);
|
263
|
-
}
|
264
|
-
},
|
265
|
-
|
266
|
-
async refreshSystemStatus() {
|
267
|
-
this.refreshing = true;
|
268
|
-
try {
|
269
|
-
await this.loadSystemStatus();
|
270
|
-
this.showNotification('success', 'System status refreshed');
|
271
|
-
} catch (error) {
|
272
|
-
this.showNotification('error', 'Failed to refresh system status');
|
273
|
-
} finally {
|
274
|
-
this.refreshing = false;
|
275
|
-
}
|
276
|
-
},
|
277
|
-
|
278
|
-
async checkSystemHealth() {
|
279
|
-
this.loading = true;
|
280
|
-
try {
|
281
|
-
// Simulate health check API call
|
282
|
-
await new Promise(resolve => setTimeout(resolve, 1500));
|
283
|
-
this.showNotification('success', 'System health check completed - All systems operational');
|
284
|
-
} catch (error) {
|
285
|
-
this.showNotification('error', 'Health check failed');
|
286
|
-
} finally {
|
287
|
-
this.loading = false;
|
288
|
-
}
|
289
|
-
},
|
290
|
-
|
291
|
-
showNotification(type, message) {
|
292
|
-
this.notification = { show: true, type, message };
|
293
|
-
setTimeout(() => {
|
294
|
-
this.notification.show = false;
|
295
|
-
}, 5000);
|
296
|
-
}
|
297
|
-
};
|
298
|
-
}
|
299
|
-
</script>
|
172
|
+
<script src="{% static 'payments/js/payment-dashboard.js' %}"></script>
|
300
173
|
{% endblock %}
|