add docs for the case
This commit is contained in:
@ -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>
|
||||
|
@ -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 %}
|
||||
|
@ -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 %}
|
||||
|
@ -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 %}
|
||||
|
@ -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 %}
|
||||
|
@ -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>
|
||||
|
Reference in New Issue
Block a user