src/Eccube/Resource/template/admin/index.twig line 1

Open in your IDE?
  1. {#
  2. This file is part of EC-CUBE
  3. Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
  4. http://www.ec-cube.co.jp/
  5. For the full copyright and license information, please view the LICENSE
  6. file that was distributed with this source code.
  7. #}
  8. {% extends '@admin/default_frame.twig' %}
  9. {% block title %}{{ 'admin.home'|trans }}{% endblock %}
  10. {% block sub_title %}{% endblock %}
  11. {% block javascript %}
  12.     <script>
  13.         $(function() {
  14.             var options = {
  15.                 layout: {
  16.                     padding: {
  17.                         left: 0,
  18.                         right: 0,
  19.                         top: 25,
  20.                         bottom: 0
  21.                     }
  22.                 },
  23.                 plugins: {
  24.                     tooltip: {
  25.                         callbacks: {
  26.                             label: function(tooltipItem) {
  27.                                 return '{{ currency_symbol() }}' + tooltipItem.formattedValue.replace(/\B(?=(\d{3})+(?!\d))/g, ',');
  28.                             }
  29.                         }
  30.                     }
  31.                 },
  32.                 scales: {
  33.                     y: {
  34.                         beginatzero: true,
  35.                         display: true,
  36.                         ticks: {
  37.                             callback: function(value, index, ticks) {
  38.                                 if (Math.floor(value) === value) {
  39.                                     return '{{ currency_symbol() }}' + value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
  40.                                 }
  41.                             }
  42.                         }
  43.                     }
  44.                 }
  45.             };
  46.             var priceBackgroundColor = 'rgba(58, 115, 188, 1)';
  47.             var priceBorderColor = 'rgba(255, 255, 255, 0)';
  48.             $.ajax({
  49.                 url: '{{ url('admin_homepage_sale') }}',
  50.                 type: 'GET',
  51.                 dataType: 'json'
  52.             }).done(function(datas) {
  53.                 for (var i = 0; i < datas.length; i++) {
  54.                     var data = datas[i];
  55.                     var labels = [];
  56.                     var prices = [];
  57.                     var priceBackgroundColors = [];
  58.                     var priceBorderColors = [];
  59.                     Object.keys(data).forEach(function(key) {
  60.                         labels.push(key);
  61.                         prices.push(data[key].price);
  62.                         priceBackgroundColors.push(priceBackgroundColor);
  63.                         priceBorderColors.push(priceBorderColor);
  64.                     });
  65.                     var ctx = $('#chart-' + i)[0].getContext('2d');
  66.                     ctx.canvas.height = 100;
  67.                     var chart = new Chart(ctx, {
  68.                         type: 'bar',
  69.                         data: {
  70.                             labels: labels,
  71.                             datasets: [
  72.                                 {
  73.                                     type: 'bar',
  74.                                     label: '{{ 'admin.home.sales_summary_amount'|trans }}',
  75.                                     data: prices,
  76.                                     backgroundColor: priceBackgroundColors,
  77.                                     borderColor: priceBorderColors,
  78.                                     borderWidth: 1,
  79.                                     yAxisID: 'y'
  80.                                 }
  81.                             ]
  82.                         },
  83.                         options: options
  84.                     });
  85.                 }
  86.             }).fail(function(data) {
  87.             }).always(function() {
  88.                 $('#loading').hide();
  89.             });
  90.         });
  91.     </script>
  92. {% endblock javascript %}
  93. {% block main %}
  94.     {% if is_danger_admin_url %}
  95.     <div class="alert alert-warning alert-dismissible fade show m-3" role="alert">
  96.         <i class="fa fa-warning fa-lg me-2"></i>
  97.         <span class="fw-bold">{{ 'admin.common.admin_url_warning'|trans({ '%url%': url('admin_setting_system_security') })|raw }}</span>
  98.         <button class="btn-close" type="button" data-bs-dismiss="alert" aria-label="Close">
  99.         </button>
  100.     </div>
  101.     {% endif %}
  102.     <div class="c-contentsArea__cols">
  103.         <div class="c-contentsArea__primaryCol">
  104.             <div class="c-primaryCol">
  105.                 <div class="row">
  106.                     <div class="col-4 mb-4">
  107.                         <div id="order-status" class="card rounded border-0 h-100">
  108.                             <div class="card-header">
  109.                                 <a href="{{ url('admin_order') }}">
  110.                                     <span class="card-title">{{ 'admin.home.order_status_title'|trans }}</span>
  111.                                 </a>
  112.                             </div>
  113.                             <div class="card-body p-0">
  114.                                 {% for OrderStatus in OrderStatuses %}
  115.                                     <div class="d-block border border-top-0 border-start-0 border-end-0">
  116.                                         <a href="{{ url('admin_order', { 'order_status_id': OrderStatus.id }) }}" class="p-3 d-block">
  117.                                             <div class="row align-items-center">
  118.                                                 <div class="col align-middle">
  119.                                                     <span class="align-middle">{{ OrderStatus.name }}</span>
  120.                                                 </div>
  121.                                                 <div class="col-auto text-end align-middle">
  122.                                                     <span class="h4 align-middle fw-normal text-dark">{{ Orders is not empty and Orders[OrderStatus.id] is defined ? Orders[OrderStatus.id] : 0 }}</span>
  123.                                                 </div>
  124.                                             </div>
  125.                                         </a>
  126.                                     </div>
  127.                                 {% endfor %}
  128.                             </div>
  129.                         </div><!-- /#order-status -->
  130.                     </div>
  131.                     <div class="col-8 mb-4">
  132.                         <div id="chart-statistics" class="card rounded border-0 h-100">
  133.                             <div class="card-header">
  134.                                 <div class="d-inline-block">
  135.                                     <span class="card-title">{{ 'admin.home.sales_summary_title'|trans }}</span>
  136.                                 </div>
  137.                             </div>
  138.                             <div class="card-body pt-0">
  139.                                 <div class="row text-center border-bottom mb-3">
  140.                                     <div class="col-4 py-2 border-end">
  141.                                         <div class="h3">
  142.                                             {% set amount = salesThisMonth is empty ? 0 : salesThisMonth.order_amount %}
  143.                                             {% set count = salesThisMonth is empty ? 0 : salesThisMonth.order_count %}
  144.                                             {{ 'admin.home.sales_summary_value'|trans({ '%amount%': amount|price, '%count%': count|number_format }) }}
  145.                                         </div>
  146.                                         <small>{{ 'admin.home.sales_summary_this_month'|trans }}</small>
  147.                                     </div>
  148.                                     <div class="col-4 py-2 border-end">
  149.                                         <div class="h3">
  150.                                             {% set amount = salesToday is empty ? 0 : salesToday.order_amount %}
  151.                                             {% set count = salesToday is empty ? 0 : salesToday.order_count %}
  152.                                             {{ 'admin.home.sales_summary_value'|trans({ '%amount%': amount|price, '%count%': count|number_format }) }}
  153.                                         </div>
  154.                                         <small>{{ 'admin.home.sales_summary_today'|trans }}</small>
  155.                                     </div>
  156.                                     <div class="col-4 py-2">
  157.                                         <div class="h3">
  158.                                             {% set amount = salesYesterday is empty ? 0 : salesYesterday.order_amount %}
  159.                                             {% set count = salesYesterday is empty ? 0 : salesYesterday.order_count %}
  160.                                             {{ 'admin.home.sales_summary_value'|trans({ '%amount%': amount|price, '%count%': count|number_format }) }}
  161.                                         </div>
  162.                                         <small>{{ 'admin.home.sales_summary_yesterday'|trans }}</small>
  163.                                     </div>
  164.                                 </div>
  165.                                 <div class="row mb-2">
  166.                                     <div class="col text-center">
  167.                                         <div class="btn-group nav d-inline-flex" id="pills-tab" role="tablist">
  168.                                             <a class="nav-link active btn btn-ec-tab py-2 ps-4 pe-4" id="pills-weekly-tab" data-bs-toggle="pill" href="#pills-weekly" role="tab" aria-controls="pills-weekly" aria-selected="true">
  169.                                                 {{ 'admin.home.sales_summary_weekly'|trans }}
  170.                                             </a>
  171.                                             <a class="nav-link btn btn-ec-tab py-2 ps-4 pe-4" id="pills-monthly-tab" data-bs-toggle="pill" href="#pills-monthly" role="tab" aria-controls="pills-monthly" aria-selected="false">
  172.                                                 {{ 'admin.home.sales_summary_monthly'|trans }}
  173.                                             </a>
  174.                                             <a class="nav-link btn btn-ec-tab py-2 ps-4 pe-4" id="pills-year-tab" data-bs-toggle="pill" href="#pills-year" role="tab" aria-controls="pills-year" aria-selected="false">
  175.                                                 {{ 'admin.home.sales_summary_yearly'|trans }}
  176.                                             </a>
  177.                                         </div>
  178.                                     </div>
  179.                                 </div>
  180.                                 <div class="row">
  181.                                     <div class="col">
  182.                                         <div id="loading" class="text-center pt-5">
  183.                                             <img src="{{ asset('assets/img/loading.gif', 'admin') }}">
  184.                                         </div>
  185.                                         <div class="tab-content" id="pills-tabContent">
  186.                                             <div class="tab-pane fade show active" id="pills-weekly" role="tabpanel" aria-labelledby="pills-weekly-tab">
  187.                                                 <canvas id="chart-0"></canvas>
  188.                                             </div>
  189.                                             <div class="tab-pane fade" id="pills-monthly" role="tabpanel" aria-labelledby="pills-monthly-tab">
  190.                                                 <canvas id="chart-1"></canvas>
  191.                                             </div>
  192.                                             <div class="tab-pane fade" id="pills-year" role="tabpanel" aria-labelledby="pills-year-tab">
  193.                                                 <canvas id="chart-2"></canvas>
  194.                                             </div>
  195.                                         </div>
  196.                                     </div>
  197.                                 </div>
  198.                             </div>
  199.                         </div><!-- /#chart-statistics -->
  200.                     </div>
  201.                 </div>
  202.                 <div class="row">
  203.                     <div class="col mb-4">
  204.                         <div id="shop-statistical" class="card rounded border-0 h-100">
  205.                             <div class="card-header">
  206.                                 <div class="d-inline-block">
  207.                                     <span class="card-title">{{ 'admin.home.shop_status_title'|trans }}</span>
  208.                                 </div>
  209.                             </div>
  210.                             <div class="card-body p-0">
  211.                                 <div class="d-block border border-top-0 border-start-0 border-end-0">
  212.                                     <a href="{{ url('admin_homepage_nonstock') }}" class="p-3 d-block">
  213.                                         <div class="row align-items-center">
  214.                                             <div class="col-2 align-middle text-center">
  215.                                                 <i class="fa fa-inbox fa-2x text-secondary" aria-hidden="true"></i>
  216.                                             </div>
  217.                                             <div class="col p-0">
  218.                                                 <span class="align-middle">{{ 'admin.home.shop_status_out_of_stock'|trans }}</span>
  219.                                             </div>
  220.                                             <div class="col-auto text-end align-middle">
  221.                                                 <span class="h4 align-middle fw-normal text-dark">{{ countNonStockProducts|number_format }}</span>
  222.                                             </div>
  223.                                         </div>
  224.                                     </a>
  225.                                 </div>
  226.                                 <div class="d-block border border-top-0 border-start-0 border-end-0">
  227.                                     <a href="{{ url('admin_product') }}" class="p-3 d-block">
  228.                                         <div class="row align-items-center">
  229.                                             <div class="col-2 align-middle text-center">
  230.                                                 <i class="fa fa-cubes fa-2x text-secondary" aria-hidden="true"></i>
  231.                                             </div>
  232.                                             <div class="col p-0">
  233.                                                 <span class="align-middle">{{ 'admin.home.shop_status_products'|trans }}</span>
  234.                                             </div>
  235.                                             <div class="col-auto text-check align-middle">
  236.                                                 <span class="h4 align-middle fw-normal text-dark">{{ countProducts|number_format }}</span>
  237.                                             </div>
  238.                                         </div>
  239.                                     </a>
  240.                                 </div>
  241.                                 <div class="d-block border border-top-0 border-start-0 border-end-0">
  242.                                     <a href="{{ url('admin_homepage_customer') }}" class="p-3 d-block">
  243.                                         <div class="row align-items-center">
  244.                                             <div class="col-2 align-middle text-center">
  245.                                                 <i class="fa fa-users fa-2x text-secondary" aria-hidden="true"></i>
  246.                                             </div>
  247.                                             <div class="col p-0">
  248.                                                 <span class="align-middle">{{ 'admin.home.shop_status_customers'|trans }}</span>
  249.                                             </div>
  250.                                             <div class="col-auto text-check align-middle">
  251.                                                 <span class="h4 align-middle fw-normal text-dark">{{ countCustomers|number_format }}</span>
  252.                                             </div>
  253.                                         </div>
  254.                                     </a>
  255.                                 </div>
  256.                             </div>
  257.                         </div><!-- /#shop-statistical -->
  258.                     </div>
  259.                     <div class="col mb-4">
  260.                         <div id="ec-cube-plugin" class="card rounded border-0 h-100">
  261.                             <div class="card-header border-bottom-0">
  262.                                 <div class="d-inline-block">
  263.                                     <span class="card-title">{{ 'admin.home.recommend_plugins_title'|trans }}</span>
  264.                                 </div>
  265.                             </div>
  266.                             <div class="card-body py-0" style="max-height: 395px; overflow-y: scroll">
  267.                                 {% for plugin in recommendedPlugins %}
  268.                                     <div class="row py-3 border border-bottom-0 border-start-0 border-end-0">
  269.                                         <div class="col-5 col-md-4">
  270.                                             <a href="#" data-bs-toggle="modal" data-bs-target="#searchPluginModal-{{ plugin.id }}">
  271.                                                 <img src="{{ plugin.image }}" class="w-100" alt="{{ plugin.name }}">
  272.                                             </a>
  273.                                         </div>
  274.                                         <div class="col-7 col-md-8 ps-0">
  275.                                             <a href="#" data-bs-toggle="modal" data-bs-target="#searchPluginModal-{{ plugin.id }}">{{ plugin.name }}</a>
  276.                                             <p class="m-0 pt-2">
  277.                                                 {{ plugin.short_description }}
  278.                                             </p>
  279.                                         </div>
  280.                                     </div>
  281.                                     {{ include('@admin/Store/plugin_detail_modal.twig', {'item': plugin} ) }}
  282.                                 {% endfor %}
  283.                             </div>
  284.                             <div class="card-footer">
  285.                                 > <a href="{{ url('admin_store_plugin_owners_search_page') }}">{{ 'admin.home.recommend_plugins.owner_store'|trans }}</a>
  286.                             </div>
  287.                         </div><!-- /#ec-cube-plugin -->
  288.                     </div>
  289.                     <div class="col mb-4">
  290.                         <div id="ec-cube-news" class="card rounded border-0 h-100">
  291.                             <div class="card-header">
  292.                                 <div class="d-inline-block">
  293.                                     <span class="card-title">{{ 'admin.home.news_title'|trans }}</span>
  294.                                 </div>
  295.                             </div>
  296.                             <div class="card-body p-0">
  297.                                 <iframe name="information" class="link_list_wrap" src="{{ eccube_config.eccube_info_url }}" style="width:100%; border:0; min-height:390px;"></iframe>
  298.                             </div>
  299.                             <div class="card-footer" style="height:43px;box-sizing: border-box;"></div>
  300.                         </div><!-- /#ec-cube-news -->
  301.                     </div>
  302.                 </div><!-- /.row -->
  303.             </div><!-- /.c-primaryCol -->
  304.         </div><!-- /.c-contentsArea__primaryCol -->
  305.     </div><!-- /.c-contentsArea__cols -->
  306. {% endblock %}