django-cfg 1.2.31__py3-none-any.whl → 1.3.1__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/api/health/views.py +4 -2
- django_cfg/apps/knowbase/config/settings.py +16 -15
- django_cfg/apps/payments/README.md +326 -0
- django_cfg/apps/payments/admin/__init__.py +20 -10
- django_cfg/apps/payments/admin/api_keys_admin.py +521 -237
- django_cfg/apps/payments/admin/balance_admin.py +592 -297
- django_cfg/apps/payments/admin/currencies_admin.py +526 -222
- django_cfg/apps/payments/admin/filters.py +306 -199
- django_cfg/apps/payments/admin/payments_admin.py +465 -70
- django_cfg/apps/payments/admin/subscriptions_admin.py +578 -128
- django_cfg/apps/payments/admin_interface/__init__.py +18 -0
- django_cfg/apps/payments/admin_interface/templates/payments/base.html +162 -0
- django_cfg/apps/payments/admin_interface/templates/payments/components/dev_tool_card.html +38 -0
- django_cfg/apps/payments/admin_interface/templates/payments/components/loading_spinner.html +16 -0
- django_cfg/apps/payments/admin_interface/templates/payments/components/notification.html +27 -0
- django_cfg/apps/payments/admin_interface/templates/payments/components/provider_card.html +86 -0
- django_cfg/apps/payments/admin_interface/templates/payments/components/status_card.html +39 -0
- django_cfg/apps/payments/admin_interface/templates/payments/currency_converter.html +382 -0
- django_cfg/apps/payments/admin_interface/templates/payments/payment_dashboard.html +300 -0
- django_cfg/apps/payments/admin_interface/templates/payments/payment_form.html +303 -0
- django_cfg/apps/payments/admin_interface/templates/payments/payment_list.html +382 -0
- django_cfg/apps/payments/admin_interface/templates/payments/payment_status.html +500 -0
- django_cfg/apps/payments/admin_interface/templates/payments/webhook_dashboard.html +594 -0
- django_cfg/apps/payments/admin_interface/views/__init__.py +23 -0
- django_cfg/apps/payments/admin_interface/views/payment_views.py +259 -0
- django_cfg/apps/payments/admin_interface/views/webhook_dashboard.py +37 -0
- django_cfg/apps/payments/apps.py +34 -9
- django_cfg/apps/payments/config/__init__.py +28 -51
- django_cfg/apps/payments/config/constance/__init__.py +22 -0
- django_cfg/apps/payments/config/constance/config_service.py +123 -0
- django_cfg/apps/payments/config/constance/fields.py +69 -0
- django_cfg/apps/payments/config/constance/settings.py +160 -0
- django_cfg/apps/payments/config/django_cfg_integration.py +202 -0
- django_cfg/apps/payments/config/helpers.py +130 -0
- django_cfg/apps/payments/management/__init__.py +1 -3
- django_cfg/apps/payments/management/commands/__init__.py +1 -3
- django_cfg/apps/payments/management/commands/manage_currencies.py +303 -151
- django_cfg/apps/payments/management/commands/manage_providers.py +333 -160
- django_cfg/apps/payments/middleware/__init__.py +3 -1
- django_cfg/apps/payments/middleware/api_access.py +329 -222
- django_cfg/apps/payments/middleware/rate_limiting.py +342 -152
- django_cfg/apps/payments/middleware/usage_tracking.py +249 -240
- django_cfg/apps/payments/migrations/0001_initial.py +708 -536
- django_cfg/apps/payments/models/__init__.py +13 -18
- django_cfg/apps/payments/models/api_keys.py +121 -43
- django_cfg/apps/payments/models/balance.py +150 -115
- django_cfg/apps/payments/models/base.py +68 -15
- django_cfg/apps/payments/models/currencies.py +172 -148
- django_cfg/apps/payments/models/managers/__init__.py +44 -0
- django_cfg/apps/payments/models/managers/api_key_managers.py +329 -0
- django_cfg/apps/payments/models/managers/balance_managers.py +599 -0
- django_cfg/apps/payments/models/managers/currency_managers.py +385 -0
- django_cfg/apps/payments/models/managers/payment_managers.py +511 -0
- django_cfg/apps/payments/models/managers/subscription_managers.py +641 -0
- django_cfg/apps/payments/models/payments.py +235 -285
- django_cfg/apps/payments/models/subscriptions.py +257 -177
- django_cfg/apps/payments/models/tariffs.py +147 -40
- django_cfg/apps/payments/services/__init__.py +209 -56
- django_cfg/apps/payments/services/cache/__init__.py +6 -6
- django_cfg/apps/payments/services/cache/{simple_cache.py → cache_service.py} +112 -12
- django_cfg/apps/payments/services/core/__init__.py +10 -6
- django_cfg/apps/payments/services/core/balance_service.py +435 -360
- django_cfg/apps/payments/services/core/base.py +166 -0
- django_cfg/apps/payments/services/core/currency_service.py +478 -0
- django_cfg/apps/payments/services/core/payment_service.py +346 -467
- django_cfg/apps/payments/services/core/subscription_service.py +425 -481
- django_cfg/apps/payments/services/core/webhook_service.py +410 -0
- django_cfg/apps/payments/services/integrations/__init__.py +29 -0
- django_cfg/apps/payments/services/integrations/ngrok_service.py +47 -0
- django_cfg/apps/payments/services/integrations/providers_config.py +107 -0
- django_cfg/apps/payments/services/providers/__init__.py +9 -14
- django_cfg/apps/payments/services/providers/base.py +234 -174
- django_cfg/apps/payments/services/providers/nowpayments.py +478 -0
- django_cfg/apps/payments/services/providers/registry.py +367 -301
- django_cfg/apps/payments/services/types/__init__.py +78 -0
- django_cfg/apps/payments/services/types/data.py +177 -0
- django_cfg/apps/payments/services/types/requests.py +150 -0
- django_cfg/apps/payments/services/types/responses.py +156 -0
- django_cfg/apps/payments/services/types/webhooks.py +232 -0
- django_cfg/apps/payments/signals/__init__.py +33 -8
- django_cfg/apps/payments/signals/api_key_signals.py +210 -129
- django_cfg/apps/payments/signals/balance_signals.py +174 -0
- django_cfg/apps/payments/signals/payment_signals.py +128 -103
- django_cfg/apps/payments/signals/subscription_signals.py +194 -142
- django_cfg/apps/payments/static/payments/css/components.css +380 -0
- django_cfg/apps/payments/static/payments/css/dashboard.css +188 -0
- django_cfg/apps/payments/static/payments/js/components.js +545 -0
- django_cfg/apps/payments/static/payments/js/utils.js +412 -0
- django_cfg/apps/payments/templatetags/__init__.py +1 -1
- django_cfg/apps/payments/templatetags/payment_tags.py +466 -0
- django_cfg/apps/payments/urls.py +45 -48
- django_cfg/apps/payments/urls_admin.py +33 -42
- django_cfg/apps/payments/views/api/__init__.py +101 -0
- django_cfg/apps/payments/views/api/api_keys.py +387 -0
- django_cfg/apps/payments/views/api/balances.py +381 -0
- django_cfg/apps/payments/views/api/base.py +298 -0
- django_cfg/apps/payments/views/api/currencies.py +402 -0
- django_cfg/apps/payments/views/api/payments.py +415 -0
- django_cfg/apps/payments/views/api/subscriptions.py +475 -0
- django_cfg/apps/payments/views/api/webhooks.py +476 -0
- django_cfg/apps/payments/views/serializers/__init__.py +99 -0
- django_cfg/apps/payments/views/serializers/api_keys.py +424 -0
- django_cfg/apps/payments/views/serializers/balances.py +300 -0
- django_cfg/apps/payments/views/serializers/currencies.py +335 -0
- django_cfg/apps/payments/views/serializers/payments.py +387 -0
- django_cfg/apps/payments/views/serializers/subscriptions.py +429 -0
- django_cfg/apps/payments/views/serializers/webhooks.py +137 -0
- django_cfg/config.py +1 -1
- django_cfg/core/config.py +40 -4
- django_cfg/core/generation.py +25 -4
- django_cfg/core/integration/README.md +363 -0
- django_cfg/core/integration/__init__.py +47 -0
- django_cfg/core/integration/commands_collector.py +239 -0
- django_cfg/core/integration/display/__init__.py +15 -0
- django_cfg/core/integration/display/base.py +157 -0
- django_cfg/core/integration/display/ngrok.py +164 -0
- django_cfg/core/integration/display/startup.py +815 -0
- django_cfg/core/integration/url_integration.py +123 -0
- django_cfg/core/integration/version_checker.py +160 -0
- django_cfg/management/commands/auto_generate.py +4 -0
- django_cfg/management/commands/check_settings.py +6 -0
- django_cfg/management/commands/clear_constance.py +5 -2
- django_cfg/management/commands/create_token.py +6 -0
- django_cfg/management/commands/list_urls.py +6 -0
- django_cfg/management/commands/migrate_all.py +6 -0
- django_cfg/management/commands/migrator.py +3 -0
- django_cfg/management/commands/rundramatiq.py +6 -0
- django_cfg/management/commands/runserver_ngrok.py +51 -29
- django_cfg/management/commands/script.py +6 -0
- django_cfg/management/commands/show_config.py +12 -2
- django_cfg/management/commands/show_urls.py +4 -0
- django_cfg/management/commands/superuser.py +6 -0
- django_cfg/management/commands/task_clear.py +4 -1
- django_cfg/management/commands/task_status.py +3 -1
- django_cfg/management/commands/test_email.py +3 -0
- django_cfg/management/commands/test_telegram.py +6 -0
- django_cfg/management/commands/test_twilio.py +6 -0
- django_cfg/management/commands/tree.py +6 -0
- django_cfg/management/commands/validate_config.py +155 -149
- django_cfg/models/constance.py +31 -11
- django_cfg/models/payments.py +175 -492
- django_cfg/modules/django_logger.py +160 -146
- django_cfg/modules/django_unfold/dashboard.py +64 -16
- django_cfg/registry/core.py +1 -0
- django_cfg/template_archive/django_sample.zip +0 -0
- django_cfg/utils/smart_defaults.py +222 -571
- django_cfg/utils/toolkit.py +51 -11
- {django_cfg-1.2.31.dist-info → django_cfg-1.3.1.dist-info}/METADATA +4 -1
- {django_cfg-1.2.31.dist-info → django_cfg-1.3.1.dist-info}/RECORD +153 -185
- django_cfg/apps/payments/__init__.py +0 -8
- django_cfg/apps/payments/admin/tariffs_admin.py +0 -199
- django_cfg/apps/payments/config/module.py +0 -70
- django_cfg/apps/payments/config/providers.py +0 -105
- django_cfg/apps/payments/config/settings.py +0 -96
- django_cfg/apps/payments/config/utils.py +0 -52
- django_cfg/apps/payments/decorators.py +0 -291
- django_cfg/apps/payments/management/commands/README.md +0 -146
- django_cfg/apps/payments/management/commands/currency_stats.py +0 -304
- django_cfg/apps/payments/managers/__init__.py +0 -23
- django_cfg/apps/payments/managers/api_key_manager.py +0 -35
- django_cfg/apps/payments/managers/balance_manager.py +0 -361
- django_cfg/apps/payments/managers/currency_manager.py +0 -306
- django_cfg/apps/payments/managers/payment_manager.py +0 -192
- django_cfg/apps/payments/managers/subscription_manager.py +0 -37
- django_cfg/apps/payments/managers/tariff_manager.py +0 -29
- django_cfg/apps/payments/migrations/0002_network_providercurrency_and_more.py +0 -241
- django_cfg/apps/payments/migrations/0003_add_usd_rate_cache.py +0 -30
- django_cfg/apps/payments/models/events.py +0 -73
- django_cfg/apps/payments/serializers/__init__.py +0 -57
- django_cfg/apps/payments/serializers/api_keys.py +0 -51
- django_cfg/apps/payments/serializers/balance.py +0 -59
- django_cfg/apps/payments/serializers/currencies.py +0 -63
- django_cfg/apps/payments/serializers/payments.py +0 -62
- django_cfg/apps/payments/serializers/subscriptions.py +0 -71
- django_cfg/apps/payments/serializers/tariffs.py +0 -56
- django_cfg/apps/payments/services/billing/__init__.py +0 -8
- django_cfg/apps/payments/services/cache/base.py +0 -30
- django_cfg/apps/payments/services/core/fallback_service.py +0 -432
- django_cfg/apps/payments/services/internal_types.py +0 -461
- django_cfg/apps/payments/services/middleware/__init__.py +0 -8
- django_cfg/apps/payments/services/monitoring/__init__.py +0 -22
- django_cfg/apps/payments/services/monitoring/api_schemas.py +0 -76
- django_cfg/apps/payments/services/monitoring/provider_health.py +0 -372
- django_cfg/apps/payments/services/providers/cryptapi/__init__.py +0 -4
- django_cfg/apps/payments/services/providers/cryptapi/config.py +0 -8
- django_cfg/apps/payments/services/providers/cryptapi/models.py +0 -192
- django_cfg/apps/payments/services/providers/cryptapi/provider.py +0 -439
- django_cfg/apps/payments/services/providers/cryptomus/__init__.py +0 -4
- django_cfg/apps/payments/services/providers/cryptomus/models.py +0 -176
- django_cfg/apps/payments/services/providers/cryptomus/provider.py +0 -429
- django_cfg/apps/payments/services/providers/cryptomus/provider_v2.py +0 -564
- django_cfg/apps/payments/services/providers/models/__init__.py +0 -34
- django_cfg/apps/payments/services/providers/models/currencies.py +0 -190
- django_cfg/apps/payments/services/providers/nowpayments/__init__.py +0 -4
- django_cfg/apps/payments/services/providers/nowpayments/models.py +0 -196
- django_cfg/apps/payments/services/providers/nowpayments/provider.py +0 -380
- django_cfg/apps/payments/services/providers/stripe/__init__.py +0 -4
- django_cfg/apps/payments/services/providers/stripe/models.py +0 -184
- django_cfg/apps/payments/services/providers/stripe/provider.py +0 -109
- django_cfg/apps/payments/services/security/__init__.py +0 -34
- django_cfg/apps/payments/services/security/error_handler.py +0 -635
- django_cfg/apps/payments/services/security/payment_notifications.py +0 -342
- django_cfg/apps/payments/services/security/webhook_validator.py +0 -474
- django_cfg/apps/payments/static/payments/css/payments.css +0 -340
- django_cfg/apps/payments/static/payments/js/notifications.js +0 -202
- django_cfg/apps/payments/static/payments/js/payment-utils.js +0 -318
- django_cfg/apps/payments/static/payments/js/theme.js +0 -86
- django_cfg/apps/payments/tasks/__init__.py +0 -12
- django_cfg/apps/payments/tasks/webhook_processing.py +0 -177
- django_cfg/apps/payments/templates/admin/payments/currency/change_list.html +0 -50
- django_cfg/apps/payments/templates/payments/base.html +0 -182
- django_cfg/apps/payments/templates/payments/components/payment_card.html +0 -201
- django_cfg/apps/payments/templates/payments/components/payment_qr_code.html +0 -109
- django_cfg/apps/payments/templates/payments/components/progress_bar.html +0 -43
- django_cfg/apps/payments/templates/payments/components/provider_stats.html +0 -40
- django_cfg/apps/payments/templates/payments/components/status_badge.html +0 -34
- django_cfg/apps/payments/templates/payments/components/status_overview.html +0 -148
- django_cfg/apps/payments/templates/payments/dashboard.html +0 -258
- django_cfg/apps/payments/templates/payments/dashboard_simple_test.html +0 -35
- django_cfg/apps/payments/templates/payments/payment_create.html +0 -579
- django_cfg/apps/payments/templates/payments/payment_detail.html +0 -373
- django_cfg/apps/payments/templates/payments/payment_list.html +0 -354
- django_cfg/apps/payments/templates/payments/stats.html +0 -261
- django_cfg/apps/payments/templates/payments/test.html +0 -213
- django_cfg/apps/payments/templatetags/payments_tags.py +0 -315
- django_cfg/apps/payments/utils/__init__.py +0 -43
- django_cfg/apps/payments/utils/billing_utils.py +0 -342
- django_cfg/apps/payments/utils/config_utils.py +0 -239
- django_cfg/apps/payments/utils/middleware_utils.py +0 -228
- django_cfg/apps/payments/utils/validation_utils.py +0 -94
- django_cfg/apps/payments/views/__init__.py +0 -63
- django_cfg/apps/payments/views/api_key_views.py +0 -164
- django_cfg/apps/payments/views/balance_views.py +0 -75
- django_cfg/apps/payments/views/currency_views.py +0 -122
- django_cfg/apps/payments/views/payment_views.py +0 -149
- django_cfg/apps/payments/views/subscription_views.py +0 -135
- django_cfg/apps/payments/views/tariff_views.py +0 -131
- django_cfg/apps/payments/views/templates/__init__.py +0 -25
- django_cfg/apps/payments/views/templates/ajax.py +0 -451
- django_cfg/apps/payments/views/templates/base.py +0 -212
- django_cfg/apps/payments/views/templates/dashboard.py +0 -60
- django_cfg/apps/payments/views/templates/payment_detail.py +0 -102
- django_cfg/apps/payments/views/templates/payment_management.py +0 -158
- django_cfg/apps/payments/views/templates/qr_code.py +0 -174
- django_cfg/apps/payments/views/templates/stats.py +0 -244
- django_cfg/apps/payments/views/templates/utils.py +0 -181
- django_cfg/apps/payments/views/webhook_views.py +0 -266
- django_cfg/apps/payments/viewsets.py +0 -66
- django_cfg/core/integration.py +0 -160
- django_cfg/template_archive/.gitignore +0 -1
- django_cfg/template_archive/__init__.py +0 -0
- django_cfg/urls.py +0 -33
- {django_cfg-1.2.31.dist-info → django_cfg-1.3.1.dist-info}/WHEEL +0 -0
- {django_cfg-1.2.31.dist-info → django_cfg-1.3.1.dist-info}/entry_points.txt +0 -0
- {django_cfg-1.2.31.dist-info → django_cfg-1.3.1.dist-info}/licenses/LICENSE +0 -0
@@ -1,340 +0,0 @@
|
|
1
|
-
/* Payment System Styles */
|
2
|
-
|
3
|
-
/* Payment Status Colors */
|
4
|
-
.payment-status-pending { @apply bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200; }
|
5
|
-
.payment-status-confirming { @apply bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200; }
|
6
|
-
.payment-status-confirmed { @apply bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200; }
|
7
|
-
.payment-status-completed { @apply bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200; }
|
8
|
-
.payment-status-failed { @apply bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200; }
|
9
|
-
.payment-status-expired { @apply bg-gray-100 text-gray-800 dark:bg-gray-900 dark:text-gray-200; }
|
10
|
-
.payment-status-cancelled { @apply bg-gray-100 text-gray-800 dark:bg-gray-900 dark:text-gray-200; }
|
11
|
-
.payment-status-refunded { @apply bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-200; }
|
12
|
-
|
13
|
-
/* Payment Card Animations */
|
14
|
-
.payment-card {
|
15
|
-
@apply transition-all duration-200 hover:shadow-lg hover:-translate-y-1;
|
16
|
-
}
|
17
|
-
|
18
|
-
.payment-card:hover {
|
19
|
-
@apply ring-2 ring-blue-500 ring-opacity-50;
|
20
|
-
}
|
21
|
-
|
22
|
-
.payment-card.compact {
|
23
|
-
@apply p-4;
|
24
|
-
}
|
25
|
-
|
26
|
-
/* Progress Bar Styles */
|
27
|
-
.progress-bar {
|
28
|
-
@apply w-full bg-gray-200 rounded-full h-2 dark:bg-gray-700 overflow-hidden;
|
29
|
-
}
|
30
|
-
|
31
|
-
.progress-fill {
|
32
|
-
@apply bg-blue-600 h-2 rounded-full transition-all duration-500 ease-out;
|
33
|
-
}
|
34
|
-
|
35
|
-
.progress-fill.success {
|
36
|
-
@apply bg-green-600;
|
37
|
-
}
|
38
|
-
|
39
|
-
.progress-fill.warning {
|
40
|
-
@apply bg-yellow-600;
|
41
|
-
}
|
42
|
-
|
43
|
-
.progress-fill.danger {
|
44
|
-
@apply bg-red-600;
|
45
|
-
}
|
46
|
-
|
47
|
-
/* Progress Steps */
|
48
|
-
.progress-steps {
|
49
|
-
@apply flex justify-between items-center mb-4;
|
50
|
-
}
|
51
|
-
|
52
|
-
.progress-step {
|
53
|
-
@apply flex flex-col items-center text-center;
|
54
|
-
}
|
55
|
-
|
56
|
-
.progress-step.completed .step-icon {
|
57
|
-
@apply text-green-500;
|
58
|
-
}
|
59
|
-
|
60
|
-
.progress-step.active .step-icon {
|
61
|
-
@apply text-blue-500;
|
62
|
-
}
|
63
|
-
|
64
|
-
.step-label {
|
65
|
-
@apply text-xs text-gray-500 dark:text-gray-400 mt-1;
|
66
|
-
}
|
67
|
-
|
68
|
-
.step-icon {
|
69
|
-
@apply w-8 h-8 flex items-center justify-center rounded-full border-2 border-gray-300 dark:border-gray-600 mb-2;
|
70
|
-
}
|
71
|
-
|
72
|
-
.step-icon.completed {
|
73
|
-
@apply border-green-500 bg-green-500 text-white;
|
74
|
-
}
|
75
|
-
|
76
|
-
.step-icon.active {
|
77
|
-
@apply border-blue-500 bg-blue-500 text-white;
|
78
|
-
}
|
79
|
-
|
80
|
-
/* Real-time indicators */
|
81
|
-
.payment-live-indicator {
|
82
|
-
@apply inline-flex items-center px-2 py-1 rounded-full text-xs font-medium bg-green-100 text-green-800;
|
83
|
-
}
|
84
|
-
|
85
|
-
.payment-live-indicator::before {
|
86
|
-
content: '';
|
87
|
-
@apply w-2 h-2 bg-green-500 rounded-full mr-2 animate-pulse;
|
88
|
-
}
|
89
|
-
|
90
|
-
/* Status Overview Cards */
|
91
|
-
.status-overview {
|
92
|
-
@apply grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8;
|
93
|
-
}
|
94
|
-
|
95
|
-
.status-card {
|
96
|
-
@apply bg-white dark:bg-gray-800 rounded-xl shadow-sm border border-gray-200 dark:border-gray-700 p-6 transition-all duration-200 hover:shadow-md;
|
97
|
-
}
|
98
|
-
|
99
|
-
.status-card:hover {
|
100
|
-
@apply transform scale-105;
|
101
|
-
}
|
102
|
-
|
103
|
-
/* Payment Table Styles */
|
104
|
-
.payments-table {
|
105
|
-
@apply min-w-full divide-y divide-gray-200 dark:divide-gray-700;
|
106
|
-
}
|
107
|
-
|
108
|
-
.payments-table th {
|
109
|
-
@apply px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider;
|
110
|
-
}
|
111
|
-
|
112
|
-
.payments-table td {
|
113
|
-
@apply px-6 py-4 whitespace-nowrap text-sm text-gray-900 dark:text-white;
|
114
|
-
}
|
115
|
-
|
116
|
-
.payments-table tr:hover {
|
117
|
-
@apply bg-gray-50 dark:bg-gray-800;
|
118
|
-
}
|
119
|
-
|
120
|
-
/* Provider Icons */
|
121
|
-
.provider-icon {
|
122
|
-
@apply w-6 h-6 rounded;
|
123
|
-
}
|
124
|
-
|
125
|
-
.provider-icon.nowpayments {
|
126
|
-
@apply bg-orange-500;
|
127
|
-
}
|
128
|
-
|
129
|
-
.provider-icon.cryptapi {
|
130
|
-
@apply bg-blue-500;
|
131
|
-
}
|
132
|
-
|
133
|
-
.provider-icon.cryptomus {
|
134
|
-
@apply bg-purple-500;
|
135
|
-
}
|
136
|
-
|
137
|
-
.provider-icon.stripe {
|
138
|
-
@apply bg-indigo-500;
|
139
|
-
}
|
140
|
-
|
141
|
-
.provider-icon.internal {
|
142
|
-
@apply bg-gray-500;
|
143
|
-
}
|
144
|
-
|
145
|
-
/* QR Code Styles */
|
146
|
-
.qr-code-container {
|
147
|
-
@apply flex flex-col items-center space-y-2 p-4 bg-white dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700;
|
148
|
-
}
|
149
|
-
|
150
|
-
.qr-code {
|
151
|
-
@apply w-32 h-32 bg-gray-100 dark:bg-gray-700 rounded flex items-center justify-center;
|
152
|
-
}
|
153
|
-
|
154
|
-
/* Filter Styles */
|
155
|
-
.payment-filters {
|
156
|
-
@apply bg-white dark:bg-gray-800 rounded-xl shadow-sm border border-gray-200 dark:border-gray-700 p-6 mb-6;
|
157
|
-
}
|
158
|
-
|
159
|
-
.filter-group {
|
160
|
-
@apply flex flex-wrap gap-4 items-center;
|
161
|
-
}
|
162
|
-
|
163
|
-
.filter-input {
|
164
|
-
@apply min-w-0 flex-1 px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md text-sm bg-white dark:bg-gray-700 text-gray-900 dark:text-white;
|
165
|
-
}
|
166
|
-
|
167
|
-
.filter-select {
|
168
|
-
@apply px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md text-sm bg-white dark:bg-gray-700 text-gray-900 dark:text-white;
|
169
|
-
}
|
170
|
-
|
171
|
-
/* Button Styles */
|
172
|
-
.btn {
|
173
|
-
@apply inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md transition-colors duration-200;
|
174
|
-
}
|
175
|
-
|
176
|
-
.btn-primary {
|
177
|
-
@apply bg-blue-600 text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2;
|
178
|
-
}
|
179
|
-
|
180
|
-
.btn-secondary {
|
181
|
-
@apply bg-gray-600 text-white hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-gray-500 focus:ring-offset-2;
|
182
|
-
}
|
183
|
-
|
184
|
-
.btn-success {
|
185
|
-
@apply bg-green-600 text-white hover:bg-green-700 focus:outline-none focus:ring-2 focus:ring-green-500 focus:ring-offset-2;
|
186
|
-
}
|
187
|
-
|
188
|
-
.btn-danger {
|
189
|
-
@apply bg-red-600 text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-offset-2;
|
190
|
-
}
|
191
|
-
|
192
|
-
.btn-outline {
|
193
|
-
@apply border-gray-300 dark:border-gray-600 text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-700 hover:bg-gray-50 dark:hover:bg-gray-600;
|
194
|
-
}
|
195
|
-
|
196
|
-
.btn-sm {
|
197
|
-
@apply px-3 py-1.5 text-xs;
|
198
|
-
}
|
199
|
-
|
200
|
-
.btn-lg {
|
201
|
-
@apply px-6 py-3 text-base;
|
202
|
-
}
|
203
|
-
|
204
|
-
/* Modal Styles */
|
205
|
-
.modal-overlay {
|
206
|
-
@apply fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50;
|
207
|
-
}
|
208
|
-
|
209
|
-
.modal-content {
|
210
|
-
@apply bg-white dark:bg-gray-800 rounded-lg shadow-xl max-w-md w-full mx-4 max-h-screen overflow-y-auto;
|
211
|
-
}
|
212
|
-
|
213
|
-
.modal-header {
|
214
|
-
@apply px-6 py-4 border-b border-gray-200 dark:border-gray-700;
|
215
|
-
}
|
216
|
-
|
217
|
-
.modal-body {
|
218
|
-
@apply px-6 py-4;
|
219
|
-
}
|
220
|
-
|
221
|
-
.modal-footer {
|
222
|
-
@apply px-6 py-4 border-t border-gray-200 dark:border-gray-700 flex justify-end space-x-3;
|
223
|
-
}
|
224
|
-
|
225
|
-
/* Notification Styles */
|
226
|
-
.notification {
|
227
|
-
@apply max-w-sm w-full bg-white dark:bg-gray-800 shadow-lg rounded-lg pointer-events-auto ring-1 ring-black ring-opacity-5 overflow-hidden;
|
228
|
-
}
|
229
|
-
|
230
|
-
.notification.success {
|
231
|
-
@apply border-l-4 border-green-500;
|
232
|
-
}
|
233
|
-
|
234
|
-
.notification.error {
|
235
|
-
@apply border-l-4 border-red-500;
|
236
|
-
}
|
237
|
-
|
238
|
-
.notification.warning {
|
239
|
-
@apply border-l-4 border-yellow-500;
|
240
|
-
}
|
241
|
-
|
242
|
-
.notification.info {
|
243
|
-
@apply border-l-4 border-blue-500;
|
244
|
-
}
|
245
|
-
|
246
|
-
/* Responsive improvements */
|
247
|
-
@media (max-width: 768px) {
|
248
|
-
.payment-card {
|
249
|
-
@apply p-4;
|
250
|
-
}
|
251
|
-
|
252
|
-
.status-overview {
|
253
|
-
@apply grid-cols-2 gap-4;
|
254
|
-
}
|
255
|
-
|
256
|
-
.progress-steps {
|
257
|
-
@apply hidden;
|
258
|
-
}
|
259
|
-
|
260
|
-
.filter-group {
|
261
|
-
@apply flex-col items-stretch;
|
262
|
-
}
|
263
|
-
|
264
|
-
.payments-table {
|
265
|
-
@apply text-xs;
|
266
|
-
}
|
267
|
-
|
268
|
-
.payments-table th,
|
269
|
-
.payments-table td {
|
270
|
-
@apply px-3 py-2;
|
271
|
-
}
|
272
|
-
}
|
273
|
-
|
274
|
-
@media (max-width: 480px) {
|
275
|
-
.status-overview {
|
276
|
-
@apply grid-cols-1;
|
277
|
-
}
|
278
|
-
}
|
279
|
-
|
280
|
-
/* Loading animations */
|
281
|
-
.skeleton {
|
282
|
-
@apply animate-pulse bg-gray-200 dark:bg-gray-700 rounded;
|
283
|
-
}
|
284
|
-
|
285
|
-
.skeleton-text {
|
286
|
-
@apply h-4 bg-gray-200 dark:bg-gray-700 rounded;
|
287
|
-
}
|
288
|
-
|
289
|
-
.skeleton-text.w-1/4 {
|
290
|
-
@apply w-1/4;
|
291
|
-
}
|
292
|
-
|
293
|
-
.skeleton-text.w-1/2 {
|
294
|
-
@apply w-1/2;
|
295
|
-
}
|
296
|
-
|
297
|
-
.skeleton-text.w-3/4 {
|
298
|
-
@apply w-3/4;
|
299
|
-
}
|
300
|
-
|
301
|
-
/* Chart styles */
|
302
|
-
.chart-container {
|
303
|
-
@apply bg-white dark:bg-gray-800 rounded-xl shadow-sm border border-gray-200 dark:border-gray-700 p-6;
|
304
|
-
}
|
305
|
-
|
306
|
-
.chart-legend {
|
307
|
-
@apply flex justify-center space-x-6 mt-4;
|
308
|
-
}
|
309
|
-
|
310
|
-
.chart-legend-item {
|
311
|
-
@apply flex items-center space-x-2;
|
312
|
-
}
|
313
|
-
|
314
|
-
.chart-legend-color {
|
315
|
-
@apply w-3 h-3 rounded-full;
|
316
|
-
}
|
317
|
-
|
318
|
-
/* Dark mode adjustments */
|
319
|
-
@media (prefers-color-scheme: dark) {
|
320
|
-
.material-icons {
|
321
|
-
color: inherit;
|
322
|
-
}
|
323
|
-
}
|
324
|
-
|
325
|
-
/* Custom scrollbar */
|
326
|
-
.custom-scrollbar::-webkit-scrollbar {
|
327
|
-
width: 6px;
|
328
|
-
}
|
329
|
-
|
330
|
-
.custom-scrollbar::-webkit-scrollbar-track {
|
331
|
-
@apply bg-gray-100 dark:bg-gray-800;
|
332
|
-
}
|
333
|
-
|
334
|
-
.custom-scrollbar::-webkit-scrollbar-thumb {
|
335
|
-
@apply bg-gray-400 dark:bg-gray-600 rounded-full;
|
336
|
-
}
|
337
|
-
|
338
|
-
.custom-scrollbar::-webkit-scrollbar-thumb:hover {
|
339
|
-
@apply bg-gray-500 dark:bg-gray-500;
|
340
|
-
}
|
@@ -1,202 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* Notification System for Payment Dashboard
|
3
|
-
* Handles toast notifications with auto-dismiss and styling
|
4
|
-
*/
|
5
|
-
|
6
|
-
class NotificationManager {
|
7
|
-
constructor() {
|
8
|
-
this.container = this.getOrCreateContainer();
|
9
|
-
this.notifications = new Map();
|
10
|
-
this.defaultDuration = 5000; // 5 seconds
|
11
|
-
}
|
12
|
-
|
13
|
-
getOrCreateContainer() {
|
14
|
-
let container = document.getElementById('notification-container');
|
15
|
-
if (!container) {
|
16
|
-
container = document.createElement('div');
|
17
|
-
container.id = 'notification-container';
|
18
|
-
container.className = 'fixed top-4 left-1/2 transform -translate-x-1/2 z-50 space-y-2';
|
19
|
-
document.body.appendChild(container);
|
20
|
-
}
|
21
|
-
return container;
|
22
|
-
}
|
23
|
-
|
24
|
-
show(message, type = 'info', options = {}) {
|
25
|
-
const id = this.generateId();
|
26
|
-
const duration = options.duration || this.defaultDuration;
|
27
|
-
const persistent = options.persistent || false;
|
28
|
-
|
29
|
-
const notification = this.createNotificationElement(id, message, type, persistent);
|
30
|
-
this.container.appendChild(notification);
|
31
|
-
this.notifications.set(id, notification);
|
32
|
-
|
33
|
-
// Animate in
|
34
|
-
requestAnimationFrame(() => {
|
35
|
-
notification.classList.add('animate-in');
|
36
|
-
});
|
37
|
-
|
38
|
-
// Auto-dismiss if not persistent
|
39
|
-
if (!persistent) {
|
40
|
-
setTimeout(() => {
|
41
|
-
this.dismiss(id);
|
42
|
-
}, duration);
|
43
|
-
}
|
44
|
-
|
45
|
-
return id;
|
46
|
-
}
|
47
|
-
|
48
|
-
createNotificationElement(id, message, type, persistent) {
|
49
|
-
const notification = document.createElement('div');
|
50
|
-
notification.id = `notification-${id}`;
|
51
|
-
notification.className = `notification ${type} transform transition-all duration-300 translate-y-2 opacity-0`;
|
52
|
-
|
53
|
-
const typeIcons = {
|
54
|
-
success: 'check_circle',
|
55
|
-
error: 'error',
|
56
|
-
warning: 'warning',
|
57
|
-
info: 'info'
|
58
|
-
};
|
59
|
-
|
60
|
-
const typeColors = {
|
61
|
-
success: 'text-green-600',
|
62
|
-
error: 'text-red-600',
|
63
|
-
warning: 'text-yellow-600',
|
64
|
-
info: 'text-blue-600'
|
65
|
-
};
|
66
|
-
|
67
|
-
notification.innerHTML = `
|
68
|
-
<div class="p-4">
|
69
|
-
<div class="flex">
|
70
|
-
<div class="flex-shrink-0">
|
71
|
-
<span class="material-icons ${typeColors[type]}">${typeIcons[type]}</span>
|
72
|
-
</div>
|
73
|
-
<div class="ml-3 w-0 flex-1">
|
74
|
-
<p class="text-sm font-medium text-gray-900 dark:text-white">
|
75
|
-
${this.escapeHtml(message)}
|
76
|
-
</p>
|
77
|
-
</div>
|
78
|
-
${!persistent ? `
|
79
|
-
<div class="ml-4 flex-shrink-0 flex">
|
80
|
-
<button class="dismiss-btn bg-white dark:bg-gray-800 rounded-md inline-flex text-gray-400 hover:text-gray-500 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500" onclick="window.notificationManager.dismiss('${id}')">
|
81
|
-
<span class="sr-only">Close</span>
|
82
|
-
<span class="material-icons text-sm">close</span>
|
83
|
-
</button>
|
84
|
-
</div>
|
85
|
-
` : ''}
|
86
|
-
</div>
|
87
|
-
</div>
|
88
|
-
`;
|
89
|
-
|
90
|
-
// Add CSS class for animation
|
91
|
-
notification.style.setProperty('--tw-translate-y', '0.5rem');
|
92
|
-
|
93
|
-
return notification;
|
94
|
-
}
|
95
|
-
|
96
|
-
dismiss(id) {
|
97
|
-
const notification = this.notifications.get(id);
|
98
|
-
if (!notification) return;
|
99
|
-
|
100
|
-
// Animate out
|
101
|
-
notification.classList.add('animate-out');
|
102
|
-
notification.style.setProperty('--tw-translate-y', '-0.5rem');
|
103
|
-
notification.style.opacity = '0';
|
104
|
-
|
105
|
-
setTimeout(() => {
|
106
|
-
if (notification.parentNode) {
|
107
|
-
notification.parentNode.removeChild(notification);
|
108
|
-
}
|
109
|
-
this.notifications.delete(id);
|
110
|
-
}, 300);
|
111
|
-
}
|
112
|
-
|
113
|
-
dismissAll() {
|
114
|
-
this.notifications.forEach((notification, id) => {
|
115
|
-
this.dismiss(id);
|
116
|
-
});
|
117
|
-
}
|
118
|
-
|
119
|
-
// Convenience methods
|
120
|
-
success(message, options = {}) {
|
121
|
-
return this.show(message, 'success', options);
|
122
|
-
}
|
123
|
-
|
124
|
-
error(message, options = {}) {
|
125
|
-
return this.show(message, 'error', options);
|
126
|
-
}
|
127
|
-
|
128
|
-
warning(message, options = {}) {
|
129
|
-
return this.show(message, 'warning', options);
|
130
|
-
}
|
131
|
-
|
132
|
-
info(message, options = {}) {
|
133
|
-
return this.show(message, 'info', options);
|
134
|
-
}
|
135
|
-
|
136
|
-
// Payment-specific notifications
|
137
|
-
paymentCreated(paymentId) {
|
138
|
-
return this.success(`Payment #${paymentId} created successfully`);
|
139
|
-
}
|
140
|
-
|
141
|
-
paymentCompleted(paymentId) {
|
142
|
-
return this.success(`Payment #${paymentId} completed!`);
|
143
|
-
}
|
144
|
-
|
145
|
-
paymentFailed(paymentId, reason = '') {
|
146
|
-
const message = `Payment #${paymentId} failed${reason ? ': ' + reason : ''}`;
|
147
|
-
return this.error(message);
|
148
|
-
}
|
149
|
-
|
150
|
-
paymentCancelled(paymentId) {
|
151
|
-
return this.warning(`Payment #${paymentId} cancelled`);
|
152
|
-
}
|
153
|
-
|
154
|
-
connectionStatus(connected) {
|
155
|
-
if (connected) {
|
156
|
-
return this.success('Connected to payment system', { duration: 3000 });
|
157
|
-
} else {
|
158
|
-
return this.error('Connection lost', { persistent: true });
|
159
|
-
}
|
160
|
-
}
|
161
|
-
|
162
|
-
// Utility methods
|
163
|
-
generateId() {
|
164
|
-
return Math.random().toString(36).substr(2, 9);
|
165
|
-
}
|
166
|
-
|
167
|
-
escapeHtml(text) {
|
168
|
-
const map = {
|
169
|
-
'&': '&',
|
170
|
-
'<': '<',
|
171
|
-
'>': '>',
|
172
|
-
'"': '"',
|
173
|
-
"'": '''
|
174
|
-
};
|
175
|
-
return text.replace(/[&<>"']/g, (m) => map[m]);
|
176
|
-
}
|
177
|
-
}
|
178
|
-
|
179
|
-
// Add CSS animations dynamically
|
180
|
-
const style = document.createElement('style');
|
181
|
-
style.textContent = `
|
182
|
-
.notification.animate-in {
|
183
|
-
transform: translateY(0);
|
184
|
-
opacity: 1;
|
185
|
-
}
|
186
|
-
|
187
|
-
.notification.animate-out {
|
188
|
-
transform: translateY(-0.5rem);
|
189
|
-
opacity: 0;
|
190
|
-
}
|
191
|
-
`;
|
192
|
-
document.head.appendChild(style);
|
193
|
-
|
194
|
-
// Initialize notification manager when DOM is loaded
|
195
|
-
document.addEventListener('DOMContentLoaded', () => {
|
196
|
-
window.notificationManager = new NotificationManager();
|
197
|
-
});
|
198
|
-
|
199
|
-
// Export for use in other modules
|
200
|
-
if (typeof module !== 'undefined' && module.exports) {
|
201
|
-
module.exports = NotificationManager;
|
202
|
-
}
|