first comit

This commit is contained in:
2024-02-23 10:30:02 +00:00
commit ddeb07d0ba
12482 changed files with 1857507 additions and 0 deletions

View File

@@ -0,0 +1,415 @@
{% extends 'includes/base.html' %}
{% load static %}
{% load gravatar %}
{% block content %}
<!-- End Navbar -->
<div class="card shadow-lg mx-4 card-profile-bottom">
<div class="card-body p-3">
<div class="row gx-4">
<div class="col-auto">
<div class="avatar avatar-xl position-relative">
{% if employee.user.email %}
<img class="img-profile rounded-circle m-1" src="{% gravatar_url user.email 50 %}" alt="" />
{% else %}
<img class="img-profile rounded-circle m-1" src="{% static 'img/profile.png' %}" alt="" />
{% endif %}
</div>
</div>
<div class="col-auto my-auto">
<div class="h-100">
<h5 class="mb-1">
{{ employee.employee.first_name }} {{ employee.employee.last_name }}
</h5>
<p class="mb-0 font-weight-bold text-sm">
{{ employee.job_title }}
</p>
<p class="mb-0 font-weight-bold text-sm">
{{ employee.company.name }}
</p>
</div>
</div>
</div>
</div>
</div>
<div class="container-fluid py-4">
<div class="row">
<div class="col-md-8">
<div class="card">
<div class="card-header pb-0">
<div class="d-flex align-items-center">
<p class="mb-0 text-lg">Edit Profile</p>
<button class="btn btn-primary btn-sm ms-auto" id='editBtn' onclick="editFields()">Edit</button>
<button class="btn btn-success btn-sm ms-auto" id='saveBtn' onclick="saveFields()" hidden>
<span class="spinner-border spinner-border-sm" id="submitSpinner" role="status" aria-hidden="true" hidden></span>
<span id="submitText">Save</span>
</button>
</div>
</div>
<div class="card-body">
<form id="employeeForm">
<input disabled hidden class="form-control" type="text" name="employee_id" value="{{ employee.id }}">
<p class="text-uppercase text-sm">Employee Information</p>
<div class="row">
<div class="col-md-12">
<h6 for="example-text-input" class="form-control-label">Email address</h6>
<div class="input-group">
<input disabled class="form-control" type="email" name="email" value="{{ employee.email }}">
</div>
</div>
<div class="col-md-6">
<h6 for="example-text-input" class="form-control-label">First name</h6>
<div class="input-group">
<input disabled class="form-control" type="text" name="User__first_name" value="{{ employee.employee.first_name }}">
</div>
</div>
<div class="col-md-6">
<h6 for="example-text-input" class="form-control-label">Last name</h6>
<div class="input-group">
<input disabled class="form-control" type="text" name="User__last_name" value="{{ employee.employee.last_name }}">
</div>
</div>
<div class="col-md-12">
<h6 for="example-text-input" class="form-control-label">Preferred Name</h6>
<div class="input-group">
<input disabled class="form-control" type="text" name="preferred_name" value="{{employee.preferred_name}}">
</div>
</div>
</div>
<hr class="horizontal dark">
<p class="text-uppercase text-sm">Employment Information</p>
<div class="row">
<div class="col-md-6">
<h6 for="example-text-input" class="form-control-label">Company</h6>
<div class="input-group">
<select disabled class="form-control" name="company_choice" placeholder="Company">
{% for company in companies %}
<option value="{{ company.id }}" selected>{{company.name}}</option>
{% endfor %}
</select>
<button class="btn btn-outline-primary mb-0" type="button" id="company_addon" disabled><i class="fas fa-plus"></i></button>
</div>
</div>
<div class="col-md-6">
<h6 for="example-text-input" class="form-control-label">Department</h6>
<div class="input-group">
<select disabled class="form-control" name="department_choice" placeholder="Department">
{% for department in department %}
<option value="{{ department.id }}" selected>{{department.name}}</option>
{% endfor %}
</select>
<button class="btn btn-outline-primary mb-0" type="button" id="department_addon" data-bs-toggle="modal" data-bs-target="#addDepartmentModal" disabled><i class="fas fa-plus"></i></button>
</div>
</div>
<div class="col-md-6">
<h6 for="example-text-input" class="form-control-label">Start Date</h6>
<div class="input-group">
<input disabled class="form-control" placeholder="Please select date" id="input_from" name="contract_start_date" type="text" value="{{employee.contract_start_date}}">
</div>
</div>
<div class="col-md-6">
<h6 for="example-text-input" class="form-control-label">End Date</h6>
<div class="input-group">
<input disabled class="form-control" type="text" id="input_to" name="contract_end_date" value="{{employee.contract_end_date}}">
</div>
</div>
</div>
<hr class="horizontal dark">
<p class="text-uppercase text-sm">Salary Information</p>
<div class="row">
<div class="col-md-6">
<h6 for="example-text-input" class="form-control-label">Pay Structure</h6>
<div class="input-group">
<select disabled class="form-control" name="pay_choice" placeholder="Pay_choice">
<option value="" selected>-----</option>
{% for pay in pay_structure %}
<option value="{{ pay }}" >{{pay}}</option>
{% endfor %}
</select>
</div>
</div>
<div class="col-md-6">
<h6 for="example-text-input" class="form-control-label">Salary</h6>
<div class="input-group">
<input disabled class="form-control" type="text" name="salary" value="{{employee.salary}}">
</div>
</div>
<div class="col-md-6">
<h6 for="example-text-input" class="form-control-label">Employee Ltd Company</h6>
<div class="input-group">
<input disabled class="form-control" type="text" name="employee_company" value="{{employee.employee_company}}">
</div>
</div>
<div class="col-md-6">
<h6 for="example-text-input" class="form-control-label">Employee VAT number</h6>
<div class="input-group">
<input disabled class="form-control" type="text" name="employee_vat_number" value="{{employee.employee_vat_number}}">
</div>
</div>
</div>
<hr class="horizontal dark">
<p class="text-uppercase text-sm">Contact Information</p>
<div class="row">
<div class="col-md-12">
<h6 for="example-text-input" class="form-control-label">Personal Email address</h6>
<div class="input-group">
<input disabled class="form-control" type="email" name="User__email" value="{{ employee.employee.email }}">
</div>
</div>
<div class="col-md-12">
<h6 for="example-text-input" class="form-control-label">Address</h6>
<div class="input-group">
<input disabled class="form-control" type="text" name="address_street" value="{{employee.address_street}}">
</div>
</div>
<div class="col-md-4">
<h6 for="example-text-input" class="form-control-label">City</h6>
<div class="input-group">
<input disabled class="form-control" type="text" name="address_city" value="{{employee.address_city}}">
</div>
</div>
<div class="col-md-4">
<h6 for="example-text-input" class="form-control-label">Country</h6>
<div class="input-group">
<input disabled class="form-control" type="text" name="address_country" value="{{employee.address_country}}">
</div>
</div>
<div class="col-md-4">
<h6 for="example-text-input" class="form-control-label">Postal code</h6>
<div class="input-group">
<input disabled class="form-control" type="text" name="address_postcode" value="{{employee.address_postcode}}">
</div>
</div>
<hr class="horizontal dark">
<p class="text-uppercase text-sm">Emergency Contact Information</p>
<div class="row">
<div class="col-md-12">
<h6 for="example-text-input" class="form-control-label">Emergency Contact Name</h6>
<div class="input-group">
<input disabled class="form-control" type="text" name="emergency_contact_name" value="{{employee.emergency_contact_name}}">
</div>
</div>
<div class="col-md-12">
<h6 for="example-text-input" class="form-control-label">Address</h6>
<div class="input-group">
<input disabled class="form-control" type="text" name="emergency_contact_address_street" value="{{employee.emergency_contact_address_street}}">
</div>
</div>
<div class="col-md-4">
<h6 for="example-text-input" class="form-control-label">City</h6>
<div class="input-group">
<input disabled class="form-control" type="text" name="emergency_contact_address_city" value="{{employee.emergency_contact_address_city}}">
</div>
</div>
<div class="col-md-4">
<h6 for="example-text-input" class="form-control-label">Country</h6>
<div class="input-group">
<input disabled class="form-control" type="text" name="emergency_contact_address_country" value="{{employee.emergency_contact_address_country}}">
</div>
</div>
<div class="col-md-4">
<h6 for="example-text-input" class="form-control-label">Postal code</h6>
<div class="input-group">
<input disabled class="form-control" type="text" name="emergency_contact_address_postcode" value="{{employee.emergency_contact_address_postcode}}">
</div>
</div>
<div class="col-md-6">
<h6 for="example-text-input" class="form-control-label">Contact Number</h6>
<div class="input-group">
<input disabled class="form-control" type="text" name="emergency_contact_phone_number" value="{{employee.emergency_contact_phone_number}}">
</div>
</div>
<div class="col-md-6">
<h6 for="example-text-input" class="form-control-label">Alternative Number</h6>
<div class="input-group">
<input disabled class="form-control" type="text" name="emergency_contact_alternative_number" value="{{employee.emergency_contact_alternative_number}}">
</div>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card card-profile">
<div class="card-body pt-0">
<div class="row">
<div class="col">
<div class="d-flex justify-content-center">
<div class="d-grid text-center m-2">
<span class="text-lg font-weight-bolder">{{ employee.holiday_days_allocated }}</span>
<span class="text-sm opacity-8">Holiday Allocation</span>
</div>
<div class="d-grid text-center m-2">
<span class="text-lg font-weight-bolder">{{ employee.holiday_days_remaining }}</span>
<span class="text-sm opacity-8">Holiday Remaining</span>
</div>
</div>
<div class="d-flex justify-content-center">
<div class="d-grid text-center m-2">
<span class="text-lg font-weight-bolder">{{ employee.days_absent_authorised }}</span>
<span class="text-sm opacity-8">Authorised Leave <br> in last 12m</span>
</div>
<div class="d-grid text-center m-2">
<span class="text-lg font-weight-bolder">{{ employee.days_absent_unauthorised }}</span>
<span class="text-sm opacity-8">Unuthorised Leave <br> in last 12m</span>
</div>
</div>
<div class="d-flex justify-content-between">
<a href="javascript:;" class="d-grid m-1 btn btn-sm btn-info mb-0 d-none d-lg-block">View Contract</a>
<a href="javascript:;" class="d-grid m-1 btn btn-sm btn-info mb-0 d-none d-lg-block">Manage Holiday</a>
<a href="javascript:;" class="d-grid m-1 btn btn-sm btn-info mb-0 d-none d-lg-block">Manage Absence</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" id="addDepartmentModal" tabindex="-1" role="dialog" aria-labelledby="addDepartmentModal" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-md" role="document">
<div class="modal-content">
<div class="modal-body p-0">
<div class="card card-plain">
<div class="card-header pb-0 text-left">
<h3 class="font-weight-bolder text-primary text-gradient">Add a new department</h3>
</div>
<div class="card-body pb-3">
<form role="form text-left">
<label>Department Name</label>
<div class="input-group mb-3">
<input type="text" class="form-control" id="departmentName" placeholder="Name" aria-label="Name" aria-describedby="name-addon">
</div>
<label>Select Line Manager</label>
<div class="input-group">
<select class="form-control" id="departmentManager">
{% for p in managers %}
<option value="{{ p.id }}">{{p.employee.first_name}} {{ p.employee.last_name }}</option>
{% endfor %}
</select>
</div>
<div class="text-center">
<button type="button" class="btn bg-gradient-primary btn-lg btn-rounded w-100 mt-4 mb-0" onclick="createDepartment()">
<span class="spinner-border spinner-border-sm" id="createSpinner" role="status" aria-hidden="true" hidden></span>
<span id="createText">Create</span>
</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
{% block scripts %}
<script src="{% static 'js/plugins/calendar/rome.js' %}"></script>
<script src="{% static 'js/plugins/calendar/main.js' %}"></script>
<script>
function editFields(){
document.querySelectorAll(['input', 'select', 'button']).forEach( input => {
try {
input.removeAttribute('disabled');
} catch {};
});
document.getElementById('editBtn').setAttribute('hidden', true)
document.getElementById('saveBtn').removeAttribute('hidden')
}
function saveFields(){
document.querySelectorAll(['input', 'select']).forEach( input => {
try {
input.setAttribute('disabled', true);
} catch {};
});
document.getElementById('company_addon').setAttribute('disabled', true);
document.getElementById('department_addon').setAttribute('disabled', true);
document.getElementById('submitSpinner').removeAttribute('hidden')
document.getElementById('submitText').setAttribute('hidden', true)
var formData = {}
document.querySelectorAll(['input', 'select']).forEach( input => {
let name = input.name;
let value = input.value;
if (name !== "" && value !== "") {
formData[name] = value;
}
});
console.log(formData)
event.preventDefault();
var postData = {data: JSON.stringify({formData})};
$.ajax({
url: "{% url 'manager:edit_employee' %}",
dataType: 'json',
data: postData,
type: 'POST',
headers: {'X-CSRFToken': csrftoken},
success:function(results){
document.getElementById('submitText').removeAttribute('hidden');
document.getElementById('submitSpinner').setAttribute('hidden', 'true');
document.getElementById('saveBtn').setAttribute('hidden', 'true');
document.getElementById('editBtn').removeAttribute('hidden');
toast.classList.remove('text-bg-danger', 'text-bg-success', 'text-bg-warning')
toast.classList.add(results['messageStatus']);
document.getElementById("toast-title").innerHTML = results['messageTitle'];
document.getElementById("toast-message").innerHTML = results['message'];
toastBootstrap.show();
},
error:function(results){
document.getElementById('submitText').removeAttribute('hidden');
document.getElementById('submitSpinner').setAttribute('hidden', 'true');
document.getElementById('saveBtn').setAttribute('hidden', 'true');
document.getElementById('editBtn').removeAttribute('hidden');
toast.classList.remove('text-bg-danger', 'text-bg-success', 'text-bg-warning')
toast.classList.add(results['messageStatus']);
document.getElementById("toast-title").innerHTML = results['messageTitle'];
document.getElementById("toast-message").innerHTML = results['message'];
toastBootstrap.show();
}
});
};
function createDepartment() {
document.getElementById('createSpinner').removeAttribute('hidden');
document.getElementById('createText').setAttribute('hidden', true);
var dept_name = document.getElementById('departmentName').value;
var manager = document.getElementById('departmentManager').value;
event.preventDefault();
var postData = {data: JSON.stringify({"departmentName": dept_name, "lineManager": manager})};
$.ajax({
url: "{% url 'manager:add_department' %}",
dataType: 'json',
data: postData,
type: 'POST',
headers: {'X-CSRFToken': csrftoken},
success:function(results){
document.getElementById('createText').removeAttribute('hidden');
document.getElementById('createSpinner').setAttribute('hidden', 'true');
toast.classList.remove('text-bg-danger', 'text-bg-success', 'text-bg-warning')
toast.classList.add(results['messageStatus']);
document.getElementById("toast-title").innerHTML = results['messageTitle'];
document.getElementById("toast-message").innerHTML = results['message'];
toastBootstrap.show();
$('#addDepartmentModal').modal('hide');
},
error:function(results){
document.getElementById('createText').removeAttribute('hidden');
document.getElementById('createSpinner').setAttribute('hidden', 'true');
toast.classList.remove('text-bg-danger', 'text-bg-success', 'text-bg-warning')
toast.classList.add(results['messageStatus']);
document.getElementById("toast-title").innerHTML = results['messageTitle'];
document.getElementById("toast-message").innerHTML = results['message'];
toastBootstrap.show();
$('#addDepartmentModal').modal('hide');
}
});
}
</script>
{% endblock scripts %}