django-cfg 1.3.7__py3-none-any.whl → 1.3.11__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/accounts/admin/__init__.py +24 -8
- django_cfg/apps/accounts/admin/activity_admin.py +146 -0
- django_cfg/apps/accounts/admin/filters.py +98 -22
- django_cfg/apps/accounts/admin/group_admin.py +86 -0
- django_cfg/apps/accounts/admin/inlines.py +42 -13
- django_cfg/apps/accounts/admin/otp_admin.py +115 -0
- django_cfg/apps/accounts/admin/registration_admin.py +173 -0
- django_cfg/apps/accounts/admin/resources.py +123 -19
- django_cfg/apps/accounts/admin/twilio_admin.py +327 -0
- django_cfg/apps/accounts/admin/user_admin.py +362 -0
- django_cfg/apps/agents/admin/__init__.py +17 -4
- django_cfg/apps/agents/admin/execution_admin.py +204 -183
- django_cfg/apps/agents/admin/registry_admin.py +230 -255
- django_cfg/apps/agents/admin/toolsets_admin.py +274 -321
- django_cfg/apps/agents/core/__init__.py +1 -1
- django_cfg/apps/agents/core/django_agent.py +221 -0
- django_cfg/apps/agents/core/exceptions.py +14 -0
- django_cfg/apps/agents/core/orchestrator.py +18 -3
- django_cfg/apps/knowbase/admin/__init__.py +1 -1
- django_cfg/apps/knowbase/admin/archive_admin.py +352 -640
- django_cfg/apps/knowbase/admin/chat_admin.py +258 -192
- django_cfg/apps/knowbase/admin/document_admin.py +269 -262
- django_cfg/apps/knowbase/admin/external_data_admin.py +271 -489
- django_cfg/apps/knowbase/config/settings.py +21 -4
- django_cfg/apps/knowbase/views/chat_views.py +3 -0
- django_cfg/apps/leads/admin/__init__.py +3 -1
- django_cfg/apps/leads/admin/leads_admin.py +235 -35
- django_cfg/apps/maintenance/admin/__init__.py +2 -2
- django_cfg/apps/maintenance/admin/api_key_admin.py +125 -63
- django_cfg/apps/maintenance/admin/log_admin.py +143 -61
- django_cfg/apps/maintenance/admin/scheduled_admin.py +212 -301
- django_cfg/apps/maintenance/admin/site_admin.py +213 -352
- django_cfg/apps/newsletter/admin/__init__.py +29 -2
- django_cfg/apps/newsletter/admin/newsletter_admin.py +531 -193
- django_cfg/apps/payments/admin/__init__.py +18 -27
- django_cfg/apps/payments/admin/api_keys_admin.py +179 -546
- django_cfg/apps/payments/admin/balance_admin.py +166 -632
- django_cfg/apps/payments/admin/currencies_admin.py +235 -607
- django_cfg/apps/payments/admin/endpoint_groups_admin.py +127 -0
- django_cfg/apps/payments/admin/filters.py +83 -3
- django_cfg/apps/payments/admin/networks_admin.py +269 -0
- django_cfg/apps/payments/admin/payments_admin.py +183 -460
- django_cfg/apps/payments/admin/subscriptions_admin.py +119 -636
- django_cfg/apps/payments/admin/tariffs_admin.py +248 -0
- django_cfg/apps/payments/admin_interface/serializers/payment_serializers.py +153 -34
- django_cfg/apps/payments/admin_interface/templates/payments/components/payment_card.html +121 -0
- django_cfg/apps/payments/admin_interface/templates/payments/components/payment_qr_code.html +95 -0
- django_cfg/apps/payments/admin_interface/templates/payments/components/progress_bar.html +37 -0
- django_cfg/apps/payments/admin_interface/templates/payments/components/provider_stats.html +60 -0
- django_cfg/apps/payments/admin_interface/templates/payments/components/status_badge.html +41 -0
- django_cfg/apps/payments/admin_interface/templates/payments/components/status_overview.html +83 -0
- django_cfg/apps/payments/admin_interface/templates/payments/payment_detail.html +363 -0
- django_cfg/apps/payments/admin_interface/templates/payments/payment_form.html +43 -17
- django_cfg/apps/payments/admin_interface/views/__init__.py +2 -0
- django_cfg/apps/payments/admin_interface/views/api/payments.py +102 -0
- django_cfg/apps/payments/admin_interface/views/api/webhook_admin.py +109 -63
- django_cfg/apps/payments/admin_interface/views/forms.py +5 -1
- django_cfg/apps/payments/config/__init__.py +14 -15
- django_cfg/apps/payments/config/django_cfg_integration.py +59 -1
- django_cfg/apps/payments/config/helpers.py +8 -13
- django_cfg/apps/payments/management/commands/manage_currencies.py +236 -274
- django_cfg/apps/payments/management/commands/manage_providers.py +4 -1
- django_cfg/apps/payments/middleware/api_access.py +32 -6
- django_cfg/apps/payments/migrations/0001_initial.py +33 -46
- django_cfg/apps/payments/migrations/0002_rename_payments_un_user_id_7f6e79_idx_payments_un_user_id_8ce187_idx_and_more.py +46 -0
- django_cfg/apps/payments/migrations/0003_universalpayment_status_changed_at.py +25 -0
- django_cfg/apps/payments/models/balance.py +12 -0
- django_cfg/apps/payments/models/currencies.py +106 -32
- django_cfg/apps/payments/models/managers/currency_managers.py +65 -0
- django_cfg/apps/payments/models/managers/payment_managers.py +142 -25
- django_cfg/apps/payments/models/payments.py +94 -0
- django_cfg/apps/payments/services/core/base.py +4 -4
- django_cfg/apps/payments/services/core/currency_service.py +35 -28
- django_cfg/apps/payments/services/core/payment_service.py +266 -39
- django_cfg/apps/payments/services/providers/__init__.py +3 -0
- django_cfg/apps/payments/services/providers/base.py +303 -41
- django_cfg/apps/payments/services/providers/models/__init__.py +42 -0
- django_cfg/apps/payments/services/providers/models/base.py +145 -0
- django_cfg/apps/payments/services/providers/models/providers.py +87 -0
- django_cfg/apps/payments/services/providers/models/universal.py +48 -0
- django_cfg/apps/payments/services/providers/nowpayments/__init__.py +31 -0
- django_cfg/apps/payments/services/providers/nowpayments/config.py +70 -0
- django_cfg/apps/payments/services/providers/nowpayments/models.py +150 -0
- django_cfg/apps/payments/services/providers/nowpayments/parsers.py +879 -0
- django_cfg/apps/payments/services/providers/nowpayments/provider.py +557 -0
- django_cfg/apps/payments/services/providers/nowpayments/sync.py +196 -0
- django_cfg/apps/payments/services/providers/registry.py +9 -37
- django_cfg/apps/payments/services/providers/sync_service.py +277 -0
- django_cfg/apps/payments/services/types/requests.py +19 -7
- django_cfg/apps/payments/signals/payment_signals.py +31 -2
- django_cfg/apps/payments/static/payments/js/api-client.js +29 -6
- django_cfg/apps/payments/static/payments/js/payment-detail.js +167 -0
- django_cfg/apps/payments/static/payments/js/payment-form.js +98 -32
- django_cfg/apps/payments/tasks/__init__.py +39 -0
- django_cfg/apps/payments/tasks/types.py +73 -0
- django_cfg/apps/payments/tasks/usage_tracking.py +308 -0
- django_cfg/apps/payments/templates/admin/payments/_components/dashboard_header.html +23 -0
- django_cfg/apps/payments/templates/admin/payments/_components/stats_card.html +25 -0
- django_cfg/apps/payments/templates/admin/payments/_components/stats_grid.html +16 -0
- django_cfg/apps/payments/templates/admin/payments/apikey/change_list.html +39 -0
- django_cfg/apps/payments/templates/admin/payments/balance/change_list.html +50 -0
- django_cfg/apps/payments/templates/admin/payments/currency/change_list.html +40 -0
- django_cfg/apps/payments/templates/admin/payments/payment/change_list.html +48 -0
- django_cfg/apps/payments/templates/admin/payments/subscription/change_list.html +48 -0
- django_cfg/apps/payments/templatetags/payment_tags.py +8 -0
- django_cfg/apps/payments/urls.py +3 -2
- django_cfg/apps/payments/urls_admin.py +1 -1
- django_cfg/apps/payments/views/api/currencies.py +8 -5
- django_cfg/apps/payments/views/overview/services.py +2 -2
- django_cfg/apps/payments/views/serializers/currencies.py +22 -8
- django_cfg/apps/support/admin/__init__.py +10 -1
- django_cfg/apps/support/admin/support_admin.py +338 -141
- django_cfg/apps/tasks/admin/__init__.py +11 -0
- django_cfg/apps/tasks/admin/tasks_admin.py +430 -0
- django_cfg/apps/tasks/static/tasks/css/dashboard.css +68 -217
- django_cfg/apps/tasks/static/tasks/js/api.js +40 -84
- django_cfg/apps/tasks/static/tasks/js/components/DataManager.js +24 -0
- django_cfg/apps/tasks/static/tasks/js/components/TabManager.js +85 -0
- django_cfg/apps/tasks/static/tasks/js/components/TaskRenderer.js +216 -0
- django_cfg/apps/tasks/static/tasks/js/dashboard/main.mjs +245 -0
- django_cfg/apps/tasks/static/tasks/js/dashboard/overview.mjs +123 -0
- django_cfg/apps/tasks/static/tasks/js/dashboard/queues.mjs +120 -0
- django_cfg/apps/tasks/static/tasks/js/dashboard/tasks.mjs +350 -0
- django_cfg/apps/tasks/static/tasks/js/dashboard/workers.mjs +169 -0
- django_cfg/apps/tasks/tasks/__init__.py +10 -0
- django_cfg/apps/tasks/tasks/demo_tasks.py +133 -0
- django_cfg/apps/tasks/templates/tasks/components/management_actions.html +42 -45
- django_cfg/apps/tasks/templates/tasks/components/{status_cards.html → overview_content.html} +30 -11
- django_cfg/apps/tasks/templates/tasks/components/queues_content.html +19 -0
- django_cfg/apps/tasks/templates/tasks/components/tab_navigation.html +16 -10
- django_cfg/apps/tasks/templates/tasks/components/tasks_content.html +51 -0
- django_cfg/apps/tasks/templates/tasks/components/workers_content.html +30 -0
- django_cfg/apps/tasks/templates/tasks/layout/base.html +117 -0
- django_cfg/apps/tasks/templates/tasks/pages/dashboard.html +82 -0
- django_cfg/apps/tasks/templates/tasks/partials/task_row_template.html +40 -0
- django_cfg/apps/tasks/templates/tasks/widgets/task_filters.html +37 -0
- django_cfg/apps/tasks/templates/tasks/widgets/task_footer.html +41 -0
- django_cfg/apps/tasks/templates/tasks/widgets/task_table.html +50 -0
- django_cfg/apps/tasks/urls.py +2 -2
- django_cfg/apps/tasks/urls_admin.py +2 -2
- django_cfg/apps/tasks/utils/__init__.py +1 -0
- django_cfg/apps/tasks/utils/simulator.py +356 -0
- django_cfg/apps/tasks/views/__init__.py +16 -0
- django_cfg/apps/tasks/views/api.py +569 -0
- django_cfg/apps/tasks/views/dashboard.py +58 -0
- django_cfg/config.py +1 -1
- django_cfg/core/config.py +10 -5
- django_cfg/core/generation.py +1 -1
- django_cfg/core/integration/__init__.py +21 -0
- django_cfg/management/commands/__init__.py +13 -1
- django_cfg/management/commands/migrate_all.py +9 -3
- django_cfg/management/commands/migrator.py +11 -6
- django_cfg/management/commands/rundramatiq.py +3 -2
- django_cfg/management/commands/rundramatiq_simulator.py +430 -0
- django_cfg/middleware/__init__.py +0 -2
- django_cfg/models/api_keys.py +115 -0
- django_cfg/models/constance.py +0 -11
- django_cfg/models/payments.py +137 -3
- django_cfg/modules/django_admin/__init__.py +64 -0
- django_cfg/modules/django_admin/decorators/__init__.py +13 -0
- django_cfg/modules/django_admin/decorators/actions.py +106 -0
- django_cfg/modules/django_admin/decorators/display.py +106 -0
- django_cfg/modules/django_admin/mixins/__init__.py +14 -0
- django_cfg/modules/django_admin/mixins/display_mixin.py +81 -0
- django_cfg/modules/django_admin/mixins/optimization_mixin.py +41 -0
- django_cfg/modules/django_admin/mixins/standalone_actions_mixin.py +202 -0
- django_cfg/modules/django_admin/models/__init__.py +20 -0
- django_cfg/modules/django_admin/models/action_models.py +33 -0
- django_cfg/modules/django_admin/models/badge_models.py +20 -0
- django_cfg/modules/django_admin/models/base.py +26 -0
- django_cfg/modules/django_admin/models/display_models.py +31 -0
- django_cfg/modules/django_admin/utils/badges.py +159 -0
- django_cfg/modules/django_admin/utils/displays.py +247 -0
- django_cfg/modules/django_currency/__init__.py +2 -2
- django_cfg/modules/django_currency/clients/__init__.py +2 -2
- django_cfg/modules/django_currency/clients/hybrid_client.py +587 -0
- django_cfg/modules/django_currency/core/converter.py +12 -12
- django_cfg/modules/django_currency/database/__init__.py +2 -2
- django_cfg/modules/django_currency/database/database_loader.py +93 -42
- django_cfg/modules/django_llm/llm/client.py +10 -2
- django_cfg/modules/django_tasks.py +54 -21
- django_cfg/modules/django_unfold/callbacks/actions.py +1 -1
- django_cfg/modules/django_unfold/callbacks/statistics.py +1 -1
- django_cfg/modules/django_unfold/dashboard.py +14 -13
- django_cfg/modules/django_unfold/models/config.py +1 -1
- django_cfg/registry/core.py +7 -9
- django_cfg/registry/third_party.py +2 -2
- django_cfg/template_archive/django_sample.zip +0 -0
- {django_cfg-1.3.7.dist-info → django_cfg-1.3.11.dist-info}/METADATA +2 -1
- {django_cfg-1.3.7.dist-info → django_cfg-1.3.11.dist-info}/RECORD +198 -160
- django_cfg/apps/accounts/admin/activity.py +0 -96
- django_cfg/apps/accounts/admin/group.py +0 -17
- django_cfg/apps/accounts/admin/otp.py +0 -59
- django_cfg/apps/accounts/admin/registration_source.py +0 -97
- django_cfg/apps/accounts/admin/twilio_response.py +0 -227
- django_cfg/apps/accounts/admin/user.py +0 -300
- django_cfg/apps/agents/core/agent.py +0 -281
- django_cfg/apps/payments/admin_interface/old/payments/base.html +0 -175
- django_cfg/apps/payments/admin_interface/old/payments/components/dev_tool_card.html +0 -125
- django_cfg/apps/payments/admin_interface/old/payments/components/loading_spinner.html +0 -16
- django_cfg/apps/payments/admin_interface/old/payments/components/ngrok_status_card.html +0 -113
- django_cfg/apps/payments/admin_interface/old/payments/components/notification.html +0 -27
- django_cfg/apps/payments/admin_interface/old/payments/components/provider_card.html +0 -86
- django_cfg/apps/payments/admin_interface/old/payments/components/status_card.html +0 -35
- django_cfg/apps/payments/admin_interface/old/payments/currency_converter.html +0 -382
- django_cfg/apps/payments/admin_interface/old/payments/payment_dashboard.html +0 -309
- django_cfg/apps/payments/admin_interface/old/payments/payment_form.html +0 -303
- django_cfg/apps/payments/admin_interface/old/payments/payment_list.html +0 -382
- django_cfg/apps/payments/admin_interface/old/payments/payment_status.html +0 -500
- django_cfg/apps/payments/admin_interface/old/payments/webhook_dashboard.html +0 -518
- django_cfg/apps/payments/admin_interface/old/static/payments/css/components.css +0 -619
- django_cfg/apps/payments/admin_interface/old/static/payments/css/dashboard.css +0 -188
- django_cfg/apps/payments/admin_interface/old/static/payments/js/components.js +0 -545
- django_cfg/apps/payments/admin_interface/old/static/payments/js/ngrok-status.js +0 -163
- django_cfg/apps/payments/admin_interface/old/static/payments/js/utils.js +0 -412
- django_cfg/apps/payments/config/constance/__init__.py +0 -22
- django_cfg/apps/payments/config/constance/config_service.py +0 -123
- django_cfg/apps/payments/config/constance/fields.py +0 -69
- django_cfg/apps/payments/config/constance/settings.py +0 -160
- django_cfg/apps/payments/services/providers/nowpayments.py +0 -478
- django_cfg/apps/tasks/admin.py +0 -320
- django_cfg/apps/tasks/static/tasks/js/dashboard.js +0 -614
- django_cfg/apps/tasks/static/tasks/js/modals.js +0 -452
- django_cfg/apps/tasks/static/tasks/js/notifications.js +0 -144
- django_cfg/apps/tasks/static/tasks/js/task-monitor.js +0 -454
- django_cfg/apps/tasks/static/tasks/js/theme.js +0 -77
- django_cfg/apps/tasks/templates/tasks/base.html +0 -96
- django_cfg/apps/tasks/templates/tasks/components/info_cards.html +0 -85
- django_cfg/apps/tasks/templates/tasks/components/overview_tab.html +0 -22
- django_cfg/apps/tasks/templates/tasks/components/queues_tab.html +0 -19
- django_cfg/apps/tasks/templates/tasks/components/task_details_modal.html +0 -103
- django_cfg/apps/tasks/templates/tasks/components/tasks_tab.html +0 -32
- django_cfg/apps/tasks/templates/tasks/components/workers_tab.html +0 -29
- django_cfg/apps/tasks/templates/tasks/dashboard.html +0 -29
- django_cfg/apps/tasks/views.py +0 -461
- django_cfg/management/commands/auto_generate.py +0 -486
- django_cfg/middleware/static_nocache.py +0 -55
- django_cfg/modules/django_currency/clients/yahoo_client.py +0 -157
- /django_cfg/modules/{django_unfold → django_admin}/icons/README.md +0 -0
- /django_cfg/modules/{django_unfold → django_admin}/icons/__init__.py +0 -0
- /django_cfg/modules/{django_unfold → django_admin}/icons/constants.py +0 -0
- /django_cfg/modules/{django_unfold → django_admin}/icons/generate_icons.py +0 -0
- {django_cfg-1.3.7.dist-info → django_cfg-1.3.11.dist-info}/WHEEL +0 -0
- {django_cfg-1.3.7.dist-info → django_cfg-1.3.11.dist-info}/entry_points.txt +0 -0
- {django_cfg-1.3.7.dist-info → django_cfg-1.3.11.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,95 @@
|
|
1
|
+
{% load payment_tags %}
|
2
|
+
|
3
|
+
<!-- Payment QR Code Component -->
|
4
|
+
<div class="flex flex-col items-center space-y-4 p-6 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700">
|
5
|
+
{% if payment.pay_address %}
|
6
|
+
<!-- QR Code Image -->
|
7
|
+
<div class="w-48 h-48 bg-gray-100 dark:bg-gray-700 rounded flex items-center justify-center">
|
8
|
+
{% if payment.get_qr_code_url %}
|
9
|
+
<img src="{{ payment.get_qr_code_url }}"
|
10
|
+
alt="QR Code for {{ payment.pay_address }}"
|
11
|
+
class="w-48 h-48 rounded"
|
12
|
+
onerror="this.style.display='none'; this.nextElementSibling.style.display='flex';">
|
13
|
+
<div class="hidden w-48 h-48 items-center justify-center">
|
14
|
+
<span class="material-icons text-gray-400 text-4xl">qr_code_off</span>
|
15
|
+
</div>
|
16
|
+
{% else %}
|
17
|
+
<span class="material-icons text-gray-400 text-4xl">qr_code_off</span>
|
18
|
+
{% endif %}
|
19
|
+
</div>
|
20
|
+
|
21
|
+
<!-- Payment Details -->
|
22
|
+
<div class="text-center space-y-2">
|
23
|
+
<p class="text-sm font-medium text-gray-900 dark:text-white">
|
24
|
+
Payment Address
|
25
|
+
</p>
|
26
|
+
<p class="text-xs font-mono text-gray-600 dark:text-gray-400 break-all max-w-xs">
|
27
|
+
{{ payment.pay_address }}
|
28
|
+
</p>
|
29
|
+
{% if payment.pay_amount %}
|
30
|
+
<p class="text-xs text-gray-500 dark:text-gray-500">
|
31
|
+
Amount: {{ payment.formatted_pay_amount }} {{ payment.currency.code }}
|
32
|
+
</p>
|
33
|
+
{% endif %}
|
34
|
+
|
35
|
+
<!-- QR Data Preview -->
|
36
|
+
{% if payment.qr_data != payment.pay_address %}
|
37
|
+
<p class="text-xs text-blue-600 dark:text-blue-400">
|
38
|
+
QR contains: {{ payment.qr_data|truncatechars:50 }}
|
39
|
+
</p>
|
40
|
+
{% endif %}
|
41
|
+
</div>
|
42
|
+
|
43
|
+
<!-- Action Buttons -->
|
44
|
+
<div class="flex space-x-2 pt-2">
|
45
|
+
<button class="flex-1 px-3 py-1.5 text-xs border border-gray-300 dark:border-gray-500 text-gray-700 dark:text-gray-200 bg-white dark:bg-gray-700 hover:bg-gray-50 dark:hover:bg-gray-600 rounded-md transition-colors duration-200"
|
46
|
+
onclick="copyToClipboard('{{ payment.pay_address }}', 'Address copied!')">
|
47
|
+
<span class="material-icons text-sm mr-1">content_copy</span>
|
48
|
+
Copy Address
|
49
|
+
</button>
|
50
|
+
{% if payment.pay_amount %}
|
51
|
+
<button class="flex-1 px-3 py-1.5 text-xs border border-gray-300 dark:border-gray-500 text-gray-700 dark:text-gray-200 bg-white dark:bg-gray-700 hover:bg-gray-50 dark:hover:bg-gray-600 rounded-md transition-colors duration-200"
|
52
|
+
onclick="copyToClipboard('{{ payment.pay_amount }}', 'Amount copied!')">
|
53
|
+
<span class="material-icons text-sm mr-1">content_copy</span>
|
54
|
+
Copy Amount
|
55
|
+
</button>
|
56
|
+
{% endif %}
|
57
|
+
{% if payment.qr_data %}
|
58
|
+
<button class="flex-1 px-3 py-1.5 text-xs border border-gray-300 dark:border-gray-500 text-gray-700 dark:text-gray-200 bg-white dark:bg-gray-700 hover:bg-gray-50 dark:hover:bg-gray-600 rounded-md transition-colors duration-200"
|
59
|
+
onclick="copyToClipboard('{{ payment.qr_data }}', 'QR data copied!')">
|
60
|
+
<span class="material-icons text-sm mr-1">qr_code</span>
|
61
|
+
Copy QR Data
|
62
|
+
</button>
|
63
|
+
{% endif %}
|
64
|
+
</div>
|
65
|
+
|
66
|
+
|
67
|
+
{% else %}
|
68
|
+
<div class="text-center py-8">
|
69
|
+
<span class="material-icons text-gray-400 text-4xl mb-2">qr_code_off</span>
|
70
|
+
<p class="text-sm text-gray-500 dark:text-gray-400">
|
71
|
+
QR code not available for this payment
|
72
|
+
</p>
|
73
|
+
</div>
|
74
|
+
{% endif %}
|
75
|
+
</div>
|
76
|
+
|
77
|
+
<!-- Copy to clipboard utility -->
|
78
|
+
<script>
|
79
|
+
function copyToClipboard(text, message) {
|
80
|
+
navigator.clipboard.writeText(text).then(function() {
|
81
|
+
// Show success message (you can customize this)
|
82
|
+
const toast = document.createElement('div');
|
83
|
+
toast.className = 'fixed top-4 right-4 bg-green-500 text-white px-4 py-2 rounded shadow-lg z-50';
|
84
|
+
toast.textContent = message || 'Copied to clipboard!';
|
85
|
+
document.body.appendChild(toast);
|
86
|
+
|
87
|
+
setTimeout(() => {
|
88
|
+
document.body.removeChild(toast);
|
89
|
+
}, 2000);
|
90
|
+
}).catch(function(err) {
|
91
|
+
console.error('Failed to copy: ', err);
|
92
|
+
alert('Failed to copy to clipboard');
|
93
|
+
});
|
94
|
+
}
|
95
|
+
</script>
|
@@ -0,0 +1,37 @@
|
|
1
|
+
{% comment %}
|
2
|
+
Payment Progress Bar Component
|
3
|
+
|
4
|
+
Usage:
|
5
|
+
{% include 'payments/components/progress_bar.html' with payment=payment %}
|
6
|
+
|
7
|
+
Parameters:
|
8
|
+
- payment: UniversalPayment object
|
9
|
+
{% endcomment %}
|
10
|
+
|
11
|
+
<div class="payment-progress">
|
12
|
+
<!-- Progress Bar -->
|
13
|
+
<div class="w-full bg-gray-200 dark:bg-gray-700 rounded-full h-2">
|
14
|
+
<div class="h-2 rounded-full transition-all duration-500 ease-out
|
15
|
+
{% if payment.status == 'completed' %}bg-green-600
|
16
|
+
{% elif payment.status == 'failed' %}bg-red-600
|
17
|
+
{% elif payment.status == 'pending' %}bg-yellow-600
|
18
|
+
{% elif payment.status == 'confirming' %}bg-blue-600
|
19
|
+
{% elif payment.status == 'cancelled' %}bg-gray-600
|
20
|
+
{% else %}bg-blue-600{% endif %}"
|
21
|
+
style="width: {% if payment.status == 'completed' %}100{% elif payment.status == 'failed' or payment.status == 'cancelled' %}100{% elif payment.status == 'confirming' %}75{% elif payment.status == 'pending' %}25{% else %}0{% endif %}%">
|
22
|
+
</div>
|
23
|
+
</div>
|
24
|
+
|
25
|
+
<!-- Progress Text -->
|
26
|
+
<div class="flex justify-between items-center mt-2 text-xs text-gray-500 dark:text-gray-400">
|
27
|
+
<span>
|
28
|
+
{% if payment.status == 'completed' %}100% Complete
|
29
|
+
{% elif payment.status == 'failed' %}Failed
|
30
|
+
{% elif payment.status == 'cancelled' %}Cancelled
|
31
|
+
{% elif payment.status == 'confirming' %}75% Confirming
|
32
|
+
{% elif payment.status == 'pending' %}25% Pending
|
33
|
+
{% else %}0% Initiated{% endif %}
|
34
|
+
</span>
|
35
|
+
<span>{{ payment.get_status_display }}</span>
|
36
|
+
</div>
|
37
|
+
</div>
|
@@ -0,0 +1,60 @@
|
|
1
|
+
{% comment %}
|
2
|
+
Provider Statistics Component
|
3
|
+
|
4
|
+
Usage:
|
5
|
+
{% include 'payments/components/provider_stats.html' with provider_stats=provider_stats %}
|
6
|
+
|
7
|
+
Parameters:
|
8
|
+
- provider_stats: List of provider statistics objects
|
9
|
+
{% endcomment %}
|
10
|
+
|
11
|
+
<div class="space-y-4">
|
12
|
+
{% for stat in provider_stats %}
|
13
|
+
<div class="flex items-center justify-between p-4 bg-gray-50 dark:bg-gray-700 rounded-lg border border-gray-200 dark:border-gray-600">
|
14
|
+
<div class="flex items-center space-x-3">
|
15
|
+
<!-- Provider Icon -->
|
16
|
+
<div class="w-8 h-8 rounded-full flex items-center justify-center
|
17
|
+
{% if stat.provider == 'cryptapi' %}bg-orange-500
|
18
|
+
{% elif stat.provider == 'cryptomus' %}bg-blue-500
|
19
|
+
{% elif stat.provider == 'stripe' %}bg-purple-500
|
20
|
+
{% elif stat.provider == 'nowpayments' %}bg-green-500
|
21
|
+
{% else %}bg-gray-500{% endif %}">
|
22
|
+
<span class="material-icons-outlined text-white text-sm">payment</span>
|
23
|
+
</div>
|
24
|
+
|
25
|
+
<!-- Provider Info -->
|
26
|
+
<div>
|
27
|
+
<p class="text-sm font-medium text-gray-900 dark:text-white capitalize">
|
28
|
+
{{ stat.provider }}
|
29
|
+
</p>
|
30
|
+
<p class="text-xs text-gray-500 dark:text-gray-400">
|
31
|
+
{{ stat.count }} payment{{ stat.count|pluralize }}
|
32
|
+
</p>
|
33
|
+
</div>
|
34
|
+
</div>
|
35
|
+
|
36
|
+
<!-- Statistics -->
|
37
|
+
<div class="text-right">
|
38
|
+
<p class="text-sm font-medium text-gray-900 dark:text-white">
|
39
|
+
${{ stat.volume|floatformat:2|default:"0.00" }}
|
40
|
+
</p>
|
41
|
+
<div class="flex items-center space-x-2 mt-1">
|
42
|
+
<!-- Success Rate Bar -->
|
43
|
+
<div class="w-16 bg-gray-200 dark:bg-gray-600 rounded-full h-1.5">
|
44
|
+
<div class="bg-green-600 h-1.5 rounded-full transition-all duration-300"
|
45
|
+
style="width: {{ stat.success_rate|floatformat:0 }}%"></div>
|
46
|
+
</div>
|
47
|
+
<span class="text-xs text-gray-500 dark:text-gray-400">
|
48
|
+
{{ stat.success_rate|floatformat:0 }}%
|
49
|
+
</span>
|
50
|
+
</div>
|
51
|
+
</div>
|
52
|
+
</div>
|
53
|
+
{% empty %}
|
54
|
+
<div class="text-center py-8">
|
55
|
+
<span class="material-icons-outlined text-gray-400 text-4xl mb-2">bar_chart</span>
|
56
|
+
<p class="text-sm font-medium text-gray-900 dark:text-white mb-1">No Provider Data</p>
|
57
|
+
<p class="text-xs text-gray-500 dark:text-gray-400">Provider statistics will appear here once payments are processed</p>
|
58
|
+
</div>
|
59
|
+
{% endfor %}
|
60
|
+
</div>
|
@@ -0,0 +1,41 @@
|
|
1
|
+
{% comment %}
|
2
|
+
Payment Status Badge Component
|
3
|
+
|
4
|
+
Usage:
|
5
|
+
{% include 'payments/components/status_badge.html' with payment=payment %}
|
6
|
+
|
7
|
+
Parameters:
|
8
|
+
- payment: UniversalPayment object
|
9
|
+
{% endcomment %}
|
10
|
+
|
11
|
+
<span class="payment-status-badge inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium
|
12
|
+
{% if payment.status == 'pending' %}bg-yellow-100 text-yellow-800 dark:bg-yellow-900/20 dark:text-yellow-400
|
13
|
+
{% elif payment.status == 'confirming' %}bg-blue-100 text-blue-800 dark:bg-blue-900/20 dark:text-blue-400
|
14
|
+
{% elif payment.status == 'confirmed' or payment.status == 'completed' %}bg-green-100 text-green-800 dark:bg-green-900/20 dark:text-green-400
|
15
|
+
{% elif payment.status == 'failed' %}bg-red-100 text-red-800 dark:bg-red-900/20 dark:text-red-400
|
16
|
+
{% elif payment.status == 'expired' or payment.status == 'cancelled' %}bg-gray-100 text-gray-800 dark:bg-gray-900/20 dark:text-gray-400
|
17
|
+
{% elif payment.status == 'refunded' %}bg-purple-100 text-purple-800 dark:bg-purple-900/20 dark:text-purple-400
|
18
|
+
{% else %}bg-gray-100 text-gray-800 dark:bg-gray-900/20 dark:text-gray-400{% endif %}"
|
19
|
+
data-status="{{ payment.status }}">
|
20
|
+
{% if payment.status == 'pending' %}
|
21
|
+
<span class="material-icons-outlined text-sm mr-1 animate-pulse">pending</span>
|
22
|
+
{% elif payment.status == 'confirming' %}
|
23
|
+
<span class="material-icons-outlined text-sm mr-1 animate-spin">sync</span>
|
24
|
+
{% elif payment.status == 'confirmed' %}
|
25
|
+
<span class="material-icons-outlined text-sm mr-1">check_circle</span>
|
26
|
+
{% elif payment.status == 'completed' %}
|
27
|
+
<span class="material-icons-outlined text-sm mr-1">verified</span>
|
28
|
+
{% elif payment.status == 'failed' %}
|
29
|
+
<span class="material-icons-outlined text-sm mr-1">error</span>
|
30
|
+
{% elif payment.status == 'expired' %}
|
31
|
+
<span class="material-icons-outlined text-sm mr-1">schedule</span>
|
32
|
+
{% elif payment.status == 'cancelled' %}
|
33
|
+
<span class="material-icons-outlined text-sm mr-1">cancel</span>
|
34
|
+
{% elif payment.status == 'refunded' %}
|
35
|
+
<span class="material-icons-outlined text-sm mr-1">undo</span>
|
36
|
+
{% else %}
|
37
|
+
<span class="material-icons-outlined text-sm mr-1">help</span>
|
38
|
+
{% endif %}
|
39
|
+
|
40
|
+
<span class="status-text">{{ payment.get_status_display }}</span>
|
41
|
+
</span>
|
@@ -0,0 +1,83 @@
|
|
1
|
+
{% comment %}
|
2
|
+
Status Overview Component
|
3
|
+
|
4
|
+
Usage:
|
5
|
+
{% include 'payments/components/status_overview.html' with payment_stats=payment_stats %}
|
6
|
+
|
7
|
+
Parameters:
|
8
|
+
- payment_stats: Payment statistics object with counts and totals
|
9
|
+
{% endcomment %}
|
10
|
+
|
11
|
+
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6">
|
12
|
+
<!-- Total Payments -->
|
13
|
+
{% include 'payments/components/status_card.html' with title="Total Payments" value=payment_stats.total_payments_count|default:0 icon="payments" status="info" %}
|
14
|
+
|
15
|
+
<!-- Pending Payments -->
|
16
|
+
{% include 'payments/components/status_card.html' with title="Pending" value=payment_stats.pending_payments_count|default:0 icon="pending" status="warning" description=payment_stats.confirming_payments_count|add:" confirming"|default:"" %}
|
17
|
+
|
18
|
+
<!-- Completed Payments -->
|
19
|
+
{% include 'payments/components/status_card.html' with title="Completed" value=payment_stats.completed_payments_count|default:0 icon="check_circle" status="success" description=payment_stats.success_rate|floatformat:1|add:"% success rate"|default:"" %}
|
20
|
+
|
21
|
+
<!-- Total Volume -->
|
22
|
+
{% include 'payments/components/status_card.html' with title="Total Volume" value="$"|add:payment_stats.total_volume|floatformat:2|default:"0.00" icon="account_balance" status="info" description=payment_stats.failed_payments_count|add:" failed"|default:"" %}
|
23
|
+
</div>
|
24
|
+
|
25
|
+
<!-- Quick Actions Bar -->
|
26
|
+
<div class="bg-white dark:bg-gray-800 rounded-lg shadow border border-gray-200 dark:border-gray-700 p-4 mt-6">
|
27
|
+
<div class="flex items-center justify-between">
|
28
|
+
<div class="flex items-center space-x-4">
|
29
|
+
<span class="text-sm font-medium text-gray-700 dark:text-gray-300">Quick Actions:</span>
|
30
|
+
<div class="flex space-x-2">
|
31
|
+
<a href="{% url 'cfg_payments_admin:payment-form' %}"
|
32
|
+
class="inline-flex items-center px-3 py-1.5 text-xs bg-blue-600 text-white hover:bg-blue-700 dark:bg-blue-500 dark:hover:bg-blue-600 rounded-md transition-colors">
|
33
|
+
<span class="material-icons-outlined text-sm mr-1">add</span>
|
34
|
+
New Payment
|
35
|
+
</a>
|
36
|
+
<button onclick="window.location.reload()"
|
37
|
+
class="inline-flex items-center px-3 py-1.5 text-xs border border-gray-300 dark:border-gray-500 text-gray-700 dark:text-gray-200 bg-white dark:bg-gray-700 hover:bg-gray-50 dark:hover:bg-gray-600 rounded-md transition-colors">
|
38
|
+
<span class="material-icons-outlined text-sm mr-1">refresh</span>
|
39
|
+
Refresh
|
40
|
+
</button>
|
41
|
+
<button onclick="exportPayments()"
|
42
|
+
class="inline-flex items-center px-3 py-1.5 text-xs border border-gray-300 dark:border-gray-500 text-gray-700 dark:text-gray-200 bg-white dark:bg-gray-700 hover:bg-gray-50 dark:hover:bg-gray-600 rounded-md transition-colors">
|
43
|
+
<span class="material-icons-outlined text-sm mr-1">download</span>
|
44
|
+
Export
|
45
|
+
</button>
|
46
|
+
</div>
|
47
|
+
</div>
|
48
|
+
|
49
|
+
<!-- Live Status Indicator -->
|
50
|
+
<div class="flex items-center space-x-2">
|
51
|
+
<div class="inline-flex items-center px-2 py-1 rounded-full text-xs font-medium bg-green-100 text-green-800 dark:bg-green-900/20 dark:text-green-400">
|
52
|
+
<div class="w-2 h-2 bg-green-500 rounded-full mr-2 animate-pulse"></div>
|
53
|
+
Live Updates
|
54
|
+
</div>
|
55
|
+
<span class="text-xs text-gray-500 dark:text-gray-400">
|
56
|
+
Last update: <span id="stats-last-update">{% now "H:i:s" %}</span>
|
57
|
+
</span>
|
58
|
+
</div>
|
59
|
+
</div>
|
60
|
+
</div>
|
61
|
+
|
62
|
+
<script>
|
63
|
+
// Export payments functionality
|
64
|
+
function exportPayments() {
|
65
|
+
// TODO: Implement export functionality
|
66
|
+
alert('Export functionality not implemented yet');
|
67
|
+
}
|
68
|
+
|
69
|
+
// Update timestamp every minute
|
70
|
+
setInterval(function() {
|
71
|
+
const now = new Date();
|
72
|
+
const timeString = now.toLocaleTimeString('en-US', {
|
73
|
+
hour12: false,
|
74
|
+
hour: '2-digit',
|
75
|
+
minute: '2-digit',
|
76
|
+
second: '2-digit'
|
77
|
+
});
|
78
|
+
const element = document.getElementById('stats-last-update');
|
79
|
+
if (element) {
|
80
|
+
element.textContent = timeString;
|
81
|
+
}
|
82
|
+
}, 60000);
|
83
|
+
</script>
|