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