customeranalytics 0.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.
- customeranalytics/__init__.py +319 -0
- customeranalytics/configs.py +480 -0
- customeranalytics/data_storage_configurations/__init__.py +245 -0
- customeranalytics/data_storage_configurations/data_access.py +165 -0
- customeranalytics/data_storage_configurations/data_works_pipeline.py +207 -0
- customeranalytics/data_storage_configurations/es_create_index.py +544 -0
- customeranalytics/data_storage_configurations/logger.py +36 -0
- customeranalytics/data_storage_configurations/query_es.py +157 -0
- customeranalytics/data_storage_configurations/reports.py +684 -0
- customeranalytics/data_storage_configurations/schedule_data_integration.py +355 -0
- customeranalytics/docs/queries.yaml +245 -0
- customeranalytics/docs/web_configs.yaml +2 -0
- customeranalytics/exploratory_analysis/__init__.py +109 -0
- customeranalytics/exploratory_analysis/churn.py +232 -0
- customeranalytics/exploratory_analysis/cohorts.py +535 -0
- customeranalytics/exploratory_analysis/descriptive_statistics.py +470 -0
- customeranalytics/exploratory_analysis/funnels.py +407 -0
- customeranalytics/exploratory_analysis/product_analytics.py +340 -0
- customeranalytics/exploratory_analysis/promotion_analytics.py +299 -0
- customeranalytics/exploratory_analysis/rfm.py +202 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_avg_order_count_per_promo_per_cust.csv +99 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_chart_1_search.csv +2 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_chart_2_search.csv +46 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_chart_3_search.csv +2 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_chart_4_search.csv +2 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_churn.csv +2 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_churn_weekly.csv +10 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_client_feature_predicted.csv +1590 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_client_kpis.csv +7060 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_clvrfm_anomaly.csv +561 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_clvsegments_amount.csv +8 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_customer_journey.csv +18 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_daily_clv.csv +103 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_daily_cohort_downloads.csv +68 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_daily_cohort_from_1_to_2.csv +66 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_daily_cohort_from_2_to_3.csv +64 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_daily_cohort_from_3_to_4.csv +55 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_daily_dimension_values.csv +199 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_daily_funnel.csv +36 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_daily_funnel_downloads.csv +68 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_daily_inorganic_ratio.csv +6070 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_daily_orders.csv +57 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_daily_organic_orders.csv +64 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_daily_products_of_sales.csv +12574 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_daily_promotion_discount.csv +64 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_daily_promotion_revenue.csv +6070 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_dcohort_anomaly.csv +6 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_dcohort_anomaly_2.csv +118 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_deliver.csv +47 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_deliver_kpis.csv +2 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_deliver_weekday_hour.csv +25 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_dfunnel_anomaly.csv +118 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_dimension_kpis.csv +199 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_dorders_anomaly.csv +85 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_frequency_clusters.csv +6 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_frequency_recency.csv +3740 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_hourly_funnel.csv +25 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_hourly_funnel_downloads.csv +25 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_hourly_inorganic_ratio.csv +2353 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_hourly_orders.csv +25 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_hourly_organic_orders.csv +2353 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_inorganic_orders_per_promotion_per_day.csv +6070 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_kpis.csv +2 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_monetary_clusters.csv +6 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_monetary_frequency.csv +3740 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_monthly_funnel.csv +5 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_monthly_funnel_downloads.csv +5 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_monthly_orders.csv +4 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_most_combined_products.csv +11 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_most_ordered_categories.csv +11 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_most_ordered_products.csv +11 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_order_and_payment_amount_differences.csv +91 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_prepare.csv +101 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_prepare_weekday_hour.csv +25 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_product_kpis.csv +201 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_product_usage_before_after_amount_accept.csv +11 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_product_usage_before_after_amount_reject.csv +7 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_product_usage_before_after_orders_accept.csv +11 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_product_usage_before_after_orders_reject.csv +11 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_promotion_comparison.csv +91 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_promotion_kpis.csv +99 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_promotion_number_of_customer.csv +99 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_promotion_usage_before_after_amount_accept.csv +81 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_promotion_usage_before_after_amount_reject.csv +11 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_promotion_usage_before_after_orders_accept.csv +55 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_promotion_usage_before_after_orders_reject.csv +37 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_purchase_amount_distribution.csv +22 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_recency_clusters.csv +6 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_recency_monetary.csv +3740 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_rfm.csv +2001 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_ride.csv +101 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_ride_weekday_hour.csv +25 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_segmentation.csv +11 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_segments_change_daily_before_after_amount.csv +10 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_segments_change_daily_before_after_orders.csv +9 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_segments_change_monthly_before_after_amount.csv +10 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_segments_change_monthly_before_after_orders.csv +11 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_segments_change_weekly_before_after_amount.csv +10 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_segments_change_weekly_before_after_orders.csv +10 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_user_counts_per_order_seq.csv +47 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_weekly_average_order_per_user.csv +13 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_weekly_average_payment_amount.csv +13 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_weekly_average_session_per_user.csv +13 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_weekly_cohort_downloads.csv +13 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_weekly_cohort_from_1_to_2.csv +13 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_weekly_cohort_from_2_to_3.csv +13 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_weekly_cohort_from_3_to_4.csv +12 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_weekly_funnel.csv +25 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_weekly_funnel_downloads.csv +25 -0
- customeranalytics/exploratory_analysis/sample_data/sample_data_weekly_orders.csv +10 -0
- customeranalytics/ml_process/__init__.py +64 -0
- customeranalytics/ml_process/ab_test.py +615 -0
- customeranalytics/ml_process/anomaly_detection.py +456 -0
- customeranalytics/ml_process/clv_prediction.py +301 -0
- customeranalytics/ml_process/customer_segmentation.py +354 -0
- customeranalytics/ml_process/delivery_analytics.py +754 -0
- customeranalytics/utils.py +186 -0
- customeranalytics/web/app/__init__.py +37 -0
- customeranalytics/web/app/base/__init__.py +9 -0
- customeranalytics/web/app/base/forms.py +16 -0
- customeranalytics/web/app/base/models.py +43 -0
- customeranalytics/web/app/base/routes.py +126 -0
- customeranalytics/web/app/base/static/assets/css/app.css +20 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-Black.woff +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-Black.woff2 +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-BlackItalic.woff +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-BlackItalic.woff2 +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-Bold.woff +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-Bold.woff2 +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-BoldItalic.woff +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-BoldItalic.woff2 +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-ExtraBold.woff +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-ExtraBold.woff2 +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-ExtraBoldItalic.woff +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-ExtraBoldItalic.woff2 +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-ExtraLight-BETA.woff +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-ExtraLight-BETA.woff2 +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-ExtraLightItalic-BETA.woff +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-ExtraLightItalic-BETA.woff2 +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-Italic.woff +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-Italic.woff2 +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-Light-BETA.woff +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-Light-BETA.woff2 +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-LightItalic-BETA.woff +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-LightItalic-BETA.woff2 +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-Medium.woff +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-Medium.woff2 +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-MediumItalic.woff +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-MediumItalic.woff2 +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-Regular.woff +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-Regular.woff2 +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-SemiBold.woff +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-SemiBold.woff2 +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-SemiBoldItalic.woff +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-SemiBoldItalic.woff2 +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-Thin-BETA.woff +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-Thin-BETA.woff2 +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-ThinItalic-BETA.woff +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-ThinItalic-BETA.woff2 +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-italic.var.woff2 +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter-upright.var.woff2 +0 -0
- customeranalytics/web/app/base/static/assets/fonts/Inter.var.woff2 +0 -0
- customeranalytics/web/app/base/static/assets/fonts/fa-brands-400.eot +0 -0
- customeranalytics/web/app/base/static/assets/fonts/fa-brands-400.svg +3570 -0
- customeranalytics/web/app/base/static/assets/fonts/fa-brands-400.ttf +0 -0
- customeranalytics/web/app/base/static/assets/fonts/fa-brands-400.woff +0 -0
- customeranalytics/web/app/base/static/assets/fonts/fa-brands-400.woff2 +0 -0
- customeranalytics/web/app/base/static/assets/fonts/fa-regular-400.eot +0 -0
- customeranalytics/web/app/base/static/assets/fonts/fa-regular-400.svg +801 -0
- customeranalytics/web/app/base/static/assets/fonts/fa-regular-400.ttf +0 -0
- customeranalytics/web/app/base/static/assets/fonts/fa-regular-400.woff +0 -0
- customeranalytics/web/app/base/static/assets/fonts/fa-regular-400.woff2 +0 -0
- customeranalytics/web/app/base/static/assets/fonts/fa-solid-900.eot +0 -0
- customeranalytics/web/app/base/static/assets/fonts/fa-solid-900.svg +5028 -0
- customeranalytics/web/app/base/static/assets/fonts/fa-solid-900.ttf +0 -0
- customeranalytics/web/app/base/static/assets/fonts/fa-solid-900.woff +0 -0
- customeranalytics/web/app/base/static/assets/fonts/fa-solid-900.woff2 +0 -0
- customeranalytics/web/app/base/static/assets/img/avatars/avatar-1.png +0 -0
- customeranalytics/web/app/base/static/assets/img/avatars/avatar-2.png +0 -0
- customeranalytics/web/app/base/static/assets/img/avatars/avatar-3.png +0 -0
- customeranalytics/web/app/base/static/assets/img/avatars/avatar-4.png +0 -0
- customeranalytics/web/app/base/static/assets/img/avatars/avatar-5.png +0 -0
- customeranalytics/web/app/base/static/assets/img/avatars/info.jpeg +0 -0
- customeranalytics/web/app/base/static/assets/img/icons/customanality.png +0 -0
- customeranalytics/web/app/base/static/assets/img/icons/icon-48x48.png +0 -0
- customeranalytics/web/app/base/static/assets/js/app.js +2 -0
- customeranalytics/web/app/base/static/assets/js/app.js.LICENSE +566 -0
- customeranalytics/web/app/base/static/assets/js/app.js.LICENSE.txt +556 -0
- customeranalytics/web/app/base/static/assets/js/modules/bootstrap.js +15 -0
- customeranalytics/web/app/base/static/assets/js/modules/chartjs.js +4 -0
- customeranalytics/web/app/base/static/assets/js/modules/feather.js +8 -0
- customeranalytics/web/app/base/static/assets/js/modules/flatpickr.js +4 -0
- customeranalytics/web/app/base/static/assets/js/modules/moment.js +4 -0
- customeranalytics/web/app/base/static/assets/js/modules/sidebar.js +23 -0
- customeranalytics/web/app/base/static/assets/js/modules/theme.js +16 -0
- customeranalytics/web/app/base/templates/accounts/login.html +81 -0
- customeranalytics/web/app/base/templates/accounts/register.html +80 -0
- customeranalytics/web/app/base/templates/includes/footer.html +28 -0
- customeranalytics/web/app/base/templates/includes/navigation.html +51 -0
- customeranalytics/web/app/base/templates/includes/scripts.html +3 -0
- customeranalytics/web/app/base/templates/includes/sidebar.html +146 -0
- customeranalytics/web/app/base/templates/layouts/base-fullscreen.html +36 -0
- customeranalytics/web/app/base/templates/layouts/base.html +84 -0
- customeranalytics/web/app/base/util.py +30 -0
- customeranalytics/web/app/home/__init__.py +9 -0
- customeranalytics/web/app/home/forms.py +1039 -0
- customeranalytics/web/app/home/models.py +438 -0
- customeranalytics/web/app/home/profiles.py +310 -0
- customeranalytics/web/app/home/routes.py +386 -0
- customeranalytics/web/app/home/search.py +288 -0
- customeranalytics/web/app/home/static/assets/img/avatars/avatar-1.png +0 -0
- customeranalytics/web/app/home/static/assets/img/avatars/avatar-2.png +0 -0
- customeranalytics/web/app/home/static/assets/img/avatars/avatar-3.png +0 -0
- customeranalytics/web/app/home/static/assets/img/avatars/avatar-4.png +0 -0
- customeranalytics/web/app/home/static/assets/img/avatars/avatar-5.png +0 -0
- customeranalytics/web/app/home/static/assets/img/icons/customanality.png +0 -0
- customeranalytics/web/app/home/static/assets/img/icons/icon-48x48.png +0 -0
- customeranalytics/web/app/home/templates/abtest-product.html +280 -0
- customeranalytics/web/app/home/templates/abtest-promotion.html +362 -0
- customeranalytics/web/app/home/templates/abtest-segments.html +298 -0
- customeranalytics/web/app/home/templates/add-data-delivery.html +184 -0
- customeranalytics/web/app/home/templates/add-data-product.html +177 -0
- customeranalytics/web/app/home/templates/add-data-purchase.html +392 -0
- customeranalytics/web/app/home/templates/anomaly.html +261 -0
- customeranalytics/web/app/home/templates/clv.html +211 -0
- customeranalytics/web/app/home/templates/cohorts.html +308 -0
- customeranalytics/web/app/home/templates/customer-segmentation.html +308 -0
- customeranalytics/web/app/home/templates/data-es.html +152 -0
- customeranalytics/web/app/home/templates/data-execute.html +397 -0
- customeranalytics/web/app/home/templates/delivery.html +404 -0
- customeranalytics/web/app/home/templates/funnel-customer.html +240 -0
- customeranalytics/web/app/home/templates/funnel-session.html +236 -0
- customeranalytics/web/app/home/templates/index.html +524 -0
- customeranalytics/web/app/home/templates/index2.html +515 -0
- customeranalytics/web/app/home/templates/page-403.html +46 -0
- customeranalytics/web/app/home/templates/page-404.html +45 -0
- customeranalytics/web/app/home/templates/page-500.html +45 -0
- customeranalytics/web/app/home/templates/pages-blank.html +33 -0
- customeranalytics/web/app/home/templates/pages-sign-in.html +67 -0
- customeranalytics/web/app/home/templates/pages-sign-up.html +61 -0
- customeranalytics/web/app/home/templates/product.html +203 -0
- customeranalytics/web/app/home/templates/profile.html +1009 -0
- customeranalytics/web/app/home/templates/rfm.html +254 -0
- customeranalytics/web/app/home/templates/search.html +167 -0
- customeranalytics/web/app/home/templates/settings.html +205 -0
- customeranalytics/web/app/home/templates/stats-desc.html +230 -0
- customeranalytics/web/app/home/templates/stats-purchase.html +221 -0
- customeranalytics/web/config.py +30 -0
- customeranalytics/web/db.sqlite3 +0 -0
- customeranalytics/web/run.py +30 -0
- customeranalytics-0.1.dist-info/METADATA +1102 -0
- customeranalytics-0.1.dist-info/RECORD +254 -0
- customeranalytics-0.1.dist-info/WHEEL +4 -0
- customeranalytics-0.1.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
{% extends "layouts/base.html" %}
|
|
2
|
+
|
|
3
|
+
{% block title %} A/B Test Customer Segments {% endblock %}
|
|
4
|
+
|
|
5
|
+
<!-- Specific Page CSS goes HERE -->
|
|
6
|
+
{% block stylesheets %}{% endblock stylesheets %}
|
|
7
|
+
|
|
8
|
+
{% block content %}
|
|
9
|
+
|
|
10
|
+
<main class="content">
|
|
11
|
+
<div class="container-fluid p-0">
|
|
12
|
+
<h5 class="h3 mb-3">A/B Test Customer Segment Change</h5>
|
|
13
|
+
<div class="col-md-12">
|
|
14
|
+
<div class="card">
|
|
15
|
+
<div class="card-body">
|
|
16
|
+
<div class="row">
|
|
17
|
+
<div class="accordion" id="accordionExample">
|
|
18
|
+
<div class="card">
|
|
19
|
+
<div class="card-header" id="headingOne">
|
|
20
|
+
<h5 class="card-title my-1">
|
|
21
|
+
<a href="#" data-toggle="collapse" data-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne" style="color:green;font-size:12px">
|
|
22
|
+
Filters
|
|
23
|
+
</a>
|
|
24
|
+
</h5>
|
|
25
|
+
</div>
|
|
26
|
+
<div id="collapseOne" class="collapse" aria-labelledby="headingOne" data-parent="#accordionExample">
|
|
27
|
+
<form method="POST">
|
|
28
|
+
<div class="row">
|
|
29
|
+
<div class="col-md-6">
|
|
30
|
+
<div class="card">
|
|
31
|
+
<div class="card-body">
|
|
32
|
+
<div class="card">
|
|
33
|
+
<div class="card-header">
|
|
34
|
+
<h5 class="card-title mb-0">Dimension selection</h5>
|
|
35
|
+
</div>
|
|
36
|
+
<div class="card-body">
|
|
37
|
+
<select name="index" id="index" class="form-control">
|
|
38
|
+
{% for d in filters['dimensions'] %}
|
|
39
|
+
{% if d == 'There is no available report. Please execute Schedule Data Process' %}
|
|
40
|
+
<option value= "main">{{ d }}</option>
|
|
41
|
+
{% endif %}
|
|
42
|
+
{% if d != 'There is no available report. Please execute Schedule Data Process' %}
|
|
43
|
+
<option value="{{ d }}">{{ d }}</option>
|
|
44
|
+
{% endif %}
|
|
45
|
+
{% endfor %}
|
|
46
|
+
</select>
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
<div class="col-md-6">
|
|
54
|
+
<div class="card flex-fil">
|
|
55
|
+
<div class="card-body col-12">
|
|
56
|
+
<div class="col-12 ">
|
|
57
|
+
<div class="align-self-center w-100">
|
|
58
|
+
<div class="chart">
|
|
59
|
+
<input name="date" id="datetimepicker-dashboard" hidden>
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
</div>
|
|
63
|
+
</div>
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
|
|
67
|
+
<div class="card-header">
|
|
68
|
+
<button type="submit" class="btn btn-pill btn-primary">Apply</button>
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
</form>
|
|
72
|
+
</div>
|
|
73
|
+
</div>
|
|
74
|
+
|
|
75
|
+
<div class="card">
|
|
76
|
+
<div class="card-header" id="headingTwo">
|
|
77
|
+
<h5 class="card-title my-1">
|
|
78
|
+
<a href="#" data-toggle="collapse" data-target="#collapseTwo" aria-expanded="true" aria-controls="collapseOne" style="color:green;font-size:12px">
|
|
79
|
+
Infos
|
|
80
|
+
</a>
|
|
81
|
+
</h5>
|
|
82
|
+
</div>
|
|
83
|
+
<div id="collapseTwo" class="collapse show" aria-labelledby="headingTwo" data-parent="#accordionExample">
|
|
84
|
+
<div class="card-body">
|
|
85
|
+
<ul>
|
|
86
|
+
<li>
|
|
87
|
+
<strong style="color:green;">Customer Segmentation </strong>
|
|
88
|
+
The customers, who are engaged with the business, are counted as millions.
|
|
89
|
+
However, Each individual customers have their unique behavior with the business,
|
|
90
|
+
mostly they can be clustered in the same way according to their engagement and attention to your business.
|
|
91
|
+
In that case, Customer Segmentation allows us to see
|
|
92
|
+
this similarity of customers by separating the customers' population to the individual homogeny sub-groups.
|
|
93
|
+
</li>
|
|
94
|
+
<li>
|
|
95
|
+
<div class="card-header">
|
|
96
|
+
<h5 class="card-title" style="color:green;">Segments</h5>
|
|
97
|
+
By using RFM values it is possible to segment each customer.
|
|
98
|
+
We aim to find how they engage with
|
|
99
|
+
the business which part of them can be encouraged to engage the business, who are gone?
|
|
100
|
+
Who are new to the business?
|
|
101
|
+
<strong style="color:green;">Here are the segments;</strong>
|
|
102
|
+
<div class="card-header">
|
|
103
|
+
<strong style="color:green;">Champions; </strong>
|
|
104
|
+
They love your business, and are pleased with your services or products.
|
|
105
|
+
Probably, They won’t let you down very soon.You are the rock star for them.
|
|
106
|
+
<p style="font-size:100px">😎</p>
|
|
107
|
+
</div>
|
|
108
|
+
<div class="card-header">
|
|
109
|
+
<strong style="color:green;">Loyal Customers; </strong>
|
|
110
|
+
Just like champions, they do love your business and not thinking to leave you soon.
|
|
111
|
+
They are pleased about your service and products of quality.
|
|
112
|
+
Just They do love your rock band and never miss your concert,
|
|
113
|
+
however, they would like to watch it at the back.
|
|
114
|
+
<p style=“font-size:100px”>🤟</p>
|
|
115
|
+
</div>
|
|
116
|
+
<div class="card-header">
|
|
117
|
+
<strong style="color:green;">potential loyalist; </strong>
|
|
118
|
+
This group of customers would like to engage with your business recently, frequently,
|
|
119
|
+
but they are still not sure that they would like to totally engage. They probably need a push.
|
|
120
|
+
</div>
|
|
121
|
+
<div class="card-header">
|
|
122
|
+
<strong style="color:green;">can`t lose them; </strong>
|
|
123
|
+
Just like the ‘potential loyalist’ segment of customers, these are engaged customers,
|
|
124
|
+
but their average basket value is a bit higher when we compare with loyal customers.
|
|
125
|
+
</div>
|
|
126
|
+
<div class="card-header">
|
|
127
|
+
<strong style="color:green;">at risk; </strong>
|
|
128
|
+
They probably leave and become churn customers.
|
|
129
|
+
Make sure to keep them engaged in the business.
|
|
130
|
+
</div>
|
|
131
|
+
|
|
132
|
+
<div class="card-header">
|
|
133
|
+
<strong style="color:green;">Need attention; </strong>
|
|
134
|
+
Just like ‘at risk’ segment of customers,
|
|
135
|
+
these are going to become churn customers.
|
|
136
|
+
Like the ‘at risk’ segment of customers, you have more chance to make them engaged again.
|
|
137
|
+
</div>
|
|
138
|
+
|
|
139
|
+
<div class="card-header">
|
|
140
|
+
<strong style="color:green;">lost; </strong>
|
|
141
|
+
They are churn customers or very close to become the churn customers.
|
|
142
|
+
</div>
|
|
143
|
+
<div class="card-header">
|
|
144
|
+
<strong style="color:green;">newcomers; </strong>
|
|
145
|
+
They have just arrived at your business. And we might not know about their satisfaction
|
|
146
|
+
because of the lack of information about them. Track their behaviors and see how they become churn or champions in the future.
|
|
147
|
+
</div>
|
|
148
|
+
</div>
|
|
149
|
+
</li>
|
|
150
|
+
<li>
|
|
151
|
+
<div class="card-header">
|
|
152
|
+
<h5 class="card-title" style="color:green;">How does Customer Segmentation work?</h5>
|
|
153
|
+
The calculated RFM values are segmented individually with 5 segments (K=5). New process will be the assigning of segment name according the top segments for RFM values.
|
|
154
|
+
For instance, A customer who has recency; 0.2 hr (average recency; 3 days), monetary; 70 (average monetary is 30), frequency; 1 day (average frequency is 4 days).
|
|
155
|
+
This customer`s frequency segment will be 1, recency segment will be 1, monetary segment will be 1. This customer will segmented as ‘Champions’.
|
|
156
|
+
</div>
|
|
157
|
+
</li>
|
|
158
|
+
<li>
|
|
159
|
+
<div class="card-header">
|
|
160
|
+
<h5 class="card-title" style="color:green;">Customer Segmentation TreeMap</h5>
|
|
161
|
+
This is a treemap with % of total unique customer count per segment.
|
|
162
|
+
</div>
|
|
163
|
+
</li>
|
|
164
|
+
<li>
|
|
165
|
+
<div class="card-header">
|
|
166
|
+
<h5 class="card-title" style="color:green;">Frequency Segmentation</h5>
|
|
167
|
+
Each customer's average time difference is calculated (Frequency Calculation).
|
|
168
|
+
Frequency values are clustered with K-Means clustering into the 5 clusters (K=5).
|
|
169
|
+
According to each frequency value number of customers is counted per frequency segment.
|
|
170
|
+
The X-axis represents average frequency values.
|
|
171
|
+
Y-Axis represents the total number of client count per average frequency per frequency segment.
|
|
172
|
+
</div>
|
|
173
|
+
</li>
|
|
174
|
+
|
|
175
|
+
<li>
|
|
176
|
+
<div class="card-header">
|
|
177
|
+
<h5 class="card-title" style="color:green;">Monetary Segmentation</h5>
|
|
178
|
+
Each customer's average purchased amount is calculated (Monetary calculation).
|
|
179
|
+
Monetary values are clustered with K-Means clustering into the 5 clusters (K=5).
|
|
180
|
+
According to each monetary value number of customers is counted per monetary segment.
|
|
181
|
+
The X-axis represents average monetary values.
|
|
182
|
+
Y-Axis represents the total number of client count per average monetary per monetary segment.
|
|
183
|
+
</div>
|
|
184
|
+
</li>
|
|
185
|
+
|
|
186
|
+
<li>
|
|
187
|
+
<div class="card-header">
|
|
188
|
+
<h5 class="card-title" style="color:green;">Recency Segmentation</h5>
|
|
189
|
+
Each customer's average time difference between the current date to last purchased date is calculated (recency calculation).
|
|
190
|
+
Recency values are clustered with K-Means clustering into the 5 clusters (K=5).
|
|
191
|
+
According to each recency value number of customers is counted per recency segment.
|
|
192
|
+
The X-axis represents average recency values.
|
|
193
|
+
Y-Axis represents the total number of client count per average recency per recency segment.
|
|
194
|
+
</div>
|
|
195
|
+
</li>
|
|
196
|
+
</ul>
|
|
197
|
+
</div>
|
|
198
|
+
</div>
|
|
199
|
+
</div>
|
|
200
|
+
</div>
|
|
201
|
+
|
|
202
|
+
<div class="col-md-6">
|
|
203
|
+
<div class="card">
|
|
204
|
+
<div class="card-header">
|
|
205
|
+
<h5 class="card-title">Customer Segmentation {% if data_type['segmentation'] == False %} <strong style="color:red;"> sample data </strong> {% endif %}</h5>
|
|
206
|
+
</div>
|
|
207
|
+
|
|
208
|
+
<div id="segment_id" class="plotly-gra ph-div" style="height:400px;"></div>
|
|
209
|
+
</div>
|
|
210
|
+
</div>
|
|
211
|
+
<div class="col-md-6">
|
|
212
|
+
<div class="card">
|
|
213
|
+
<div class="card-header">
|
|
214
|
+
<h5 class="card-title">Frequency Segmentation {% if data_type['frequency_clusters'] == False %} <strong style="color:red;"> sample data </strong> {% endif %}</h5>
|
|
215
|
+
</div>
|
|
216
|
+
<div class="card-body">
|
|
217
|
+
<div id="f_segment_id" class="plotly-gra ph-div" style="height:400px;"></div>
|
|
218
|
+
</div>
|
|
219
|
+
</div>
|
|
220
|
+
</div>
|
|
221
|
+
</div>
|
|
222
|
+
<div class="row">
|
|
223
|
+
<div class="col-md-6">
|
|
224
|
+
<div class="card">
|
|
225
|
+
<div class="card-header">
|
|
226
|
+
<h5 class="card-title">Monetary Segmentation {% if data_type['monetary_clusters'] == False %} <strong style="color:red;"> sample data </strong> {% endif %}</h5>
|
|
227
|
+
</div>
|
|
228
|
+
<div class="card-body">
|
|
229
|
+
<div id="m_segment_id" class="plotly-gra ph-div" style="height:400px;"></div>
|
|
230
|
+
</div>
|
|
231
|
+
</div>
|
|
232
|
+
</div>
|
|
233
|
+
<div class="col-md-6">
|
|
234
|
+
<div class="card">
|
|
235
|
+
<div class="card-header">
|
|
236
|
+
<h5 class="card-title">Recency Segmentation {% if data_type['recency_clusters'] == False %} <strong style="color:red;"> sample data </strong> {% endif %}</h5>
|
|
237
|
+
</div>
|
|
238
|
+
<div class="card-body">
|
|
239
|
+
<div id="r_segment_id" class="plotly-gra ph-div" style="height:400px;"></div>
|
|
240
|
+
</div>
|
|
241
|
+
</div>
|
|
242
|
+
</div>
|
|
243
|
+
</div>
|
|
244
|
+
</div>
|
|
245
|
+
</div>
|
|
246
|
+
</div>
|
|
247
|
+
</div>
|
|
248
|
+
</main>
|
|
249
|
+
|
|
250
|
+
{% endblock content %}
|
|
251
|
+
|
|
252
|
+
<!-- Specific Page JS goes HERE -->
|
|
253
|
+
{% block javascripts %}
|
|
254
|
+
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
|
|
255
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.6/d3.min.js"></script>
|
|
256
|
+
<script>
|
|
257
|
+
|
|
258
|
+
var segment = {{segmentation | safe}};
|
|
259
|
+
|
|
260
|
+
Plotly.plot('segment_id', // the ID of the div, created above
|
|
261
|
+
segment.trace, segment.layout, {});
|
|
262
|
+
|
|
263
|
+
var f_segment = {{frequency_clusters | safe}};
|
|
264
|
+
|
|
265
|
+
Plotly.plot('f_segment_id', // the ID of the div, created above
|
|
266
|
+
f_segment.trace, f_segment.layout, {});
|
|
267
|
+
|
|
268
|
+
var m_segment = {{monetary_clusters | safe}};
|
|
269
|
+
|
|
270
|
+
Plotly.plot('m_segment_id', // the ID of the div, created above
|
|
271
|
+
m_segment.trace, m_segment.layout, {});
|
|
272
|
+
|
|
273
|
+
var r_segment = {{recency_clusters | safe}};
|
|
274
|
+
|
|
275
|
+
Plotly.plot('r_segment_id', // the ID of the div, created above
|
|
276
|
+
r_segment.trace, r_segment.layout, {});
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
function myFunction() {
|
|
284
|
+
// Get the checkbox
|
|
285
|
+
var checkBox = document.getElementById("myCheck");
|
|
286
|
+
// Get the output text
|
|
287
|
+
var text = document.getElementById("text");
|
|
288
|
+
|
|
289
|
+
// If the checkbox is checked, display the output text
|
|
290
|
+
if (checkBox.checked == true){
|
|
291
|
+
text.style.display = "block";
|
|
292
|
+
} else {
|
|
293
|
+
text.style.display = "none";
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
</script>
|
|
297
|
+
|
|
298
|
+
<script>
|
|
299
|
+
document.addEventListener("DOMContentLoaded", function() {
|
|
300
|
+
document.getElementById("datetimepicker-dashboard").flatpickr({
|
|
301
|
+
inline: true,
|
|
302
|
+
|
|
303
|
+
prevArrow: "<span class=\"fas fa-chevron-left\" title=\"Previous month\"></span>",
|
|
304
|
+
nextArrow: "<span class=\"fas fa-chevron-right\" title=\"Next month\"></span>",
|
|
305
|
+
});
|
|
306
|
+
});
|
|
307
|
+
</script>
|
|
308
|
+
{% endblock javascripts %}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
{% extends "layouts/base.html" %}
|
|
2
|
+
|
|
3
|
+
{% block title %} ElasticSearch connection {% endblock %}
|
|
4
|
+
|
|
5
|
+
<!-- Specific Page CSS goes HERE -->
|
|
6
|
+
{% block stylesheets %}{% endblock stylesheets %}
|
|
7
|
+
|
|
8
|
+
{% block content %}
|
|
9
|
+
|
|
10
|
+
<main class="content">
|
|
11
|
+
<div class="container-fluid p-0">
|
|
12
|
+
<h5 class="h3 mb-3">ElasticSearch Connection</h5>
|
|
13
|
+
<div class="col-md-12">
|
|
14
|
+
<form method="POST">
|
|
15
|
+
<div class="card">
|
|
16
|
+
<div class="card-header">
|
|
17
|
+
<h5 class="card-title"><strong>ElasticSearch Settings</strong> </h5>
|
|
18
|
+
<div class="row">
|
|
19
|
+
<h6 class="card-subtitle text-muted mb-1">
|
|
20
|
+
<strong style="color:green;"> ElasticSearch : </strong> is a search engine based on the Lucene library.
|
|
21
|
+
The reason for it is flexibility when it has been querying, data sets (Session, customer, Basket Data Sources)
|
|
22
|
+
will be stored in ElasticSearch with 2 main indexes, Orders (Sessions) and Downloads (Customers data Source)
|
|
23
|
+
</h6>
|
|
24
|
+
</div>
|
|
25
|
+
|
|
26
|
+
</div>
|
|
27
|
+
<div class="card-body">
|
|
28
|
+
<div class="row">
|
|
29
|
+
<div class="col-md-12">
|
|
30
|
+
<div class="card">
|
|
31
|
+
<div class="card-header">
|
|
32
|
+
<h5 class="card-title"><strong style="color:green;">ElasticSearch Configurations</strong></h5>
|
|
33
|
+
<h6 class="card-subtitle text-muted">
|
|
34
|
+
<div class="row">
|
|
35
|
+
- Make sure the platform is eligible to query and update ElasticSearch
|
|
36
|
+
</div>
|
|
37
|
+
<div class="row">
|
|
38
|
+
- It is possible to download and use the server locally. by default, the port is 9200.
|
|
39
|
+
</div>
|
|
40
|
+
</h6>
|
|
41
|
+
</div>
|
|
42
|
+
<div class="card-body">
|
|
43
|
+
{% if values['es_connection'] == '....' %}
|
|
44
|
+
{% if values['es_connection_check'] != '....' %}
|
|
45
|
+
<div class="mb-3">
|
|
46
|
+
<strong style="color:red;">Can not connect to ElasticSearch. {{ values['es_connection_check'] }}</strong>
|
|
47
|
+
</div>
|
|
48
|
+
{% endif %}
|
|
49
|
+
<div class="mb-3">
|
|
50
|
+
<label class="form-label" for="inputUsername">tag ElasticSearch connection</label>
|
|
51
|
+
<input name="tag" type="text" class="form-control" id="inputUsername" placeholder="assign a name to connection" required>
|
|
52
|
+
</div>
|
|
53
|
+
|
|
54
|
+
<div class="mb-3">
|
|
55
|
+
<label class="form-label" for="inputUsername">host</label>
|
|
56
|
+
<input name="host" type="text" class="form-control" id="inputHost" placeholder="host" required>
|
|
57
|
+
</div>
|
|
58
|
+
|
|
59
|
+
<div class="mb-3">
|
|
60
|
+
<label class="form-label" for="inputUsername">port</label>
|
|
61
|
+
<input name="port" type="text" class="form-control" id="inputPort" placeholder="port" required>
|
|
62
|
+
</div>
|
|
63
|
+
|
|
64
|
+
<div class="mb-3">
|
|
65
|
+
<label class="form-label mb-1" for="inputUsername">Temporary Folder Directory</label>
|
|
66
|
+
<h5 class="mb-3" style="color:green;">
|
|
67
|
+
- CLV Prediction process will use this folder for import results with '.csv' format.
|
|
68
|
+
</h5>
|
|
69
|
+
<h5 class="mb-3" style="color:green;">
|
|
70
|
+
- In order to import Charts of data in '.csv' format 'built_in_reports' folder will be created at this folder.
|
|
71
|
+
</h5>
|
|
72
|
+
<input name="directory" type="text" class="form-control" id="esDirectory" placeholder="enter folder path" required>
|
|
73
|
+
</div>
|
|
74
|
+
|
|
75
|
+
<div class="mb-3">
|
|
76
|
+
<label class="form-label" for="inputUsername">Download ElasticSearch</label>
|
|
77
|
+
</div>
|
|
78
|
+
<div class="mb-3">
|
|
79
|
+
<a href="https://www.elastic.co/elasticsearch/" target="_blank">Download ElasticSearch! https://www.elastic.co/elasticsearch/</a>
|
|
80
|
+
</div>
|
|
81
|
+
<div class="row">
|
|
82
|
+
<div class="mb-1 col-md-12">
|
|
83
|
+
<label class="form-label" for="inputFirstName">CPU Max Capacity And RAM Max Capacity</label>
|
|
84
|
+
<h5 class="mb-3" style="color:green;"> It is important to run ElasticSearch server with;
|
|
85
|
+
</h5>
|
|
86
|
+
</div>
|
|
87
|
+
<div class="mb-1 col-order-10">
|
|
88
|
+
<h5 class="mb-3" style="color:blue;"> ES_JAVA_OPTS="-Xms4g -Xmx4g" </h5>
|
|
89
|
+
</div>
|
|
90
|
+
<div class="mb-1 col-md-12">
|
|
91
|
+
<h5 class="mb-3" style="color:green;">
|
|
92
|
+
This will help us to improve the capacity of ElasticSearch that is able to use.
|
|
93
|
+
</h5>
|
|
94
|
+
</div>
|
|
95
|
+
</div>
|
|
96
|
+
<div class="mb-3">
|
|
97
|
+
<label class="form-label" for="inputCity">URL</label>
|
|
98
|
+
<input name="url" type="text" class="form-control" id="port" placeholder="http://localhost:9200">
|
|
99
|
+
<small> Optional - generated with host and port</small>
|
|
100
|
+
</div>
|
|
101
|
+
<button name="connect" type="submit" value="True" class="btn btn-primary">Connect</button>
|
|
102
|
+
{% endif %}
|
|
103
|
+
{% if values['es_connection'] != '....' %}
|
|
104
|
+
<div class="mb-3">
|
|
105
|
+
<h5 class="mb-3" style="color:green;">connected ElasticSearch!</h5>
|
|
106
|
+
<a class="mb-3" href="{{ values['es_connection']['tag'] }} - {{ 'http://'+ values['es_connection']['host'] + ':' +values['es_connection']['port'] }}"
|
|
107
|
+
target="_blank">{{ values['es_connection']['tag'] }} - {{ 'http://'+ values['es_connection']['host'] + ':' +values['es_connection']['port'] }}
|
|
108
|
+
</a>
|
|
109
|
+
<div class="mb-3">
|
|
110
|
+
<strong style="color:green;"> Temporary Folder Directory; </strong> {{ values['es_connection']['directory'] }}
|
|
111
|
+
</div>
|
|
112
|
+
|
|
113
|
+
</div>
|
|
114
|
+
<div class="mb-3">
|
|
115
|
+
<button name="delete" type="submit" value="True" class="btn btn-primary">Delete Connection</button>
|
|
116
|
+
</div>
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
{% endif %}
|
|
123
|
+
</div>
|
|
124
|
+
</div>
|
|
125
|
+
</div>
|
|
126
|
+
</div>
|
|
127
|
+
</div>
|
|
128
|
+
</div>
|
|
129
|
+
</form>
|
|
130
|
+
|
|
131
|
+
</div>
|
|
132
|
+
</div>
|
|
133
|
+
</main>
|
|
134
|
+
|
|
135
|
+
{% endblock content %}
|
|
136
|
+
|
|
137
|
+
<script>
|
|
138
|
+
function myFunction() {
|
|
139
|
+
// Get the checkbox
|
|
140
|
+
var checkBox = document.getElementById("myCheck");
|
|
141
|
+
// Get the output text
|
|
142
|
+
var text = document.getElementById("text");
|
|
143
|
+
|
|
144
|
+
// If the checkbox is checked, display the output text
|
|
145
|
+
if (checkBox.checked == true){
|
|
146
|
+
text.style.display = "block";
|
|
147
|
+
} else {
|
|
148
|
+
text.style.display = "none";
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
</script>
|
|
152
|
+
{% block javascripts %}{% endblock javascripts %}
|