up: various twig templates

* various twig updates
This commit is contained in:
Ryan Prather 2025-02-10 16:18:53 -05:00
parent b828333222
commit c9cf8d7e0a
7 changed files with 131 additions and 58 deletions

View File

@ -10,22 +10,23 @@
{{ block('topnav', 'internal/libs/top-nav.html.twig') }} {{ block('topnav', 'internal/libs/top-nav.html.twig') }}
<div class='container-fluid py-2'> <div class='container-fluid py-2'>
<div class='row'> <div class='row' style='margin-right:0;'>
<div class='ms-3' style='margin:5px;'> <div class='ms-3' style='margin:5px 0;'>
<h2 class='mb-0 h4 font-weight-bolder'>Dashboard</h2> <h2 class='mb-0 h4 font-weight-bolder'>Dashboard</h2>
</div> </div>
<div class='col-xl-3 col-sm-6 mb-xl-0 mb-4'> <div class="col-xl-4 col-med-6 col-sm-6 col-12 mb-xl-0 mb-4">
<div class='card'> <div class='card'>
<div class='card-header p-2 ps-3'> <div class='card-header p-2 ps-3'>
<div class='d-flex justify-content-between'> <div class='d-flex justify-content-between'>
<div> <div>
<p class='text-sm mb-0 text-capitalize'>Miles Travelled</p> <p class='text-sm mb-0 text-capitalize'>Total Miles</p>
<h4 class='mb-0' title='30 Days / YTD'> <h4 class='mb-0' title='30 Days / YTD'>
{{ milesTravelled30Days }} {{ milesTravelled30Days }} / {{ milesTravelledYTD }}
mi / </h4>
{{ milesTravelledYTD }} <p class='text-sm mb-0 text-capitalize'>Case Miles</p>
mi <h4 class='mb-0' title='30 Days / YTD'>
{{ caseMileage30Days }} / {{ caseMileageYTD }}
</h4> </h4>
</div> </div>
<div class="icon icon-md icon-shape bg-gradient-dark shadow-dark shadow text-center border-radius-lg"> <div class="icon icon-md icon-shape bg-gradient-dark shadow-dark shadow text-center border-radius-lg">
@ -43,16 +44,16 @@
</div> </div>
</div> </div>
</div> </div>
<div class="col-xl-3 col-sm-6 mb-xl-0 mb-4"> <div class="col-xl-4 col-med-6 col-sm-6 col-12 mb-xl-0 mb-4">
<div class='card'> <div class='card'>
<div class='card-header p-2 ps-3'> <div class='card-header p-2 ps-3'>
<div class='d-flex justify-content-between'> <div class='d-flex justify-content-between'>
<div> <div>
<p class='text-sm mb-0 text-capitalize'>Time Travelled</p> <p class='text-sm mb-0 text-capitalize'>Time Travelled</p>
<h4 class='mb-0'> <h4 class='mb-0'>
{{ totalTimeTravelled30Days|date("%a %H:%I'%S''") }} {{ timeTravelled30Days|date("%a %H:%I'%S''") }}
/ /
{{ totalTimeTravelledYTD|date("%a %H:%I'%S''") }} {{ timeTravelledYTD|date("%a %H:%I'%S''") }}
</h4> </h4>
</div> </div>
<div class="icon icon-md icon-shape bg-gradient-dark shadow-dark shadow text-center border-radius-lg"> <div class="icon icon-md icon-shape bg-gradient-dark shadow-dark shadow text-center border-radius-lg">
@ -68,14 +69,14 @@
</div> </div>
</div> </div>
</div> </div>
<div class="col-xl-3 col-sm-6 mb-xl-0 mb-4"> <div class="col-xl-4 col-med-6 col-sm-6 col-12 mb-xl-0 mb-4">
<div class='card'> <div class='card'>
<div class='card-header p-2 ps-3'> <div class='card-header p-2 ps-3'>
<div class='d-flex justify-content-between'> <div class='d-flex justify-content-between'>
<div> <div>
<p class='text-sm mb-0 text-capitalize'>Case Mileage</p> <p class='text-sm mb-0 text-capitalize'>Billable Hours This Month</p>
<h4 class='mb-0'> <h4 class='mb-0'>
{{ caseMileage30Days }} / {{ caseMileageYTD }} {{ (totalBillableHours30Days / 60) | number_format(2) }}
</h4> </h4>
</div> </div>
<div class="icon icon-md icon-shape bg-gradient-dark shadow-dark shadow text-center border-radius-lg"> <div class="icon icon-md icon-shape bg-gradient-dark shadow-dark shadow text-center border-radius-lg">
@ -86,18 +87,24 @@
<hr class='dark horizontal my-0'> <hr class='dark horizontal my-0'>
<div class='card-footer p-2 ps-3'> <div class='card-footer p-2 ps-3'>
<p class='mb-0 text-sm'> <p class='mb-0 text-sm'>
<span class='text-info font-weight-bolder' title='30 Days / YTD'></span> <span class='text-info font-weight-bolder' title='30 Days / YTD'>
{% for key, value in billableHours30Days %}
{{ key }} : {{ (value / 60) | number_format(2) }}<br />
{% endfor %}
</span>
</p> </p>
</div> </div>
</div> </div>
</div> </div>
<div class="col-xl-3 col-sm-6 mb-xl-0 mb-4"> <div class="col-xl-4 col-med-6 col-sm-6 col-12 mb-xl-0 mb-4">
<div class='card'> <div class='card'>
<div class='card-header p-2 ps-3'> <div class='card-header p-2 ps-3'>
<div class='d-flex justify-content-between'> <div class='d-flex justify-content-between'>
<div> <div>
<h4 class='mb-0'>Miles Travelled</h4> <p class='text-sm mb-0 text-capitalize'>Billable Hours YTD</p>
<p class='text-sm mb-0 text-capitalize'></p> <h4 class='mb-0'>
{{ (totalBillableHoursYTD / 60) | number_format(2) }}
</h4>
</div> </div>
<div class="icon icon-md icon-shape bg-gradient-dark shadow-dark shadow text-center border-radius-lg"> <div class="icon icon-md icon-shape bg-gradient-dark shadow-dark shadow text-center border-radius-lg">
<i class="material-symbols-rounded opacity-10">weekend</i> <i class="material-symbols-rounded opacity-10">weekend</i>
@ -107,10 +114,11 @@
<hr class='dark horizontal my-0'> <hr class='dark horizontal my-0'>
<div class='card-footer p-2 ps-3'> <div class='card-footer p-2 ps-3'>
<p class='mb-0 text-sm'> <p class='mb-0 text-sm'>
<span class='text-info font-weight-bolder' title='30 Days / YTD'>{{ milesTravelled30Days }} <span class='text-info font-weight-bolder' title='30 Days / YTD'>
mi / {% for key, value in billableHoursYTD %}
{{ milesTravelledYTD }} {{ key }} : {{ value / 60 }}<br/>
mi</span> {% endfor %}
</span>
</p> </p>
</div> </div>
</div> </div>
@ -118,21 +126,20 @@
</div> </div>
<div class='row'> <div class='row'>
<div class="col-lg-4 col-md-6 mt-4 mb-4"> <div class="col-xl-6 col-lg-8 col-md-8 mt-4 mb-4">
<div class="card"> <div class="card">
<div class="card-body"> <div class="card-body">
<h6 class="mb-0 ">Website Views</h6> <h6 class="mb-0 ">Billable Hours</h6>
<p class="text-sm ">Last Campaign Performance</p> <p class="text-sm ">Rolling 6 Months</p>
<div class="pe-2"> <div class="pe-2">
<div class="chart"> <div class="chart">
<canvas id="chart-bars" class="chart-canvas" height="170"></canvas> <canvas id="chart-billable-hours-6-months" class="chart-canvas" height="170"></canvas>
</div> </div>
</div> </div>
<hr class="dark horizontal"> <hr class="dark horizontal">
<div class="d-flex "> <div class="d-flex ">
<i class="material-symbols-rounded text-sm my-auto me-1">schedule</i> <i class="material-symbols-rounded text-sm my-auto me-1"></i>
<p class="mb-0 text-sm"> <p class="mb-0 text-sm">
campaign sent 2 days ago
</p> </p>
</div> </div>
</div> </div>
@ -142,3 +149,37 @@
</div> </div>
</main> </main>
{% endblock %} {% endblock %}
{% block page_js %}
<script type='text/javascript' src="{{ asset('js/plugins/chartjs.min.js') }}"></script>
<script type='module'>
//import {default as Chart} from "{{ asset('vendor/chartjs/chartjs.index.js') }}";
window.onload = initCharts;
//window.Chart = Chart;
</script>
<script type='text/javascript'>
function initCharts() {
var ctx = document.getElementById("chart-billable-hours-6-months").getContext("2d");
var myChart = new Chart(ctx, {
type: 'line',
data: {
labels: ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
datasets: [{
label: "Hours",
tension: 0,
borderWidth: 2,
pointRadius: 3,
pointBackgroundColor: "#43A047",
pointBorderColor: "transparent",
borderColor: "#43A047",
backgroundColor: "transparent",
fill: true,
data: {"1": [2]},
maxBarThickness: 6
}],
},
options: {{ options|json_encode|raw }}
});
}
</script>
{% endblock %}

View File

@ -29,13 +29,12 @@
</div> </div>
</a> </a>
</li> </li>
{% if is_granted('ROLE_ADMIN') %} <li class="nav-item px-3 d-flex align-items-center" title="Site Settings">
<li class="nav-item px-3 d-flex align-items-center" title="Site Settings"> <a href="javascript:;" class="nav-link text-body p-0">
<a href="javascript:;" class="nav-link text-body p-0"> <i class="material-symbols-rounded fixed-plugin-button-nav">settings</i>
<i class="material-symbols-rounded fixed-plugin-button-nav">settings</i> </a>
</a> </li>
</li>
{% endif %}
<li class="nav-item dropdown pe-3 d-flex align-items-center" title="Notifications"> <li class="nav-item dropdown pe-3 d-flex align-items-center" title="Notifications">
<a href="javascript:;" class="nav-link text-body p-0 notification" id="dropdownMenuButton" data-bs-toggle="dropdown" aria-expanded="false"> <a href="javascript:;" class="nav-link text-body p-0 notification" id="dropdownMenuButton" data-bs-toggle="dropdown" aria-expanded="false">
<i class="material-symbols-rounded">notifications</i> <i class="material-symbols-rounded">notifications</i>
@ -50,25 +49,25 @@
{% if note.sender.imageName %}<img src='{{ user_image_path }}/{{ note.sender.imageName }}' class='avatar avatar-sm me-3'><br/> {% if note.sender.imageName %}<img src='{{ user_image_path }}/{{ note.sender.imageName }}' class='avatar avatar-sm me-3'><br/>
{% endif %} {% endif %}
<i class='material-symbols-rounded opacity-7'> <i class='material-symbols-rounded opacity-7'>
{% if note.type == enum('App\\Enums\\MessageType').CASE %} {% if note.type == enum('App\\Enums\\System\\MessageType').CASE %}
cases cases
{% elseif note.type == enum('App\\Enums\\MessageType').STAFFING %} {% elseif note.type == enum('App\\Enums\\System\\MessageType').STAFFING %}
person person
{% elseif note.type == enum('App\\Enums\\MessageType').GENERAL %} {% elseif note.type == enum('App\\Enums\\System\\MessageType').GENERAL %}
chat_bubble chat_bubble
{% elseif note.type == enum('App\\Enums\\MessageType').BILLING %} {% elseif note.type == enum('App\\Enums\\System\\MessageType').BILLING %}
local_atm local_atm
{% elseif note.type == enum('App\\Enums\\MessageType').NEW_CASE %} {% elseif note.type == enum('App\\Enums\\System\\MessageType').NEW_CASE %}
business_center business_center
{% elseif note.type == enum('App\\Enums\\MessageType').USER %} {% elseif note.type == enum('App\\Enums\\System\\MessageType').USER %}
person_add person_add
{% elseif note.type == enum('App\\Enums\\MessageType').NEW_REFERRAL %} {% elseif note.type == enum('App\\Enums\\System\\MessageType').NEW_REFERRAL %}
add_to_queue add_to_queue
{% elseif note.type == enum('App\\Enums\\MessageType').STAFF_NOTE %} {% elseif note.type == enum('App\\Enums\\System\\MessageType').STAFF_NOTE %}
add_notes add_notes
{% elseif note.type == enum('App\\Enums\\MessageType').CALENDAR %} {% elseif note.type == enum('App\\Enums\\System\\MessageType').CALENDAR %}
calendar_month calendar_month
{% elseif note.type == enum('App\\Enums\\MessageType').REMINDER %} {% elseif note.type == enum('App\\Enums\\System\\MessageType').REMINDER %}
notifications notifications
{% endif %} {% endif %}
</i> </i>
@ -92,7 +91,11 @@
</li> </li>
<li class="nav-item d-flex align-items-center" title="Profile"> <li class="nav-item d-flex align-items-center" title="Profile">
<a href="{{ path('app_profile') }}" class="nav-link text-body font-weight-bold px-0"> <a href="{{ path('app_profile') }}" class="nav-link text-body font-weight-bold px-0">
<i class="material-symbols-rounded">account_circle</i> {% if app.user and app.user.imageName %}
<img class='small-profile-image' src='{% if app.user.imageName %}{{ user_image_path }}/{{ app.user.imageName }}{% endif %}'/>
{% else %}
<i class="material-symbols-rounded">account_circle</i>
{% endif %}
</a> </a>
</li> </li>
</ul> </ul>

View File

@ -18,7 +18,18 @@
</p> </p>
</div> </div>
{% for c in cases %} {% for c in cases %}
<div class='col-xl-3 col-sm-6 mb-xl-0 mb-4'> {% set latestNote = c.getStaffNotes()[0] %}
{% set status = '#ff0000' %}
{% set symbol = 'cancel' %}
{% if latestNote.getWorkerSignDatetime() %}
{% set status = '#00ff00' %}
{% set symbol = 'check_circle' %}
{% elseif latestNote.getSupervisorSignDateTime() %}
{% set status = '#ffff00' %}
{% set symbol = 'warning' %}
{% endif %}
<div class='col-xl-4 col-med-6 col-sm-6 col-12 mb-xl-0 mb-4'>
<div class='card'> <div class='card'>
<div class='card-header p-2 ps-3'> <div class='card-header p-2 ps-3'>
<div class='d-flex justify-content-between'> <div class='d-flex justify-content-between'>
@ -38,6 +49,9 @@
<p class='mb-0 text-sm'> <p class='mb-0 text-sm'>
<span class='text-info font-weight-bolder'> <span class='text-info font-weight-bolder'>
<a href='{{ path('app_staff_list_notes', {staffId: user.id, caseId: c.id}) }}'>Staff Notes</a> <a href='{{ path('app_staff_list_notes', {staffId: user.id, caseId: c.id}) }}'>Staff Notes</a>
<span class='material-symbols-rounded opacity-7' style='color:{{ status }}' title='Last Note: {{ latestNote.date|date('M j, Y') }}'>
{{ symbol }}
</span>
</span> </span>
</p> </p>
</div> </div>

View File

@ -12,6 +12,16 @@
<p class='mb-4'></p> <p class='mb-4'></p>
</div> </div>
{% for c in cases %} {% for c in cases %}
{% set latestNote = c.getStaffNotes()[0] %}
{% set status = '#ff0000' %}
{% set symbol = 'cancel' %}
{% if latestNote.getWorkerSignDatetime() %}
{% set status = '#00ff00' %}
{% set symbol = 'check_circle' %}
{% elseif latestNote.getSupervisorSignDateTime() %}
{% set status = '#ffff00' %}
{% set symbol = 'warning' %}
{% endif %}
<div class='col-xl-3 col-sm-6 mb-xl-0 mb-4'> <div class='col-xl-3 col-sm-6 mb-xl-0 mb-4'>
<div class='card'> <div class='card'>
<div class='card-header p-2 ps-3'> <div class='card-header p-2 ps-3'>
@ -29,9 +39,16 @@
</div> </div>
<hr class='dark horizontal my-0'> <hr class='dark horizontal my-0'>
<div class='card-footer p-2 ps-3'> <div class='card-footer p-2 ps-3'>
<p class='mb-0 text-sm'>
<span class='text-info' style='color:{{ status }} !important;'>
</span>
</p>
<p class='mb-0 text-sm'> <p class='mb-0 text-sm'>
<span class='text-info font-weight-bolder'> <span class='text-info font-weight-bolder'>
<a href='{{ path('app_staff_list_notes', {staffId: staffId, caseId: c.id}) }}'>Staff Notes</a> <a href='{{ path('app_staff_list_notes', {staffId: staffId, caseId: c.id}) }}'>Staff Notes</a>
<span class='material-symbols-rounded opacity-7' style='color:{{ status }}' title='Last Note: {{ latestNote.date|date('M j, Y') }}'>
{{ symbol }}
</span>
</span> </span>
</p> </p>
</div> </div>

View File

@ -12,19 +12,20 @@
<p class='mb-4'></p> <p class='mb-4'></p>
</div> </div>
{% for s in staff %} {% for s in staff %}
<div class='col-xl-3 col-sm-6 mb-xl-0 mb-4'> <div class='col-xl-4 col-med-6 col-sm-6 col-12 mb-xl-0 mb-4'>
<div class='card'> <div class='card'>
<div class='card-header p-2 ps-3'> <div class='card-header p-2 ps-3'>
<div class='d-flex justify-content-between'> <div class='d-flex justify-content-between'>
<div> <div>
<h4 class='mb-0'>{{ s.name }}</h4> <h4 class='mb-0'>{{ s.name }}</h4>
<p class='text-sm mb-0 text-capitalize'> <p class='text-sm mb-0 text-capitalize'>
<a href='mailto:{{ s.email }}'>{{ s.email }}</a><br /> {% if s.workPhone %}<a href='tel:{{ s.workPhone }}'>{{ s.getFormattedPhone() }}</a>{% endif %}
{% if s.workPhone %}<a href='tel:{{ s.workPhone }}'>{{ s.getFormattedPhone() }}</a>{% endif %}
</p> </p>
</div> </div>
<div class="icon icon-md icon-shape bg-gradient-dark shadow-dark shadow text-center border-radius-lg"> <div class="icon icon-md icon-shape bg-gradient-dark shadow-dark shadow text-center border-radius-lg">
<i class="material-symbols-rounded opacity-10">weekend</i> <a href='mailto:{{ s.email }}'>
<i class="material-symbols-rounded opacity-10">weekend</i>
</a>
</div> </div>
</div> </div>
</div> </div>

View File

@ -5,13 +5,6 @@
<a class="navbar-brand font-weight-bolder ms-lg-0 ms-3 " href="{{ path('app_dashboard') }}"> <a class="navbar-brand font-weight-bolder ms-lg-0 ms-3 " href="{{ path('app_dashboard') }}">
CM Tracker CM Tracker
</a> </a>
<button class="navbar-toggler shadow-none ms-2" type="button" data-bs-toggle="collapse" data-bs-target="#navigation" aria-controls="navigation" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon mt-2">
<span class="navbar-toggler-bar bar1"></span>
<span class="navbar-toggler-bar bar2"></span>
<span class="navbar-toggler-bar bar3"></span>
</span>
</button>
<div class="collapse navbar-collapse" id="navigation"> <div class="collapse navbar-collapse" id="navigation">
<ul <ul
class="navbar-nav mx-auto"> class="navbar-nav mx-auto">

View File

@ -29,6 +29,10 @@
{{ form_errors(form) }} {{ form_errors(form) }}
{{ form_start(form) }} {{ form_start(form) }}
<div class='input-group input-group-outline mb-3'>
<label for='registration_form_vendorId' class='form-label'>DCS Vendor ID</label>
<input type='text' name='{{ field_name(form.vendorId) }}' placeholder='' class='form-control' required='required'/>
</div>
<div class="input-group input-group-outline mb-3"> <div class="input-group input-group-outline mb-3">
<label for="registration_form_name" class="form-label">Name</label> <label for="registration_form_name" class="form-label">Name</label>
<input type="text" name="{{ field_name(form.name) }}" placeholder="" class="form-control" required="required"/> <input type="text" name="{{ field_name(form.name) }}" placeholder="" class="form-control" required="required"/>