add docs for the case

This commit is contained in:
2025-01-11 22:30:54 -05:00
parent 74e811e950
commit 1cb6bedb5c
18 changed files with 398 additions and 422 deletions

View File

@ -99,7 +99,7 @@
<a href='{{ path('app_case_members', {id: c.id}) }}' class='text-secondary ' title='List Members' data-toggle='tooltip'>
<i class='material-symbols-rounded opacity-5'>group_add</i>
</a>
<a href='{{ path('app_case_notes', {id: c.id}) }}' class='text-secondary ' title='Show Notes' data-toggle='tooltip'>
<a href='{{ path('app_list_notes', {caseId: c.id}) }}' class='text-secondary ' title='Show Notes' data-toggle='tooltip'>
<i class='material-symbols-rounded opacity-5'>clinical_notes</i>
</a>
</td>

View File

@ -8,5 +8,137 @@
<main class="main-content position-relative max-height-vh-100 h-100 border-radius-lg ">
{{ block('topnav', 'internal/libs/top-nav.html.twig') }}
<div class='container-fluid py-2'>
<div class='row'>
<div class='ms-3' style='margin:5px;'>
<h2 class='mb-0 h4 font-weight-bolder'>Dashboard</h2>
</div>
<div class='col-xl-3 col-sm-6 mb-xl-0 mb-4'>
<div class='card'>
<div class='card-header p-2 ps-3'>
<div class='d-flex justify-content-between'>
<div>
<p class='text-sm mb-0 text-capitalize'>Miles Travelled</p>
<h4 class='mb-0' title='30 Days / YTD'>
{{ milesTravelled30Days }}
mi /
{{ milesTravelledYTD }}
mi
</h4>
</div>
<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>
</div>
</div>
</div>
<hr class='dark horizontal my-0'>
<div class='card-footer p-2 ps-3'>
<p class='mb-0 text-sm'>
<span class='text-info font-weight-bolder'>
Deductable amount: ${{ (milesTravelled30Days * mileage_rate)|number_format(2, '.', ',') }} / ${{ (milesTravelledYTD * mileage_rate)|number_format(2, '.', ',') }}
</span>
</p>
</div>
</div>
</div>
<div class="col-xl-3 col-sm-6 mb-xl-0 mb-4">
<div class='card'>
<div class='card-header p-2 ps-3'>
<div class='d-flex justify-content-between'>
<div>
<p class='text-sm mb-0 text-capitalize'>Time Travelled</p>
<h4 class='mb-0'>
{{ totalTimeTravelled30Days|date("%d:%H:%i'%s''") }}
/
{{ totalTimeTravelledYTD|date("%d:%H:%i'%s''") }}
</h4>
</div>
<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>
</div>
</div>
</div>
<hr class='dark horizontal my-0'>
<div class='card-footer p-2 ps-3'>
<p class='mb-0 text-sm'>
<span class='text-info font-weight-bolder'></span>
</p>
</div>
</div>
</div>
<div class="col-xl-3 col-sm-6 mb-xl-0 mb-4">
<div class='card'>
<div class='card-header p-2 ps-3'>
<div class='d-flex justify-content-between'>
<div>
<p class='text-sm mb-0 text-capitalize'>Case Mileage</p>
<h4 class='mb-0'>
{{ caseMileage30Days }} / {{ caseMileageYTD }}
</h4>
</div>
<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>
</div>
</div>
</div>
<hr class='dark horizontal my-0'>
<div class='card-footer p-2 ps-3'>
<p class='mb-0 text-sm'>
<span class='text-info font-weight-bolder' title='30 Days / YTD'></span>
</p>
</div>
</div>
</div>
<div class="col-xl-3 col-sm-6 mb-xl-0 mb-4">
<div class='card'>
<div class='card-header p-2 ps-3'>
<div class='d-flex justify-content-between'>
<div>
<h4 class='mb-0'>Miles Travelled</h4>
<p class='text-sm mb-0 text-capitalize'></p>
</div>
<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>
</div>
</div>
</div>
<hr class='dark horizontal my-0'>
<div class='card-footer p-2 ps-3'>
<p class='mb-0 text-sm'>
<span class='text-info font-weight-bolder' title='30 Days / YTD'>{{ milesTravelled30Days }}
mi /
{{ milesTravelledYTD }}
mi</span>
</p>
</div>
</div>
</div>
</div>
<div class='row'>
<div class="col-lg-4 col-md-6 mt-4 mb-4">
<div class="card">
<div class="card-body">
<h6 class="mb-0 ">Website Views</h6>
<p class="text-sm ">Last Campaign Performance</p>
<div class="pe-2">
<div class="chart">
<canvas id="chart-bars" class="chart-canvas" height="170"></canvas>
</div>
</div>
<hr class="dark horizontal">
<div class="d-flex ">
<i class="material-symbols-rounded text-sm my-auto me-1">schedule</i>
<p class="mb-0 text-sm">
campaign sent 2 days ago
</p>
</div>
</div>
</div>
</div>
</div>
</div>
</main>
{% endblock %}

View File

@ -4,7 +4,7 @@
<i class="fas fa-times p-3 cursor-pointer text-dark opacity-5 position-absolute end-0 top-0 d-none d-xl-none" aria-hidden="true" id="iconSidenav"></i>
<a class="navbar-brand px-4 py-3 m-0" href="{{ path('app_dashboard') }}">
{% if app.user.company.companyLogo %}
<img src="/uploads/company/{{ app.user.company.companyLogo }}" class="navbar-brand-img" width="30" height="30" alt="main_logo">
<img src="{{ company_image_path }}/{{ app.user.company.companyLogo }}" class="navbar-brand-img" width="30" height="30" alt="main_logo">
{% else %}
<img src="{{ asset('img/logo-ct-dark.png') }}" class="navbar-brand-img" width="30" height="30" alt="main_logo">
{% endif %}

View File

@ -15,8 +15,8 @@
<div class="ms-md-auto pe-md-3 d-flex align-items-center">
<div class="input-group input-group-outline">
<label class="form-label">Case Search...</label>
<input type="text" class="form-control">
<label class="form-label" for='case-search'>Case Search...</label>
<input type="text" id='case-search' class="form-control">
</div>
</div>
<ul class="navbar-nav d-flex align-items-center justify-content-end">
@ -47,7 +47,7 @@
<a class='dropdown-item border-radius-md' href="javascript:openNotification('{{ note.id }}');">
<div class='d-flex py-1'>
<div class='my-auto'>
{% if note.sender.imageName %}<img src='/uploads/user_images/{{ 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 %}
<i class='material-symbols-rounded opacity-7'>
{% if note.type == enum('App\\Enums\\MessageType').CASE %}

View File

@ -8,67 +8,114 @@
<main class="main-content position-relative max-height-vh-100 h-100 border-radius-lg ">
{{ block('topnav', 'internal/libs/top-nav.html.twig') }}
{{ form_start(form) }}
<form name='form' method='post' enctype='multipart/form-data' onsubmit='return saveSignatureBlock()'>
{{ form_errors(form) }}
<div class='container'>
<div class='row'>
<div class='col' id='profile-image'>
<input type='hidden' name='id' value='{{ currentUser.id }}'/>
<img class='profile-image' src='{% if currentUser.imageName %}/uploads/user_images/{{ currentUser.imageName }}{% endif %}'/>
{{ form_errors(form) }}
<div class='container'>
<div class='row'>
<div class='col text-center' id='profile-image'>
<input type='hidden' name='id' value='{{ currentUser.id }}'/>
<input type='hidden' name='{{ field_name(form.signature) }}' id='signature'/>
<img class='profile-image' src='{% if currentUser.imageName %}{{ user_image_path }}/{{ currentUser.imageName }}{% endif %}'/>
{{ form_row(form.imageName) }}
{{ form_row(form.imageName) }}
</div>
<div class='col'>
<div class='input-group input-group-outline mb-3 is-filled'>
<label for='profile_form_name' class='form-label'>Name</label>
<input type='text' name='{{ field_name(form.name) }}' id='profile_form_name' class='form-control' value='{{ currentUser.name }}'/>
</div>
<div class='input-group input-group-outline mb-3 is-filled'>
<label for='profile_form_email' class='form-label'>Email</label>
<input type='email' name='{{ field_name(form.email) }}' id='profile_form_email' class='form-control' value='{{ currentUser.email }}'/>
</div>
<div class='input-group input-group-outline mb-3 {% if currentUser.personalPhone %}is-filled{% endif %}'>
<label for='profile_form_phone' class='form-label'>Phone</label>
<input type='tel' name='{{ field_name(form.personalPhone) }}' id='profile_form_phone' class='form-control' value='{{ currentUser.personalPhone }}'/>
</div>
<div class='input-group input-group-outline mb-3 {% if currentUser.workPhone %}is-filled{% endif %}'>
<label for='profile_form_workPhone' class='form-label'>Work Phone</label>
<input type='tel' name='{{ field_name(form.workPhone) }}' id='profile_form_workPhone' class='form-control' value='{{ currentUser.workPhone }}'/>
</div>
<div class='input-group input-group-outline mb-3'>
<label for='profile_form_password' class='form-label'>Password</label>
<input type='password' name='{{ field_name(form.password.first) }}' id='profile_form_password' class='form-control' autocomplete='new-password'/>
</div>
<div class='input-group input-group-outline mb-3'>
<label for='profile_form_confirmPassword' class='form-label'>Confirm Password</label>
<input type='password' name='{{ field_name(form.password.second) }}' id='profile_form_confirmPassword' class='form-control' autocomplete='new-password'/>
</div>
</div>
</div>
<div class='col'>
<div class='input-group input-group-outline mb-3 is-filled'>
<label for='profile_form_name' class='form-label'>Name</label>
<input type='text' name='{{ field_name(form.name) }}' id='profile_form_name' class='form-control' value='{{ currentUser.name }}'/>
</div>
<div class='input-group input-group-outline mb-3 is-filled'>
<label for='profile_form_email' class='form-label'>Email</label>
<input type='email' name='{{ field_name(form.email) }}' id='profile_form_email' class='form-control' value='{{ currentUser.email }}'/>
<div class='row'>
<div class='col'>
<div class='input-group input-group-outline mb-3'>
Saved Signature:
<button id='clearSignature'>Clear Signature</button><br/>
<canvas id='signature_pad'></canvas>
</div>
</div>
</div>
<div class='input-group input-group-outline mb-3 {% if currentUser.personalPhone %}is-filled{% endif %}'>
<label for='profile_form_phone' class='form-label'>Phone</label>
<input type='tel' name='{{ field_name(form.personalPhone) }}' id='profile_form_phone' class='form-control' value='{{ currentUser.personalPhone }}'/>
</div>
<div class='input-group input-group-outline mb-3 {% if currentUser.workPhone %}is-filled{% endif %}'>
<label for='profile_form_workPhone' class='form-label'>Work Phone</label>
<input type='tel' name='{{ field_name(form.workPhone) }}' id='profile_form_workPhone' class='form-control' value='{{ currentUser.workPhone }}'/>
</div>
<div class='input-group input-group-outline mb-3'>
<label for='profile_form_password' class='form-label'>Password</label>
<input type='password' name='{{ field_name(form.password.first) }}' id='profile_form_password' class='form-control' autocomplete='new-password'/>
</div>
<div class='input-group input-group-outline mb-3'>
<label for='profile_form_confirmPassword' class='form-label'>Confirm Password</label>
<input type='password' name='{{ field_name(form.password.second) }}' id='profile_form_confirmPassword' class='form-control' autocomplete='new-password'/>
<div class='row'>
<div class='col text-center'>
<div class='input-group input-group-outline mb-3'>
{{ form_row(form.submit) }}
</div>
</div>
</div>
</div>
{{ form_end(form) }}
</main>
{% endblock %}
<div class='row'>
<div class='col text-center'>
<div class='input-group input-group-outline mb-3'>
{{ form_row(form.submit) }}
</div>
</div>
</div>
</div>
{{ form_end(form) }}
</main>
{% endblock %}
{% block page_js %}
<script src="https://cdn.jsdelivr.net/npm/signature_pad@5.0.4/dist/signature_pad.umd.min.js"></script>
<script type='text/javascript'>
window.onload = createSignatureBlock;
var canvas = document.getElementById('signature_pad');
var pad = null;
var signatureData = JSON.parse('{{ signature|raw }}');
function createSignatureBlock() {
pad = new SignaturePad(canvas);
const ratio = Math.max(window.devicePixelRatio || 1, 1);
canvas.width = canvas.offsetWidth * ratio;
canvas.height = canvas.offsetHeight * ratio;
canvas.getContext("2d").scale(ratio, ratio);
{% if signaturePresent %}pad.fromData(signatureData);{% endif %}
{% block page_css %}
<style rel='stylesheet'>
.profile-image {
width: 300px;
height: 300px;
}
</style>
{% endblock %}
document.getElementById('clearSignature').addEventListener('click', clearSignatureBlock);
}
function clearSignatureBlock(e) {
e.preventDefault();
pad.clear();
}
function saveSignatureBlock() {
document.getElementById('signature').value = JSON.stringify(pad.toData());
return true;
}
</script>
{% endblock %}
{% block page_css %}
<style rel='stylesheet'>
.profile-image {
width: 300px;
height: 300px;
}
#signature_pad {
width: 100%;
height: 300px;
background-color: white;
}
</style>
{% endblock %}

View File

@ -24,8 +24,14 @@
</li>
{% endif %}
{% if app.user %}
<li class='nav-item'>
<a class='nav-link me-2' href='{{ path('app_admin_dashboard') }}'>
<i class='fa fa-chart-pie opacity-5'></i>
Admin Dashboard
</a>
</li>
<li class="nav-item">
<a class="nav-link d-flex align-items-center me-2 active" aria-current="page" href="{{ path('app_dashboard') }}">
<a class="nav-link me-2" href="{{ path('app_dashboard') }}">
<i class="fa fa-chart-pie opacity-6 text-dark me-1"></i>
Dashboard
</a>