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,81 @@
|
|
|
1
|
+
{% extends "layouts/base-fullscreen.html" %}
|
|
2
|
+
|
|
3
|
+
{% block title %} Login {% endblock %}
|
|
4
|
+
|
|
5
|
+
<!-- Specific Page CSS goes HERE -->
|
|
6
|
+
{% block stylesheets %}{% endblock stylesheets %}
|
|
7
|
+
|
|
8
|
+
{% block content %}
|
|
9
|
+
|
|
10
|
+
<main class="d-flex w-100">
|
|
11
|
+
<div class="container d-flex flex-column">
|
|
12
|
+
<div class="row vh-100">
|
|
13
|
+
<div class="col-sm-10 col-md-8 col-lg-6 mx-auto d-table h-100">
|
|
14
|
+
<div class="d-table-cell align-middle">
|
|
15
|
+
|
|
16
|
+
<div class="text-center mt-4">
|
|
17
|
+
<h1 class="h2">
|
|
18
|
+
<img src="/static/assets/img/icons/customanality.png">
|
|
19
|
+
</h1>
|
|
20
|
+
<p class="lead">
|
|
21
|
+
{% if msg %}
|
|
22
|
+
{{ msg | safe }}
|
|
23
|
+
{% else %}
|
|
24
|
+
Sign in to your account to continue
|
|
25
|
+
{% endif %}
|
|
26
|
+
</p>
|
|
27
|
+
</div>
|
|
28
|
+
|
|
29
|
+
<div class="card">
|
|
30
|
+
<div class="card-body">
|
|
31
|
+
<div class="m-sm-4">
|
|
32
|
+
|
|
33
|
+
<form role="form" method="post" action="">
|
|
34
|
+
|
|
35
|
+
{{ form.hidden_tag() }}
|
|
36
|
+
|
|
37
|
+
<div class="mb-3">
|
|
38
|
+
<label class="form-label">Username</label>
|
|
39
|
+
{{ form.username(placeholder="Username", class="form-control form-control-lg") }}
|
|
40
|
+
</div>
|
|
41
|
+
<div class="mb-3">
|
|
42
|
+
<label class="form-label">Password</label>
|
|
43
|
+
{{ form.password(placeholder="Password", class="form-control form-control-lg", type="password") }}
|
|
44
|
+
</div>
|
|
45
|
+
<div>
|
|
46
|
+
<label class="form-check">
|
|
47
|
+
<input class="form-check-input" type="checkbox" value="remember-me" name="remember-me" checked>
|
|
48
|
+
<span class="form-check-label">
|
|
49
|
+
Remember me next time
|
|
50
|
+
</span>
|
|
51
|
+
</label>
|
|
52
|
+
</div>
|
|
53
|
+
<div class="text-center mt-3">
|
|
54
|
+
<button type="submit" name="login" class="btn btn-lg btn-primary">Login</button>
|
|
55
|
+
</div>
|
|
56
|
+
</form>
|
|
57
|
+
|
|
58
|
+
<br />
|
|
59
|
+
<div class="text-center">
|
|
60
|
+
|
|
61
|
+
<p class="mb-0 text-muted">
|
|
62
|
+
Don’t have an account? <a href="{{ url_for('base_blueprint.register') }}" >Signup</a></p>
|
|
63
|
+
<br />
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
</div>
|
|
67
|
+
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
|
|
72
|
+
</div>
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
</div>
|
|
76
|
+
</main>
|
|
77
|
+
|
|
78
|
+
{% endblock content %}
|
|
79
|
+
|
|
80
|
+
<!-- Specific Page JS goes HERE -->
|
|
81
|
+
{% block javascripts %}{% endblock javascripts %}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
{% extends "layouts/base-fullscreen.html" %}
|
|
2
|
+
|
|
3
|
+
{% block title %} Register {% endblock %}
|
|
4
|
+
|
|
5
|
+
<!-- Specific Page CSS goes HERE -->
|
|
6
|
+
{% block stylesheets %}{% endblock stylesheets %}
|
|
7
|
+
|
|
8
|
+
{% block content %}
|
|
9
|
+
|
|
10
|
+
<main class="d-flex w-100">
|
|
11
|
+
<div class="container d-flex flex-column">
|
|
12
|
+
<div class="row vh-100">
|
|
13
|
+
<div class="col-sm-10 col-md-8 col-lg-6 mx-auto d-table h-100">
|
|
14
|
+
<div class="d-table-cell align-middle">
|
|
15
|
+
|
|
16
|
+
<div class="text-center mt-4">
|
|
17
|
+
<h1 class="h2">
|
|
18
|
+
Customer Analytics
|
|
19
|
+
</h1>
|
|
20
|
+
<p class="lead">
|
|
21
|
+
{% if msg %}
|
|
22
|
+
{{ msg | safe }}
|
|
23
|
+
{% else %}
|
|
24
|
+
Add your credentials
|
|
25
|
+
{% endif %}
|
|
26
|
+
</p>
|
|
27
|
+
</div>
|
|
28
|
+
|
|
29
|
+
<div class="card">
|
|
30
|
+
<div class="card-body">
|
|
31
|
+
<div class="m-sm-4">
|
|
32
|
+
|
|
33
|
+
<form role="form" method="post" action="">
|
|
34
|
+
|
|
35
|
+
{{ form.hidden_tag() }}
|
|
36
|
+
|
|
37
|
+
<div class="mb-3">
|
|
38
|
+
<label class="form-label">Username</label>
|
|
39
|
+
{{ form.username(placeholder="Username", class="form-control form-control-lg") }}
|
|
40
|
+
</div>
|
|
41
|
+
|
|
42
|
+
<div class="mb-3">
|
|
43
|
+
<label class="form-label">Email</label>
|
|
44
|
+
{{ form.email(placeholder="Email", class="input form-control form-control-lg", type="email") }}
|
|
45
|
+
</div>
|
|
46
|
+
|
|
47
|
+
<div class="mb-3">
|
|
48
|
+
<label class="form-label">Password</label>
|
|
49
|
+
{{ form.password(placeholder="Password", class="form-control form-control-lg", type="password") }}
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
<div class="text-center mt-3">
|
|
53
|
+
<button type="submit" name="register" class="btn btn-lg btn-primary">Register</button>
|
|
54
|
+
</div>
|
|
55
|
+
</form>
|
|
56
|
+
|
|
57
|
+
<br />
|
|
58
|
+
<div class="text-center">
|
|
59
|
+
|
|
60
|
+
<p class="mb-0 text-muted">
|
|
61
|
+
Already have an account? <a href="{{ url_for('base_blueprint.login') }}" >Login</a></p>
|
|
62
|
+
<br />
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
</div>
|
|
66
|
+
|
|
67
|
+
</div>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
|
|
71
|
+
</div>
|
|
72
|
+
</div>
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
</main>
|
|
76
|
+
|
|
77
|
+
{% endblock content %}
|
|
78
|
+
|
|
79
|
+
<!-- Specific Page JS goes HERE -->
|
|
80
|
+
{% block javascripts %}{% endblock javascripts %}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
|
|
2
|
+
<footer class="footer">
|
|
3
|
+
<div class="container-fluid">
|
|
4
|
+
<div class="row text-muted">
|
|
5
|
+
<div class="col-6 text-left">
|
|
6
|
+
<p class="mb-0">
|
|
7
|
+
<a target="_blank" href="https://github.com/caglanakpinar/customer_analytics" class="text-muted">
|
|
8
|
+
© <strong>caglanakpinar</strong>
|
|
9
|
+
</a>
|
|
10
|
+
- coded by <a target="_blank" href="https://github.com/caglanakpinar">caglanakpinar</a>
|
|
11
|
+
</p>
|
|
12
|
+
</div>
|
|
13
|
+
<div class="col-6 text-right">
|
|
14
|
+
<ul class="list-inline">
|
|
15
|
+
<li class="list-inline-item">
|
|
16
|
+
<a class="text-muted"
|
|
17
|
+
target="_blank" href="https://github.com/caglanakpinar/customer_analytics/issues">Support</a>
|
|
18
|
+
</li>
|
|
19
|
+
<li class="list-inline-item">
|
|
20
|
+
<a class="text-muted"
|
|
21
|
+
target="_blank" href="https://github.com/caglanakpinar/customer_analytics">Sources</a>
|
|
22
|
+
</li>
|
|
23
|
+
</ul>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
27
|
+
</footer>
|
|
28
|
+
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
|
|
2
|
+
<nav class="navbar navbar-expand navbar-light navbar-bg">
|
|
3
|
+
<a class="sidebar-toggle d-flex">
|
|
4
|
+
<i class="hamburger align-self-center"></i>
|
|
5
|
+
</a>
|
|
6
|
+
|
|
7
|
+
<form class="d-none d-sm-inline-block" method="POST" action="/search">
|
|
8
|
+
<div class="input-group input-group-navbar">
|
|
9
|
+
<input name="search"
|
|
10
|
+
type="text" class="form-control" placeholder="Search…" aria-label="Search">
|
|
11
|
+
<button class="btn" type="submit" >
|
|
12
|
+
<i class="align-middle" data-feather="search"></i>
|
|
13
|
+
</button>
|
|
14
|
+
</div>
|
|
15
|
+
</form>
|
|
16
|
+
|
|
17
|
+
<div class="navbar-collapse collapse">
|
|
18
|
+
<ul class="navbar-nav navbar-align">
|
|
19
|
+
|
|
20
|
+
<li class="nav-item dropdown">
|
|
21
|
+
<a class="nav-icon dropdown-toggle d-inline-block d-sm-none" href="#" data-toggle="dropdown">
|
|
22
|
+
<i class="align-middle" data-feather="settings"></i>
|
|
23
|
+
</a>
|
|
24
|
+
|
|
25
|
+
<a class="nav-link dropdown-toggle d-none d-sm-inline-block" href="#" data-toggle="dropdown">
|
|
26
|
+
{% if pic != 'None' %}
|
|
27
|
+
<img src="/static/assets/img/avatars/{{ pic }}" class="avatar img-fluid rounded mr-1" />
|
|
28
|
+
{% endif %}
|
|
29
|
+
<span class="text-dark">
|
|
30
|
+
{{ current_user.username }}
|
|
31
|
+
</span>
|
|
32
|
+
</a>
|
|
33
|
+
|
|
34
|
+
<div class="dropdown-menu dropdown-menu-right">
|
|
35
|
+
<a class="dropdown-item" href="/profile.html">
|
|
36
|
+
<i class="align-middle mr-1" data-feather="user"></i> Profile</a>
|
|
37
|
+
<a class="dropdown-item" href="index.html">
|
|
38
|
+
<i class="align-middle mr-1" data-feather="pie-chart"></i> Dashboards</a>
|
|
39
|
+
<div class="dropdown-divider"></div>
|
|
40
|
+
<a class="dropdown-item" href="settings.html">
|
|
41
|
+
<i class="align-middle mr-1" data-feather="settings"></i> Settings & Privacy</a>
|
|
42
|
+
<a class="dropdown-item" href="https://github.com/caglanakpinar/customer_analytics/issues">
|
|
43
|
+
<i class="align-middle mr-1" data-feather="help-circle"></i> Help Center</a>
|
|
44
|
+
<div class="dropdown-divider"></div>
|
|
45
|
+
<a class="dropdown-item" href="{{ url_for('base_blueprint.logout') }}">Log out</a>
|
|
46
|
+
</div>
|
|
47
|
+
</li>
|
|
48
|
+
</ul>
|
|
49
|
+
</div>
|
|
50
|
+
</nav>
|
|
51
|
+
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
|
|
2
|
+
<nav id="sidebar" class="sidebar">
|
|
3
|
+
<div class="sidebar-content js-simplebar">
|
|
4
|
+
<a class="sidebar-brand" href="index">
|
|
5
|
+
<span class="align-middle"><img src="/static/assets/img/icons/customanality.png"></span>
|
|
6
|
+
</a>
|
|
7
|
+
|
|
8
|
+
<ul class="sidebar-nav">
|
|
9
|
+
<li class="sidebar-header">
|
|
10
|
+
Configurations
|
|
11
|
+
</li>
|
|
12
|
+
|
|
13
|
+
<li class="sidebar-item">
|
|
14
|
+
<a data-target="#profile" data-toggle="collapse" class="sidebar-link collapsed">
|
|
15
|
+
<i class="align-middle" data-feather="user"></i> <span class="align-middle">Profile & Settings</span>
|
|
16
|
+
</a>
|
|
17
|
+
<ul id="profile" class="sidebar-dropdown list-unstyled collapse {% if 'profile' in segment or 'settings' in segment or 'pages-sign-in' in segment or 'pages-sign-up' in segment %} show {% endif %}" data-parent="#sidebar">
|
|
18
|
+
<li class="sidebar-item {% if 'profile' in segment %} active {% endif %}"><a class="sidebar-link" href="profile.html">Profile</a></li>
|
|
19
|
+
<li class="sidebar-item {% if 'settings' in segment %} active {% endif %}"><a class="sidebar-link" href="settings.html">Settings</a></li>
|
|
20
|
+
<li class="sidebar-item {% if 'pages-sign-up' in segment %} active {% endif %}"><a class="sidebar-link" href="pages-sign-in.html">Sign In</a></li>
|
|
21
|
+
<li class="sidebar-item {% if 'pages-sign-up' in segment %} active {% endif %}"><a class="sidebar-link" href="pages-sign-up.html">Sign Up</a></li>
|
|
22
|
+
</ul>
|
|
23
|
+
</li>
|
|
24
|
+
|
|
25
|
+
<li class="sidebar-header">
|
|
26
|
+
Data Source
|
|
27
|
+
</li>
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
<li class="sidebar-item">
|
|
31
|
+
<a data-target="#integration" data-toggle="collapse" class="sidebar-link collapsed">
|
|
32
|
+
<i class="align-middle" data-feather="database"></i> <span class="align-middle">Create Data Source</span>
|
|
33
|
+
</a>
|
|
34
|
+
<ul id="integration" class="sidebar-dropdown list-unstyled collapse {% if 'add' in segment or 'manage' in segment or 'data-es' in segment %} show {% endif %}" data-parent="#sidebar">
|
|
35
|
+
<li class="sidebar-item {% if 'data-es' in segment %} active {% endif %}"><a class="sidebar-link" href="data-es">ElasticSearch Configurations</a></li>
|
|
36
|
+
<li class="sidebar-item {% if 'purchase' in segment %} active {% endif %}"><a class="sidebar-link" href="add-data-purchase">Session & Customers</a></li>
|
|
37
|
+
<li class="sidebar-item {% if 'product' in segment %} active {% endif %}"><a class="sidebar-link" href="add-data-product">Baskets</a></li>
|
|
38
|
+
<li class="sidebar-item {% if 'delivery' in segment %} active {% endif %}"><a class="sidebar-link" href="add-data-delivery">Deliveries</a></li>
|
|
39
|
+
|
|
40
|
+
</ul>
|
|
41
|
+
</li>
|
|
42
|
+
|
|
43
|
+
<li class="sidebar-item {% if 'execute' in segment %} active {% endif %}">
|
|
44
|
+
<a class="sidebar-link" href="data-execute">
|
|
45
|
+
<i class="align-middle" data-feather="clock"></i> <span class="align-middle">Schedule Data Process</span>
|
|
46
|
+
</a>
|
|
47
|
+
</li>
|
|
48
|
+
|
|
49
|
+
<li class="sidebar-header">
|
|
50
|
+
Exploratory Analysis
|
|
51
|
+
</li>
|
|
52
|
+
<li class="sidebar-item">
|
|
53
|
+
<a data-target="#funnel" data-toggle="collapse" class="sidebar-link collapsed">
|
|
54
|
+
<i class="align-middle" data-feather="briefcase"></i> <span class="align-middle">Funnels</span>
|
|
55
|
+
</a>
|
|
56
|
+
<ul id="funnel" class="sidebar-dropdown list-unstyled collapse {% if 'funnel-session' in segment or 'funnel-customer' in segment %} show {% endif %}" data-parent="#sidebar">
|
|
57
|
+
<li class="sidebar-item {% if 'funnel-session' in segment %} active {% endif %}"><a class="sidebar-link" href="funnel-session">Session of Actions Funnel</a></li>
|
|
58
|
+
<li class="sidebar-item {% if 'funnel-customer' in segment %} active {% endif %}"><a class="sidebar-link" href="funnel-customer">Customer of Actions Funnel</a></li>
|
|
59
|
+
</ul>
|
|
60
|
+
</li>
|
|
61
|
+
<li class="sidebar-item">
|
|
62
|
+
<a data-target="#cohort" data-toggle="collapse" class="sidebar-link collapsed">
|
|
63
|
+
<i class="align-middle" data-feather="briefcase"></i> <span class="align-middle">Cohorts</span>
|
|
64
|
+
</a>
|
|
65
|
+
<ul id="cohort" class="sidebar-dropdown list-unstyled collapse {% if 'cohorts' in segment %} show {% endif %}" data-parent="#sidebar">
|
|
66
|
+
<li class="sidebar-item {% if 'cohorts' in segment %} active {% endif %}"><a class="sidebar-link" href="cohorts">Daily/Weekly Order Cohorts</a></li>
|
|
67
|
+
</ul>
|
|
68
|
+
</li>
|
|
69
|
+
|
|
70
|
+
<li class="sidebar-item">
|
|
71
|
+
<a data-target="#stats" data-toggle="collapse" class="sidebar-link collapsed">
|
|
72
|
+
<i class="align-middle" data-feather="briefcase"></i> <span class="align-middle">Descriptive Stats</span>
|
|
73
|
+
</a>
|
|
74
|
+
<ul id="stats" class="sidebar-dropdown list-unstyled collapse {% if 'stats' in segment %} show {% endif %}" data-parent="#sidebar">
|
|
75
|
+
<li class="sidebar-item {% if 'stats-purchase' in segment %} active {% endif %}"><a class="sidebar-link" href="stats-purchase">Stats Purchase</a></li>
|
|
76
|
+
<li class="sidebar-item {% if 'stats-desc' in segment %} active {% endif %}"><a class="sidebar-link" href="stats-desc">Descriptive Statistics</a></li>
|
|
77
|
+
</ul>
|
|
78
|
+
</li>
|
|
79
|
+
|
|
80
|
+
<li class="sidebar-item">
|
|
81
|
+
<a data-target="#product-analytics" data-toggle="collapse" class="sidebar-link collapsed">
|
|
82
|
+
<i class="align-middle" data-feather="briefcase"></i> <span class="align-middle">Product Analytics</span>
|
|
83
|
+
</a>
|
|
84
|
+
<ul id="product-analytics" class="sidebar-dropdown list-unstyled collapse " data-parent="#sidebar">
|
|
85
|
+
<li class="sidebar-item"><a class="sidebar-link" href="product">Top Purchased Products</a></li>
|
|
86
|
+
</ul>
|
|
87
|
+
</li>
|
|
88
|
+
|
|
89
|
+
<li class="sidebar-header">
|
|
90
|
+
ML Works
|
|
91
|
+
</li>
|
|
92
|
+
|
|
93
|
+
<li class="sidebar-item">
|
|
94
|
+
<a data-target="#abtest" data-toggle="collapse" class="sidebar-link collapsed">
|
|
95
|
+
<i class="align-middle" data-feather="briefcase"></i> <span class="align-middle">A/B Tests</span>
|
|
96
|
+
</a>
|
|
97
|
+
<ul id="abtest" class="sidebar-dropdown list-unstyled collapse {% if 'abtest' in segment %} show {% endif %}" data-parent="#sidebar">
|
|
98
|
+
<li class="sidebar-item {% if 'abtest-promotion' in segment %} active {% endif %}"><a class="sidebar-link" href="abtest-promotion">A/B Test Promotion</a></li>
|
|
99
|
+
<li class="sidebar-item {% if 'abtest-product' in segment %} active {% endif %}"><a class="sidebar-link" href="abtest-product">A/B Test Product</a></li>
|
|
100
|
+
<li class="sidebar-item {% if 'abtest-segments' in segment %} active {% endif %}"><a class="sidebar-link" href="abtest-segments">A/B Test Customer Segment Change</a></li>
|
|
101
|
+
</ul>
|
|
102
|
+
</li>
|
|
103
|
+
|
|
104
|
+
<li class="sidebar-item">
|
|
105
|
+
<a data-target="#customer-segmentation" data-toggle="collapse" class="sidebar-link collapsed">
|
|
106
|
+
<i class="align-middle" data-feather="briefcase"></i> <span class="align-middle">Customer Segmentation</span>
|
|
107
|
+
</a>
|
|
108
|
+
<ul id="customer-segmentation" class="sidebar-dropdown list-unstyled collapse {% if 'customer-segmentation' in segment or 'rfm' in segment %} show {% endif %}" data-parent="#sidebar">
|
|
109
|
+
<li class="sidebar-item {% if 'rfm' in segment %} active {% endif %}"><a class="sidebar-link" href="rfm">RFM</a></li>
|
|
110
|
+
<li class="sidebar-item {% if 'customer-segmentation' in segment %} active {% endif %}"><a class="sidebar-link" href="customer-segmentation">Segmentations</a></li>
|
|
111
|
+
</ul>
|
|
112
|
+
</li>
|
|
113
|
+
|
|
114
|
+
<li class="sidebar-item">
|
|
115
|
+
<a data-target="#clv" data-toggle="{% if 'clv' in segment %} active {% endif %}" class="sidebar-link collapsed" href="clv">
|
|
116
|
+
<i class="align-middle" data-feather="briefcase"></i> <span class="align-middle" >CLV Prediction</span>
|
|
117
|
+
</a>
|
|
118
|
+
</li>
|
|
119
|
+
|
|
120
|
+
<li class="sidebar-item">
|
|
121
|
+
<a data-target="#anomaly" data-toggle="{% if 'anomaly' in segment %} active {% endif %}" class="sidebar-link collapsed" href="anomaly">
|
|
122
|
+
<i class="align-middle" data-feather="briefcase"></i> <span class="align-middle">Anomaly Detection</span>
|
|
123
|
+
</a>
|
|
124
|
+
</li>
|
|
125
|
+
|
|
126
|
+
<li class="sidebar-item">
|
|
127
|
+
<a data-target="#delivery" data-toggle="{% if 'delivery' in segment %} active {% endif %}" class="sidebar-link collapsed" href="delivery">
|
|
128
|
+
<i class="align-middle" data-feather="briefcase"></i> <span class="align-middle">Delivery Analytics</span>
|
|
129
|
+
</a>
|
|
130
|
+
</li>
|
|
131
|
+
|
|
132
|
+
<li class="sidebar-header">
|
|
133
|
+
Auth
|
|
134
|
+
</li>
|
|
135
|
+
<li class="sidebar-item">
|
|
136
|
+
<a class="sidebar-link" href="{{ url_for('base_blueprint.logout') }}">
|
|
137
|
+
<i class="align-middle" data-feather="log-out"></i>
|
|
138
|
+
<span class="align-middle">Logout</span>
|
|
139
|
+
</a>
|
|
140
|
+
</li>
|
|
141
|
+
|
|
142
|
+
</ul>
|
|
143
|
+
|
|
144
|
+
</div>
|
|
145
|
+
</nav>
|
|
146
|
+
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
|
|
4
|
+
<head>
|
|
5
|
+
<meta charset="utf-8">
|
|
6
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
7
|
+
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
|
8
|
+
<meta name="description" content="Responsive Admin & Dashboard - Customer Analytics">
|
|
9
|
+
<meta name="author" content="CustomerAnalytics">
|
|
10
|
+
<meta name="keywords" content="Customer Analytics">
|
|
11
|
+
|
|
12
|
+
<link rel="shortcut icon" href="/static/assets/img/icons/icon-48x48.png" />
|
|
13
|
+
<link id="asd" rel="shortcut icon" href="/static/assets/img/icons/customanality.png" />
|
|
14
|
+
|
|
15
|
+
<title>
|
|
16
|
+
CustomerAnalytics - {% block title %}{% endblock %}
|
|
17
|
+
</title>
|
|
18
|
+
|
|
19
|
+
<link href="/static/assets/css/app.css" rel="stylesheet">
|
|
20
|
+
|
|
21
|
+
<!-- Specific Page CSS goes HERE -->
|
|
22
|
+
{% block stylesheets %}{% endblock stylesheets %}
|
|
23
|
+
|
|
24
|
+
</head>
|
|
25
|
+
|
|
26
|
+
<body>
|
|
27
|
+
|
|
28
|
+
{% block content %}{% endblock content %}
|
|
29
|
+
|
|
30
|
+
{% include 'includes/scripts.html' %}
|
|
31
|
+
|
|
32
|
+
<!-- Specific Page JS goes HERE -->
|
|
33
|
+
{% block javascripts %}{% endblock javascripts %}
|
|
34
|
+
|
|
35
|
+
</body>
|
|
36
|
+
</html>
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
|
|
4
|
+
<head>
|
|
5
|
+
<meta charset="utf-8">
|
|
6
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
7
|
+
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
|
8
|
+
<meta name="description" content="Responsive Admin & Dashboard - Customer Analytics">
|
|
9
|
+
<meta name="author" content="customanality">
|
|
10
|
+
<meta name="keywords" content="customanality Customer Analytics">
|
|
11
|
+
|
|
12
|
+
<link rel="shortcut icon" href="/static/assets/img/icons/icon-48x48.png" />
|
|
13
|
+
<link rel="shortcut icon" href="/static/assets/img/icons/customanality.png" />
|
|
14
|
+
|
|
15
|
+
<title>
|
|
16
|
+
CustomerAnalytics - {% block title %}{% endblock %}
|
|
17
|
+
</title>
|
|
18
|
+
|
|
19
|
+
<link href="/static/assets/css/app.css" rel="stylesheet">
|
|
20
|
+
|
|
21
|
+
<!-- Specific Page CSS goes HERE -->
|
|
22
|
+
{% block stylesheets %}{% endblock stylesheets %}
|
|
23
|
+
|
|
24
|
+
</head>
|
|
25
|
+
|
|
26
|
+
<body>
|
|
27
|
+
<div class="wrapper">
|
|
28
|
+
|
|
29
|
+
{% include 'includes/sidebar.html' %}
|
|
30
|
+
|
|
31
|
+
<div class="main">
|
|
32
|
+
|
|
33
|
+
{% include 'includes/navigation.html' %}
|
|
34
|
+
|
|
35
|
+
{% block content %}{% endblock content %}
|
|
36
|
+
|
|
37
|
+
{% include 'includes/footer.html' %}
|
|
38
|
+
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
41
|
+
<style>
|
|
42
|
+
|
|
43
|
+
#profileImage {
|
|
44
|
+
width: 150px;
|
|
45
|
+
height: 150px;
|
|
46
|
+
border-radius: 50%;
|
|
47
|
+
background: #512DA8;
|
|
48
|
+
font-size: 35px;
|
|
49
|
+
color: #fff;
|
|
50
|
+
text-align: center;
|
|
51
|
+
line-height: 150px;
|
|
52
|
+
margin: 20px 0;
|
|
53
|
+
}
|
|
54
|
+
</style>
|
|
55
|
+
|
|
56
|
+
{% include 'includes/scripts.html' %}
|
|
57
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.6/d3.min.js"></script>
|
|
58
|
+
<!-- jQuery -->
|
|
59
|
+
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
|
|
60
|
+
<!-- Specific Page JS goes HERE -->
|
|
61
|
+
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
|
|
62
|
+
{% block javascripts %}
|
|
63
|
+
<script>
|
|
64
|
+
|
|
65
|
+
$(document).ready(function(){
|
|
66
|
+
var firstName = $('#firstName').text();
|
|
67
|
+
var lastName = $('#lastName').text();
|
|
68
|
+
var intials = $('#firstName').text().charAt(0) + $('#lastName').text().charAt(0);
|
|
69
|
+
var profileImage = $('#profileImage').text(intials);
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
$(document).ready(function(){
|
|
73
|
+
var firstName = $('#firstName').text();
|
|
74
|
+
var lastName = $('#lastName').text();
|
|
75
|
+
var intials = $('#firstName').text().charAt(0) + $('#lastName').text().charAt(0);
|
|
76
|
+
var profileImage = $('#profileImageTop').text(intials);
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
</script>
|
|
80
|
+
|
|
81
|
+
{% endblock javascripts %}
|
|
82
|
+
|
|
83
|
+
</body>
|
|
84
|
+
</html>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Inspiration -> https://www.vitoshacademy.com/hashing-passwords-in-python/
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import hashlib
|
|
6
|
+
import binascii
|
|
7
|
+
import os
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def hash_pass( password ):
|
|
11
|
+
"""
|
|
12
|
+
Hash a password for storing.
|
|
13
|
+
"""
|
|
14
|
+
salt = hashlib.sha256(os.urandom(60)).hexdigest().encode('ascii')
|
|
15
|
+
pwd_hash = hashlib.pbkdf2_hmac('sha512', password.encode('utf-8'), salt, 100000)
|
|
16
|
+
pwd_hash = binascii.hexlify(pwd_hash)
|
|
17
|
+
return (salt + pwd_hash) # return bytes
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def verify_pass(provided_password, stored_password):
|
|
21
|
+
"""V
|
|
22
|
+
verify a stored password against one provided by user
|
|
23
|
+
"""
|
|
24
|
+
stored_password = stored_password.decode('ascii')
|
|
25
|
+
salt = stored_password[:64]
|
|
26
|
+
stored_password = stored_password[64:]
|
|
27
|
+
pwd_hash = hashlib.pbkdf2_hmac('sha512', provided_password.encode('utf-8'), salt.encode('ascii'), 100000)
|
|
28
|
+
pwd_hash = binascii.hexlify(pwd_hash).decode('ascii')
|
|
29
|
+
return pwd_hash == stored_password
|
|
30
|
+
|