django-cfg 1.3.5__py3-none-any.whl → 1.3.9__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 +258 -0
- django_cfg/apps/payments/admin/payments_admin.py +171 -461
- 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 +105 -34
- django_cfg/apps/payments/admin_interface/templates/payments/payment_form.html +12 -16
- django_cfg/apps/payments/admin_interface/views/__init__.py +2 -0
- django_cfg/apps/payments/admin_interface/views/api/webhook_admin.py +13 -18
- 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/0002_currency_usd_rate_currency_usd_rate_updated_at.py +26 -0
- django_cfg/apps/payments/migrations/0003_remove_provider_currency_fields.py +28 -0
- django_cfg/apps/payments/migrations/0004_add_reserved_usd_field.py +30 -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/services/core/currency_service.py +35 -28
- django_cfg/apps/payments/services/core/payment_service.py +1 -1
- django_cfg/apps/payments/services/providers/__init__.py +3 -0
- django_cfg/apps/payments/services/providers/base.py +95 -39
- django_cfg/apps/payments/services/providers/models/__init__.py +40 -0
- django_cfg/apps/payments/services/providers/models/base.py +122 -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.py → nowpayments/provider.py} +240 -209
- django_cfg/apps/payments/services/providers/nowpayments/sync.py +196 -0
- django_cfg/apps/payments/services/providers/registry.py +4 -32
- django_cfg/apps/payments/services/providers/sync_service.py +277 -0
- django_cfg/apps/payments/static/payments/js/api-client.js +23 -5
- django_cfg/apps/payments/static/payments/js/payment-form.js +65 -8
- 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/urls_admin.py +1 -1
- django_cfg/apps/payments/views/api/currencies.py +5 -5
- django_cfg/apps/payments/views/overview/services.py +2 -2
- django_cfg/apps/payments/views/serializers/currencies.py +4 -3
- 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/urls.py +1 -2
- django_cfg/config.py +1 -1
- django_cfg/core/config.py +10 -5
- django_cfg/core/generation.py +1 -1
- django_cfg/management/commands/__init__.py +13 -1
- django_cfg/management/commands/app_agent_diagnose.py +470 -0
- django_cfg/management/commands/app_agent_generate.py +342 -0
- django_cfg/management/commands/app_agent_info.py +308 -0
- 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/middleware/__init__.py +0 -2
- django_cfg/models/api_keys.py +115 -0
- 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_app_agent/__init__.py +87 -0
- django_cfg/modules/django_app_agent/agents/__init__.py +40 -0
- django_cfg/modules/django_app_agent/agents/base/__init__.py +24 -0
- django_cfg/modules/django_app_agent/agents/base/agent.py +354 -0
- django_cfg/modules/django_app_agent/agents/base/context.py +236 -0
- django_cfg/modules/django_app_agent/agents/base/executor.py +430 -0
- django_cfg/modules/django_app_agent/agents/generation/__init__.py +12 -0
- django_cfg/modules/django_app_agent/agents/generation/app_generator/__init__.py +15 -0
- django_cfg/modules/django_app_agent/agents/generation/app_generator/config_validator.py +147 -0
- django_cfg/modules/django_app_agent/agents/generation/app_generator/main.py +99 -0
- django_cfg/modules/django_app_agent/agents/generation/app_generator/models.py +32 -0
- django_cfg/modules/django_app_agent/agents/generation/app_generator/prompt_manager.py +290 -0
- django_cfg/modules/django_app_agent/agents/interfaces.py +376 -0
- django_cfg/modules/django_app_agent/core/__init__.py +33 -0
- django_cfg/modules/django_app_agent/core/config.py +300 -0
- django_cfg/modules/django_app_agent/core/exceptions.py +359 -0
- django_cfg/modules/django_app_agent/models/__init__.py +71 -0
- django_cfg/modules/django_app_agent/models/base.py +283 -0
- django_cfg/modules/django_app_agent/models/context.py +496 -0
- django_cfg/modules/django_app_agent/models/enums.py +481 -0
- django_cfg/modules/django_app_agent/models/requests.py +500 -0
- django_cfg/modules/django_app_agent/models/responses.py +585 -0
- django_cfg/modules/django_app_agent/pytest.ini +6 -0
- django_cfg/modules/django_app_agent/services/__init__.py +42 -0
- django_cfg/modules/django_app_agent/services/app_generator/__init__.py +30 -0
- django_cfg/modules/django_app_agent/services/app_generator/ai_integration.py +133 -0
- django_cfg/modules/django_app_agent/services/app_generator/context.py +40 -0
- django_cfg/modules/django_app_agent/services/app_generator/main.py +202 -0
- django_cfg/modules/django_app_agent/services/app_generator/structure.py +316 -0
- django_cfg/modules/django_app_agent/services/app_generator/validation.py +125 -0
- django_cfg/modules/django_app_agent/services/base.py +437 -0
- django_cfg/modules/django_app_agent/services/context_builder/__init__.py +34 -0
- django_cfg/modules/django_app_agent/services/context_builder/code_extractor.py +141 -0
- django_cfg/modules/django_app_agent/services/context_builder/context_generator.py +276 -0
- django_cfg/modules/django_app_agent/services/context_builder/main.py +272 -0
- django_cfg/modules/django_app_agent/services/context_builder/models.py +40 -0
- django_cfg/modules/django_app_agent/services/context_builder/pattern_analyzer.py +85 -0
- django_cfg/modules/django_app_agent/services/project_scanner/__init__.py +31 -0
- django_cfg/modules/django_app_agent/services/project_scanner/app_discovery.py +311 -0
- django_cfg/modules/django_app_agent/services/project_scanner/main.py +221 -0
- django_cfg/modules/django_app_agent/services/project_scanner/models.py +59 -0
- django_cfg/modules/django_app_agent/services/project_scanner/pattern_detection.py +94 -0
- django_cfg/modules/django_app_agent/services/questioning_service/__init__.py +28 -0
- django_cfg/modules/django_app_agent/services/questioning_service/main.py +273 -0
- django_cfg/modules/django_app_agent/services/questioning_service/models.py +111 -0
- django_cfg/modules/django_app_agent/services/questioning_service/question_generator.py +251 -0
- django_cfg/modules/django_app_agent/services/questioning_service/response_processor.py +347 -0
- django_cfg/modules/django_app_agent/services/questioning_service/session_manager.py +356 -0
- django_cfg/modules/django_app_agent/services/report_service.py +332 -0
- django_cfg/modules/django_app_agent/services/template_manager/__init__.py +18 -0
- django_cfg/modules/django_app_agent/services/template_manager/jinja_engine.py +236 -0
- django_cfg/modules/django_app_agent/services/template_manager/main.py +159 -0
- django_cfg/modules/django_app_agent/services/template_manager/models.py +36 -0
- django_cfg/modules/django_app_agent/services/template_manager/template_loader.py +100 -0
- django_cfg/modules/django_app_agent/services/template_manager/templates/admin.py.j2 +105 -0
- django_cfg/modules/django_app_agent/services/template_manager/templates/apps.py.j2 +31 -0
- django_cfg/modules/django_app_agent/services/template_manager/templates/cfg_config.py.j2 +44 -0
- django_cfg/modules/django_app_agent/services/template_manager/templates/cfg_module.py.j2 +81 -0
- django_cfg/modules/django_app_agent/services/template_manager/templates/forms.py.j2 +107 -0
- django_cfg/modules/django_app_agent/services/template_manager/templates/models.py.j2 +139 -0
- django_cfg/modules/django_app_agent/services/template_manager/templates/serializers.py.j2 +91 -0
- django_cfg/modules/django_app_agent/services/template_manager/templates/tests.py.j2 +195 -0
- django_cfg/modules/django_app_agent/services/template_manager/templates/urls.py.j2 +35 -0
- django_cfg/modules/django_app_agent/services/template_manager/templates/views.py.j2 +211 -0
- django_cfg/modules/django_app_agent/services/template_manager/variable_processor.py +200 -0
- django_cfg/modules/django_app_agent/services/validation_service/__init__.py +25 -0
- django_cfg/modules/django_app_agent/services/validation_service/django_validator.py +333 -0
- django_cfg/modules/django_app_agent/services/validation_service/main.py +242 -0
- django_cfg/modules/django_app_agent/services/validation_service/models.py +66 -0
- django_cfg/modules/django_app_agent/services/validation_service/quality_validator.py +352 -0
- django_cfg/modules/django_app_agent/services/validation_service/security_validator.py +272 -0
- django_cfg/modules/django_app_agent/services/validation_service/syntax_validator.py +203 -0
- django_cfg/modules/django_app_agent/ui/__init__.py +25 -0
- django_cfg/modules/django_app_agent/ui/cli.py +419 -0
- django_cfg/modules/django_app_agent/ui/rich_components.py +622 -0
- django_cfg/modules/django_app_agent/utils/__init__.py +38 -0
- django_cfg/modules/django_app_agent/utils/logging.py +360 -0
- django_cfg/modules/django_app_agent/utils/validation.py +417 -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_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 +3 -0
- django_cfg/registry/third_party.py +2 -2
- django_cfg/template_archive/django_sample.zip +0 -0
- {django_cfg-1.3.5.dist-info → django_cfg-1.3.9.dist-info}/METADATA +2 -1
- {django_cfg-1.3.5.dist-info → django_cfg-1.3.9.dist-info}/RECORD +224 -118
- 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/tasks/admin.py +0 -320
- 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.5.dist-info → django_cfg-1.3.9.dist-info}/WHEEL +0 -0
- {django_cfg-1.3.5.dist-info → django_cfg-1.3.9.dist-info}/entry_points.txt +0 -0
- {django_cfg-1.3.5.dist-info → django_cfg-1.3.9.dist-info}/licenses/LICENSE +0 -0
@@ -1,309 +0,0 @@
|
|
1
|
-
{% extends 'payments/base.html' %}
|
2
|
-
{% load static %}
|
3
|
-
{% load payment_tags %}
|
4
|
-
|
5
|
-
{% block page_title %}{{ page_title }}{% endblock %}
|
6
|
-
{% block page_subtitle %}{{ page_subtitle }}{% endblock %}
|
7
|
-
|
8
|
-
{% block content %}
|
9
|
-
<div x-data="paymentDashboard()" x-init="init()">
|
10
|
-
<!-- Statistics Cards -->
|
11
|
-
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8">
|
12
|
-
<!-- Total Payments -->
|
13
|
-
{% include 'payments/components/status_card.html' with title="Total Payments" value=stats.total_payments icon="payments" color_class="text-blue-600" description="All payment transactions" icon_bg_color="blue" %}
|
14
|
-
|
15
|
-
<!-- Completed Payments -->
|
16
|
-
{% include 'payments/components/status_card.html' with title="Completed" value=stats.completed_payments icon="check_circle" color_class="text-green-600" description="Successfully processed" icon_bg_color="green" status_icon="check_circle" %}
|
17
|
-
|
18
|
-
<!-- Pending Payments -->
|
19
|
-
{% include 'payments/components/status_card.html' with title="Pending" value=stats.pending_payments icon="schedule" color_class="text-yellow-600" description="Awaiting confirmation" icon_bg_color="yellow" status_icon="schedule" %}
|
20
|
-
|
21
|
-
<!-- Failed Payments -->
|
22
|
-
{% include 'payments/components/status_card.html' with title="Failed" value=stats.failed_payments icon="error" color_class="text-red-600" description="Processing failed" icon_bg_color="red" status_icon="error" %}
|
23
|
-
</div>
|
24
|
-
|
25
|
-
<!-- Total Amount Card -->
|
26
|
-
<div class="grid grid-cols-1 lg:grid-cols-3 gap-6 mb-8">
|
27
|
-
<div class="lg:col-span-1">
|
28
|
-
{% include 'payments/components/status_card.html' with title="Total Amount" value="$"|add:stats.total_amount icon="account_balance_wallet" color_class="text-purple-600" description="Total processed amount" icon_bg_color="purple" %}
|
29
|
-
</div>
|
30
|
-
|
31
|
-
<!-- Quick Actions -->
|
32
|
-
<div class="lg:col-span-2">
|
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
|
-
|
48
|
-
<a href="{% url 'cfg_payments_admin:payment-list' %}"
|
49
|
-
class="flex flex-col 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">
|
50
|
-
<span class="material-icons-outlined text-green-600 dark:text-green-400 mb-2">list</span>
|
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>
|
64
|
-
</a>
|
65
|
-
</div>
|
66
|
-
</div>
|
67
|
-
</div>
|
68
|
-
</div>
|
69
|
-
</div>
|
70
|
-
|
71
|
-
<!-- Recent Payments -->
|
72
|
-
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6">
|
73
|
-
<!-- Recent Payments List -->
|
74
|
-
<div class="payment-card">
|
75
|
-
<div class="payment-card-header">
|
76
|
-
<h3 class="font-medium text-gray-900 dark:text-white flex items-center">
|
77
|
-
<span class="material-icons-outlined mr-2">history</span>
|
78
|
-
Recent Payments
|
79
|
-
</h3>
|
80
|
-
<a href="{% url 'cfg_payments_admin:payment-list' %}"
|
81
|
-
class="text-sm text-blue-600 dark:text-blue-400 hover:text-blue-800 dark:hover:text-blue-300 flex items-center">
|
82
|
-
View All
|
83
|
-
<span class="material-icons-outlined ml-1 text-sm">arrow_forward</span>
|
84
|
-
</a>
|
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 }}
|
111
|
-
</div>
|
112
|
-
<div class="text-xs text-gray-500 dark:text-gray-400">
|
113
|
-
{{ payment.currency.code }} • {{ payment.provider|title }}
|
114
|
-
</div>
|
115
|
-
</div>
|
116
|
-
</div>
|
117
|
-
<div class="text-right">
|
118
|
-
<div class="text-xs text-gray-500 dark:text-gray-400">
|
119
|
-
{{ payment.created_at|timesince }} ago
|
120
|
-
</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
|
-
</div>
|
126
|
-
</div>
|
127
|
-
{% endfor %}
|
128
|
-
</div>
|
129
|
-
{% else %}
|
130
|
-
<div class="text-center py-8">
|
131
|
-
<span class="material-icons-outlined text-gray-400 text-4xl mb-2">payments</span>
|
132
|
-
<p class="text-gray-500 dark:text-gray-400">No payments yet</p>
|
133
|
-
<a href="{% url 'cfg_payments_admin:payment-create' %}"
|
134
|
-
class="inline-flex items-center mt-2 text-sm text-blue-600 dark:text-blue-400 hover:text-blue-800 dark:hover:text-blue-300">
|
135
|
-
<span class="material-icons-outlined mr-1 text-sm">add</span>
|
136
|
-
Create your first payment
|
137
|
-
</a>
|
138
|
-
</div>
|
139
|
-
{% endif %}
|
140
|
-
</div>
|
141
|
-
</div>
|
142
|
-
|
143
|
-
<!-- System Status -->
|
144
|
-
<div class="payment-card">
|
145
|
-
<div class="payment-card-header">
|
146
|
-
<h3 class="font-medium text-gray-900 dark:text-white flex items-center">
|
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>
|
165
|
-
|
166
|
-
<!-- Provider Status -->
|
167
|
-
<div class="flex items-center justify-between">
|
168
|
-
<div class="flex items-center space-x-2">
|
169
|
-
<span class="material-icons-outlined text-green-600 dark:text-green-400 text-sm">account_balance</span>
|
170
|
-
<span class="text-sm text-gray-900 dark:text-white">Payment Providers</span>
|
171
|
-
</div>
|
172
|
-
<span class="text-xs text-green-600 dark:text-green-400 font-medium" x-text="systemStatus.providers || 'Checking...'">Checking...</span>
|
173
|
-
</div>
|
174
|
-
|
175
|
-
<!-- Database Status -->
|
176
|
-
<div class="flex items-center justify-between">
|
177
|
-
<div class="flex items-center space-x-2">
|
178
|
-
<span class="material-icons-outlined text-green-600 dark:text-green-400 text-sm">storage</span>
|
179
|
-
<span class="text-sm text-gray-900 dark:text-white">Database</span>
|
180
|
-
</div>
|
181
|
-
<span class="text-xs text-green-600 dark:text-green-400 font-medium">Connected</span>
|
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>
|
191
|
-
</div>
|
192
|
-
</div>
|
193
|
-
|
194
|
-
<!-- System Actions -->
|
195
|
-
<div class="mt-6 pt-4 border-t border-gray-200 dark:border-gray-600">
|
196
|
-
<div class="flex space-x-2">
|
197
|
-
<button @click="checkSystemHealth()"
|
198
|
-
class="flex-1 btn btn-outline text-xs py-2">
|
199
|
-
<span class="material-icons-outlined mr-1 text-sm">health_and_safety</span>
|
200
|
-
Health Check
|
201
|
-
</button>
|
202
|
-
<a href="{% url 'cfg_payments_admin:webhook-dashboard' %}"
|
203
|
-
class="flex-1 btn btn-outline text-xs py-2 text-center">
|
204
|
-
<span class="material-icons-outlined mr-1 text-sm">settings</span>
|
205
|
-
Configure
|
206
|
-
</a>
|
207
|
-
</div>
|
208
|
-
</div>
|
209
|
-
</div>
|
210
|
-
</div>
|
211
|
-
</div>
|
212
|
-
|
213
|
-
<!-- Ngrok Status and Development Tools -->
|
214
|
-
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-8">
|
215
|
-
<!-- Ngrok Status -->
|
216
|
-
{% include 'payments/components/ngrok_status_card.html' %}
|
217
|
-
|
218
|
-
<!-- Development Tools -->
|
219
|
-
{% include 'payments/components/dev_tool_card.html' %}
|
220
|
-
</div>
|
221
|
-
|
222
|
-
<!-- Loading Spinner Component -->
|
223
|
-
<div x-show="loading" x-cloak class="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50">
|
224
|
-
{% include 'payments/components/loading_spinner.html' %}
|
225
|
-
</div>
|
226
|
-
|
227
|
-
<!-- Notifications -->
|
228
|
-
<div x-show="notification.show" x-cloak
|
229
|
-
class="fixed top-4 right-4 z-50"
|
230
|
-
x-transition:enter="transition ease-out duration-300"
|
231
|
-
x-transition:enter-start="opacity-0 transform translate-x-full"
|
232
|
-
x-transition:enter-end="opacity-100 transform translate-x-0"
|
233
|
-
x-transition:leave="transition ease-in duration-200"
|
234
|
-
x-transition:leave-start="opacity-100 transform translate-x-0"
|
235
|
-
x-transition:leave-end="opacity-0 transform translate-x-full">
|
236
|
-
{% include 'payments/components/notification.html' with type="notification.type" message="notification.message" %}
|
237
|
-
</div>
|
238
|
-
</div>
|
239
|
-
{% endblock %}
|
240
|
-
|
241
|
-
{% block extra_js %}
|
242
|
-
<script>
|
243
|
-
function paymentDashboard() {
|
244
|
-
return {
|
245
|
-
loading: false,
|
246
|
-
refreshing: false,
|
247
|
-
systemStatus: {
|
248
|
-
providers: 'Active',
|
249
|
-
webhooks: 'Active'
|
250
|
-
},
|
251
|
-
notification: {
|
252
|
-
show: false,
|
253
|
-
type: 'info',
|
254
|
-
message: ''
|
255
|
-
},
|
256
|
-
|
257
|
-
init() {
|
258
|
-
// Initialize dashboard
|
259
|
-
this.loadSystemStatus();
|
260
|
-
},
|
261
|
-
|
262
|
-
async loadSystemStatus() {
|
263
|
-
try {
|
264
|
-
// This would typically fetch from an API endpoint
|
265
|
-
// For now, we'll simulate the data
|
266
|
-
this.systemStatus = {
|
267
|
-
providers: 'Active (1/1)',
|
268
|
-
webhooks: 'Active'
|
269
|
-
};
|
270
|
-
} catch (error) {
|
271
|
-
console.error('Failed to load system status:', error);
|
272
|
-
}
|
273
|
-
},
|
274
|
-
|
275
|
-
async refreshSystemStatus() {
|
276
|
-
this.refreshing = true;
|
277
|
-
try {
|
278
|
-
await this.loadSystemStatus();
|
279
|
-
this.showNotification('success', 'System status refreshed');
|
280
|
-
} catch (error) {
|
281
|
-
this.showNotification('error', 'Failed to refresh system status');
|
282
|
-
} finally {
|
283
|
-
this.refreshing = false;
|
284
|
-
}
|
285
|
-
},
|
286
|
-
|
287
|
-
async checkSystemHealth() {
|
288
|
-
this.loading = true;
|
289
|
-
try {
|
290
|
-
// Simulate health check API call
|
291
|
-
await new Promise(resolve => setTimeout(resolve, 1500));
|
292
|
-
this.showNotification('success', 'System health check completed - All systems operational');
|
293
|
-
} catch (error) {
|
294
|
-
this.showNotification('error', 'Health check failed');
|
295
|
-
} finally {
|
296
|
-
this.loading = false;
|
297
|
-
}
|
298
|
-
},
|
299
|
-
|
300
|
-
showNotification(type, message) {
|
301
|
-
this.notification = { show: true, type, message };
|
302
|
-
setTimeout(() => {
|
303
|
-
this.notification.show = false;
|
304
|
-
}, 5000);
|
305
|
-
}
|
306
|
-
};
|
307
|
-
}
|
308
|
-
</script>
|
309
|
-
{% endblock %}
|
@@ -1,303 +0,0 @@
|
|
1
|
-
{% extends 'payments/base.html' %}
|
2
|
-
{% load static %}
|
3
|
-
|
4
|
-
{% block title %}Create Payment - Universal Payment System{% endblock %}
|
5
|
-
|
6
|
-
{% block page_title %}Create New Payment{% endblock %}
|
7
|
-
{% block page_subtitle %}Process a payment through our universal payment system{% endblock %}
|
8
|
-
|
9
|
-
{% block extra_css %}
|
10
|
-
<style>
|
11
|
-
.currency-option {
|
12
|
-
display: flex;
|
13
|
-
align-items: center;
|
14
|
-
padding: 8px 12px;
|
15
|
-
border-radius: 6px;
|
16
|
-
transition: all 0.2s ease;
|
17
|
-
}
|
18
|
-
|
19
|
-
.currency-option:hover {
|
20
|
-
background-color: rgba(59, 130, 246, 0.1);
|
21
|
-
}
|
22
|
-
|
23
|
-
.currency-icon {
|
24
|
-
width: 24px;
|
25
|
-
height: 24px;
|
26
|
-
border-radius: 50%;
|
27
|
-
margin-right: 8px;
|
28
|
-
display: flex;
|
29
|
-
align-items: center;
|
30
|
-
justify-content: center;
|
31
|
-
font-size: 12px;
|
32
|
-
}
|
33
|
-
|
34
|
-
.provider-card {
|
35
|
-
border: 2px solid transparent;
|
36
|
-
cursor: pointer;
|
37
|
-
transition: all 0.2s ease;
|
38
|
-
}
|
39
|
-
|
40
|
-
.provider-card:hover {
|
41
|
-
border-color: rgba(59, 130, 246, 0.3);
|
42
|
-
transform: translateY(-1px);
|
43
|
-
}
|
44
|
-
|
45
|
-
.provider-card.selected {
|
46
|
-
border-color: #3b82f6;
|
47
|
-
background-color: rgba(59, 130, 246, 0.05);
|
48
|
-
}
|
49
|
-
</style>
|
50
|
-
{% endblock %}
|
51
|
-
|
52
|
-
{% block content %}
|
53
|
-
<div x-data="paymentForm()" x-init="init()" class="max-w-4xl mx-auto">
|
54
|
-
<!-- Progress Steps -->
|
55
|
-
<div class="mb-8">
|
56
|
-
<div class="flex items-center justify-center space-x-4">
|
57
|
-
<div class="flex items-center">
|
58
|
-
<div class="w-8 h-8 bg-blue-600 text-white rounded-full flex items-center justify-center">
|
59
|
-
<span class="material-icons-outlined text-sm">payment</span>
|
60
|
-
</div>
|
61
|
-
<span class="ml-2 text-sm font-medium text-blue-600">Payment Details</span>
|
62
|
-
</div>
|
63
|
-
<div class="w-16 h-0.5 bg-gray-300"></div>
|
64
|
-
<div class="flex items-center">
|
65
|
-
<div class="w-8 h-8 bg-gray-300 text-gray-500 rounded-full flex items-center justify-center">
|
66
|
-
<span class="material-icons-outlined text-sm">account_balance</span>
|
67
|
-
</div>
|
68
|
-
<span class="ml-2 text-sm font-medium text-gray-500">Provider Selection</span>
|
69
|
-
</div>
|
70
|
-
<div class="w-16 h-0.5 bg-gray-300"></div>
|
71
|
-
<div class="flex items-center">
|
72
|
-
<div class="w-8 h-8 bg-gray-300 text-gray-500 rounded-full flex items-center justify-center">
|
73
|
-
<span class="material-icons-outlined text-sm">check_circle</span>
|
74
|
-
</div>
|
75
|
-
<span class="ml-2 text-sm font-medium text-gray-500">Confirmation</span>
|
76
|
-
</div>
|
77
|
-
</div>
|
78
|
-
</div>
|
79
|
-
|
80
|
-
<form @submit.prevent="submitForm()" class="space-y-8">
|
81
|
-
{% csrf_token %}
|
82
|
-
|
83
|
-
<!-- Payment Details Card -->
|
84
|
-
<div class="payment-card">
|
85
|
-
<div class="payment-card-header">
|
86
|
-
<h2 class="payment-card-title">
|
87
|
-
<span class="material-icons-outlined">payments</span>
|
88
|
-
Payment Details
|
89
|
-
</h2>
|
90
|
-
</div>
|
91
|
-
|
92
|
-
<div class="payment-card-content">
|
93
|
-
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
|
94
|
-
<!-- Amount -->
|
95
|
-
<div class="form-group">
|
96
|
-
<label class="form-label">
|
97
|
-
<span class="material-icons-outlined mr-1 text-sm">attach_money</span>
|
98
|
-
Amount
|
99
|
-
</label>
|
100
|
-
<div class="relative">
|
101
|
-
<input type="number"
|
102
|
-
x-model="formData.amount"
|
103
|
-
step="0.01"
|
104
|
-
min="0.01"
|
105
|
-
class="form-input pl-10"
|
106
|
-
:class="{ 'border-red-500': errors.amount }"
|
107
|
-
placeholder="0.00"
|
108
|
-
required>
|
109
|
-
<div class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none">
|
110
|
-
<span class="text-gray-500 text-sm">$</span>
|
111
|
-
</div>
|
112
|
-
</div>
|
113
|
-
<div x-show="errors.amount" class="form-error" x-text="errors.amount"></div>
|
114
|
-
<div class="form-help">Minimum amount: $0.01</div>
|
115
|
-
</div>
|
116
|
-
|
117
|
-
<!-- Currency -->
|
118
|
-
<div class="form-group">
|
119
|
-
<label class="form-label">
|
120
|
-
<span class="material-icons-outlined mr-1 text-sm">currency_exchange</span>
|
121
|
-
Currency
|
122
|
-
</label>
|
123
|
-
<select x-model="formData.currency"
|
124
|
-
class="form-select"
|
125
|
-
:class="{ 'border-red-500': errors.currency }"
|
126
|
-
required>
|
127
|
-
<option value="">Select currency...</option>
|
128
|
-
<template x-for="currency in currencies" :key="currency.code">
|
129
|
-
<option :value="currency.code" x-text="`${currency.code} - ${currency.name}`"></option>
|
130
|
-
</template>
|
131
|
-
</select>
|
132
|
-
<div x-show="errors.currency" class="form-error" x-text="errors.currency"></div>
|
133
|
-
<div class="form-help">Choose the currency for your payment</div>
|
134
|
-
</div>
|
135
|
-
</div>
|
136
|
-
|
137
|
-
<!-- Callback URL (Optional) -->
|
138
|
-
<div class="form-group">
|
139
|
-
<label class="form-label">
|
140
|
-
<span class="material-icons-outlined mr-1 text-sm">webhook</span>
|
141
|
-
Callback URL (Optional)
|
142
|
-
</label>
|
143
|
-
<input type="url"
|
144
|
-
x-model="formData.callback_url"
|
145
|
-
class="form-input"
|
146
|
-
:class="{ 'border-red-500': errors.callback_url }"
|
147
|
-
placeholder="https://your-site.com/webhook">
|
148
|
-
<div x-show="errors.callback_url" class="form-error" x-text="errors.callback_url"></div>
|
149
|
-
<div class="form-help">URL to receive payment status updates</div>
|
150
|
-
</div>
|
151
|
-
</div>
|
152
|
-
</div>
|
153
|
-
|
154
|
-
<!-- Provider Selection Card -->
|
155
|
-
<div class="payment-card">
|
156
|
-
<div class="payment-card-header">
|
157
|
-
<h2 class="payment-card-title">
|
158
|
-
<span class="material-icons-outlined">account_balance</span>
|
159
|
-
Payment Provider
|
160
|
-
</h2>
|
161
|
-
</div>
|
162
|
-
|
163
|
-
<div class="payment-card-content">
|
164
|
-
<div x-show="providers.length === 0" class="text-center py-8">
|
165
|
-
<div class="material-icons-outlined text-gray-400 text-4xl mb-4">account_balance</div>
|
166
|
-
<p class="text-gray-500 dark:text-gray-400">Loading providers...</p>
|
167
|
-
</div>
|
168
|
-
|
169
|
-
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
|
170
|
-
<template x-for="provider in providers" :key="provider.name">
|
171
|
-
<div class="provider-card payment-card p-4"
|
172
|
-
:class="{ 'selected': formData.provider === provider.name }"
|
173
|
-
@click="formData.provider = provider.name">
|
174
|
-
<div class="flex items-center mb-3">
|
175
|
-
<div class="w-10 h-10 bg-blue-100 dark:bg-blue-900 rounded-full flex items-center justify-center mr-3">
|
176
|
-
<span class="material-icons-outlined text-blue-600 dark:text-blue-400 text-sm" x-text="provider.icon || 'account_balance'"></span>
|
177
|
-
</div>
|
178
|
-
<div>
|
179
|
-
<h3 class="font-medium text-gray-900 dark:text-white" x-text="provider.display_name"></h3>
|
180
|
-
<p class="text-xs text-gray-500 dark:text-gray-400">Payment Gateway</p>
|
181
|
-
</div>
|
182
|
-
</div>
|
183
|
-
|
184
|
-
<div class="space-y-2 text-xs text-gray-600 dark:text-gray-400">
|
185
|
-
<div class="flex items-center">
|
186
|
-
<span class="material-icons-outlined mr-1" style="font-size: 14px;">security</span>
|
187
|
-
<span>Secure Processing</span>
|
188
|
-
</div>
|
189
|
-
<div class="flex items-center">
|
190
|
-
<span class="material-icons-outlined mr-1" style="font-size: 14px;">speed</span>
|
191
|
-
<span>Fast Confirmation</span>
|
192
|
-
</div>
|
193
|
-
<div class="flex items-center">
|
194
|
-
<span class="material-icons-outlined mr-1" style="font-size: 14px;">support</span>
|
195
|
-
<span>24/7 Support</span>
|
196
|
-
</div>
|
197
|
-
</div>
|
198
|
-
|
199
|
-
<div class="mt-3 pt-3 border-t border-gray-200 dark:border-gray-600">
|
200
|
-
<div class="flex items-center justify-between">
|
201
|
-
<span class="text-xs text-gray-500">Status:</span>
|
202
|
-
<span class="status-badge success text-xs">Active</span>
|
203
|
-
</div>
|
204
|
-
</div>
|
205
|
-
</div>
|
206
|
-
</template>
|
207
|
-
</div>
|
208
|
-
|
209
|
-
<div x-show="errors.provider" class="form-error mt-4" x-text="errors.provider"></div>
|
210
|
-
<div class="form-help mt-4">Select a payment provider to process your transaction</div>
|
211
|
-
</div>
|
212
|
-
</div>
|
213
|
-
|
214
|
-
<!-- Summary Card -->
|
215
|
-
<div x-show="formData.amount && formData.currency && formData.provider" class="payment-card">
|
216
|
-
<div class="payment-card-header">
|
217
|
-
<h2 class="payment-card-title">
|
218
|
-
<span class="material-icons-outlined">receipt</span>
|
219
|
-
Payment Summary
|
220
|
-
</h2>
|
221
|
-
</div>
|
222
|
-
|
223
|
-
<div class="payment-card-content">
|
224
|
-
<div class="space-y-3">
|
225
|
-
<div class="flex justify-between items-center">
|
226
|
-
<span class="text-gray-600 dark:text-gray-400">Amount:</span>
|
227
|
-
<span class="font-medium" x-text="PaymentSystem.Utils.formatCurrency(formData.amount, formData.currency)"></span>
|
228
|
-
</div>
|
229
|
-
<div class="flex justify-between items-center">
|
230
|
-
<span class="text-gray-600 dark:text-gray-400">Currency:</span>
|
231
|
-
<span class="font-medium" x-text="formData.currency"></span>
|
232
|
-
</div>
|
233
|
-
<div class="flex justify-between items-center">
|
234
|
-
<span class="text-gray-600 dark:text-gray-400">Provider:</span>
|
235
|
-
<span class="font-medium" x-text="providers.find(p => p.name === formData.provider)?.display_name"></span>
|
236
|
-
</div>
|
237
|
-
<div x-show="formData.callback_url" class="flex justify-between items-center">
|
238
|
-
<span class="text-gray-600 dark:text-gray-400">Callback URL:</span>
|
239
|
-
<span class="font-medium text-xs break-all" x-text="formData.callback_url"></span>
|
240
|
-
</div>
|
241
|
-
</div>
|
242
|
-
</div>
|
243
|
-
</div>
|
244
|
-
|
245
|
-
<!-- Action Buttons -->
|
246
|
-
<div class="flex justify-between items-center">
|
247
|
-
<a href="{% url 'cfg_payments_admin:webhook-dashboard' %}" class="btn-outline">
|
248
|
-
<span class="material-icons-outlined">arrow_back</span>
|
249
|
-
Back to Dashboard
|
250
|
-
</a>
|
251
|
-
|
252
|
-
<button type="submit"
|
253
|
-
:disabled="loading || !formData.amount || !formData.currency || !formData.provider"
|
254
|
-
class="btn-primary"
|
255
|
-
:class="{ 'opacity-50 cursor-not-allowed': loading || !formData.amount || !formData.currency || !formData.provider }">
|
256
|
-
<span x-show="!loading" class="material-icons-outlined">payment</span>
|
257
|
-
<span x-show="loading" class="loading-spinner sm mr-2"></span>
|
258
|
-
<span x-text="loading ? 'Creating Payment...' : 'Create Payment'"></span>
|
259
|
-
</button>
|
260
|
-
</div>
|
261
|
-
</form>
|
262
|
-
|
263
|
-
<!-- Loading Overlay -->
|
264
|
-
<div x-show="loading"
|
265
|
-
x-transition:enter="transition ease-out duration-300"
|
266
|
-
x-transition:enter-start="opacity-0"
|
267
|
-
x-transition:enter-end="opacity-100"
|
268
|
-
x-transition:leave="transition ease-in duration-200"
|
269
|
-
x-transition:leave-start="opacity-100"
|
270
|
-
x-transition:leave-end="opacity-0"
|
271
|
-
class="fixed inset-0 bg-gray-600 bg-opacity-50 flex items-center justify-center z-50">
|
272
|
-
<div class="bg-white dark:bg-gray-800 rounded-lg p-6 flex items-center space-x-4">
|
273
|
-
<div class="loading-spinner lg"></div>
|
274
|
-
<span class="text-gray-900 dark:text-white">Processing payment...</span>
|
275
|
-
</div>
|
276
|
-
</div>
|
277
|
-
</div>
|
278
|
-
{% endblock %}
|
279
|
-
|
280
|
-
{% block extra_js %}
|
281
|
-
<script>
|
282
|
-
// Add provider health check functions
|
283
|
-
function checkProviderHealth(providerName) {
|
284
|
-
PaymentSystem.Utils.showNotification(`Checking ${providerName} health...`, 'info', 'health_and_safety');
|
285
|
-
|
286
|
-
fetch(`/payments/api/providers/${providerName}/health/`)
|
287
|
-
.then(response => response.json())
|
288
|
-
.then(data => {
|
289
|
-
const message = data.healthy ? `${providerName} is healthy` : `${providerName} has issues`;
|
290
|
-
const type = data.healthy ? 'success' : 'error';
|
291
|
-
PaymentSystem.Utils.showNotification(message, type, data.healthy ? 'check_circle' : 'error');
|
292
|
-
})
|
293
|
-
.catch(error => {
|
294
|
-
PaymentSystem.Utils.showNotification('Health check failed', 'error', 'error');
|
295
|
-
});
|
296
|
-
}
|
297
|
-
|
298
|
-
function testProvider(providerName) {
|
299
|
-
PaymentSystem.Utils.showNotification(`Testing ${providerName}...`, 'info', 'play_arrow');
|
300
|
-
// This would trigger the test modal or direct test
|
301
|
-
}
|
302
|
-
</script>
|
303
|
-
{% endblock %}
|