Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 
 

131 wiersze
5.9 KiB

  1. {# templates/report/statistics.html.twig #}
  2. {% extends 'base.html.twig' %}
  3. {% block title %}{{ 'app.report.statistics_page_title'|trans }}{% endblock %}
  4. {% block javascripts %}
  5. {{ parent() }}
  6. {{ encore_entry_script_tags('statistics') }}
  7. {% endblock %}
  8. {% block body %}
  9. <script>
  10. window.Statistics = {
  11. monthsShort: {{ deMonthsShort()|json_encode|raw }},
  12. weekdaysShort: {{ deWeekdaysShort()|json_encode|raw }},
  13. i18n: {
  14. billable: {{ 'app.service.billable'|trans|json_encode|raw }},
  15. nonBillable: {{ 'app.service.not_billable'|trans|json_encode|raw }},
  16. hours: {{ 'app.statistics.hours'|trans|json_encode|raw }},
  17. revenue: {{ 'app.statistics.revenue'|trans|json_encode|raw }},
  18. loading: {{ 'app.statistics.loading'|trans|json_encode|raw }},
  19. errorLoad: {{ 'app.statistics.error_load'|trans|json_encode|raw }},
  20. weekShort: {{ 'app.date.week_short'|trans|json_encode|raw }},
  21. clients: {{ 'app.statistics.clients'|trans|json_encode|raw }},
  22. projects: {{ 'app.statistics.projects'|trans|json_encode|raw }},
  23. services: {{ 'app.statistics.services'|trans|json_encode|raw }},
  24. rest: {{ 'app.statistics.rest'|trans|json_encode|raw }},
  25. noService: {{ 'app.statistics.no_service'|trans|json_encode|raw }},
  26. }
  27. };
  28. </script>
  29. <div class="report-page">
  30. <div class="report-header">
  31. <h1 class="report-header__title">{{ 'app.report.statistics_page_title'|trans }}</h1>
  32. <div class="report-header__right">
  33. <a href="{{ path('report_statistics') }}" class="report-stats-bubble report-stats-bubble--active">
  34. <svg viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg" class="report-stats-bubble__icon">
  35. <rect x="2" y="10" width="4" height="8" rx="1" stroke="currentColor" stroke-width="1.3"/>
  36. <rect x="8" y="6" width="4" height="12" rx="1" stroke="currentColor" stroke-width="1.3"/>
  37. <rect x="14" y="2" width="4" height="16" rx="1" stroke="currentColor" stroke-width="1.3"/>
  38. </svg>
  39. {{ 'app.report.tab_statistics'|trans }}
  40. </a>
  41. <nav class="account-tabs">
  42. <a href="{{ path('report_times') }}"
  43. class="account-tab">
  44. {{ 'app.report.tab_times'|trans }}
  45. </a>
  46. <span class="account-tab account-tab--disabled">
  47. {{ 'app.report.tab_projects'|trans }}
  48. </span>
  49. </nav>
  50. </div>
  51. </div>
  52. <div class="report-content">
  53. <div class="report-card">
  54. <div class="statistics-toolbar">
  55. <h2 class="statistics-toolbar__title">{{ 'app.statistics.chart_title'|trans }}</h2>
  56. <div class="statistics-toolbar__controls">
  57. {% if not isTracker and userList|length > 1 %}
  58. <select class="statistics-range-select" id="stats-user-select">
  59. <option value="">{{ accountName }}</option>
  60. {% for user in userList %}
  61. <option value="{{ user.id }}">{{ user.name }}</option>
  62. {% endfor %}
  63. </select>
  64. {% endif %}
  65. <select class="statistics-range-select" id="stats-metric-select">
  66. <option value="hours" selected>{{ 'app.statistics.hours'|trans }}</option>
  67. <option value="revenue">{{ 'app.statistics.revenue'|trans }}</option>
  68. </select>
  69. <select class="statistics-range-select" id="stats-range-select">
  70. <option value="12months" selected>{{ 'app.statistics.range_12months'|trans }}</option>
  71. <option value="6months">{{ 'app.statistics.range_6months'|trans }}</option>
  72. <option value="4weeks">{{ 'app.statistics.range_4weeks'|trans }}</option>
  73. </select>
  74. </div>
  75. </div>
  76. <div class="statistics-chart-wrap" id="stats-chart-wrap">
  77. <canvas id="stats-chart"></canvas>
  78. </div>
  79. <div class="statistics-legend">
  80. <span class="statistics-legend__item statistics-legend__item--billable">
  81. {{ 'app.service.billable'|trans }}
  82. </span>
  83. <span class="statistics-legend__item statistics-legend__item--non-billable">
  84. {{ 'app.service.not_billable'|trans }}
  85. </span>
  86. </div>
  87. </div>
  88. <div class="statistics-donuts" id="stats-donuts">
  89. <div class="statistics-donut">
  90. <h3 class="statistics-donut__title">{{ 'app.statistics.clients'|trans }}</h3>
  91. <div class="statistics-donut__wrap">
  92. <canvas id="donut-clients"></canvas>
  93. </div>
  94. <div class="statistics-donut__legend" id="donut-legend-clients"></div>
  95. </div>
  96. <div class="statistics-donut">
  97. <h3 class="statistics-donut__title">{{ 'app.statistics.projects'|trans }}</h3>
  98. <div class="statistics-donut__wrap">
  99. <canvas id="donut-projects"></canvas>
  100. </div>
  101. <div class="statistics-donut__legend" id="donut-legend-projects"></div>
  102. </div>
  103. <div class="statistics-donut">
  104. <h3 class="statistics-donut__title">{{ 'app.statistics.services'|trans }}</h3>
  105. <div class="statistics-donut__wrap">
  106. <canvas id="donut-services"></canvas>
  107. </div>
  108. <div class="statistics-donut__legend" id="donut-legend-services"></div>
  109. </div>
  110. </div>
  111. </div>
  112. </div>
  113. {% endblock %}