New changes.

main
Nataly-ab 1 year ago
parent 45e37b64f5
commit c57a3434ad

Binary file not shown.

@ -26,6 +26,7 @@
}
}
/* TO ANIMATE THE BURGER MENU IN THE FIXED HEADER */
/* Default state */
.burgerMenuLine {
@ -37,4 +38,91 @@
.burgerMenuLine.expanded {
width: 2px;
height: 25px;
}
.closeMenuLine {
width: 2px;
height: 25px;
}
.closeMenuLine.expanded {
width: 25px;
height: 2px;
}
/* SIDE BAR */
@media (max-width: 1200px) {
#scrollPart {
margin-left: 0;
}
.fixedSideHeader {
display: none;
margin-top: 100px;
width: 100% !important;
z-index: 50;
position: absolute;
}
}
/* TO ANIMATION THE UER ACTIVITY FIXED BUTTON */
@keyframes zoomInOut {
0%,
100% {
transform: scale(1);
opacity: 0.5;
}
50% {
transform: scale(1.2);
/* Adjust the scale factor as needed */
opacity: 1;
/* Adjust the opacity as needed */
}
}
.usersActivityIcon {
animation: zoomInOut 1.5s infinite;
}
/* DRAGGABLE SLIDER */
.swiper-container {
width: 100%;
height: 100%;
overflow: hidden !important;
position: relative;
}
.swiper-slide {
width: 33% !important;
margin-right: 20px;
}
.swiper-slide:last-child {
margin-right: 0 !important;
}
.swiper-wrapper::-webkit-scrollbar {
width: 0;
background: transparent;
}
/* Hide the scrollbar thumb when not scrolling */
.swiper-wrapper::-webkit-scrollbar-thumb {
background: transparent;
}
/* Hide the scrollbar track when not scrolling */
.swiper-wrapper::-webkit-scrollbar-track {
background: transparent;
}
@media screen and (max-width: 500px) {
.swiper-slide {
width: 90% !important;
}
}

@ -519,32 +519,29 @@ def staff_position_modal(request):
return render(request, 'popup_modals/add-staffposition-modal.html', context)
def status_mobile_modal (request, *args, **kwargs):
context = {
}
return render(request, 'popup_modals/status-on-mobile-modal.html', context)
#Fetch Views
def fetch_related_tasks(request):
# Get the selected epic ID from the request
epic_id = request.GET.get("epic_id")
# Fetch tasks related to the selected epic along with their project
related_tasks = Task.objects.filter(epic_id=epic_id).select_related("project")
task_data = [
{
"name": task.name,
"status": task.status,
"start_date": task.formatted_start_date(),
"end_date": task.formatted_end_date(),
"extra": task.extra,
"task_id": task.task_id,
}
for task in related_tasks
]
return JsonResponse({"tasks": task_data})
#Fetch EPIC RELATED TASKS
def get_tasks (request, epic_id):
epic = get_object_or_404(Epic, id=epic_id)
related_tasks = Task.objects.filter(epic_id=epic).order_by('-id')
context = {
'epic': epic,
'related_tasks': related_tasks,
}
return render(request, 'epic-fetched-tasks.html', context)
@ -1296,6 +1293,9 @@ def edit_staff(request, staff_id):
if new_image:
staff.image = new_image
staff.active = request.POST.get('active') == 'on'
staff.intern = request.POST.get('intern') == 'on'
staff.save()

@ -62,7 +62,7 @@ urlpatterns = [
#Fetch urls
path("fetch_related_tasks/", views.fetch_related_tasks, name="fetch_related_tasks"),
path('get_tasks/<int:epic_id>/', views.get_tasks, name='get_tasks'),
#Modals urls
@ -82,6 +82,7 @@ urlpatterns = [
path('add-tag/', views.add_tag_modal, name='addtag'),
path('add-businesscustomer/', views.add_business_modal, name='addbusinesscustomer'),
path('add-staffposition/', views.staff_position_modal, name='addstaffposition'),
path('statusmobilemodal/', views.status_mobile_modal, name='statusmobilemodal'),
#Save Urls

@ -667,10 +667,18 @@ video {
bottom: 0.5rem;
}
.bottom-3 {
bottom: 0.75rem;
}
.bottom-5 {
bottom: 1.25rem;
}
.left-0 {
left: 0px;
}
.right-0 {
right: 0px;
}
@ -691,10 +699,18 @@ video {
right: 1.25rem;
}
.top-1 {
top: 0.25rem;
}
.top-3 {
top: 0.75rem;
}
.z-10 {
z-index: 10;
}
.z-20 {
z-index: 20;
}
@ -728,6 +744,10 @@ video {
margin-bottom: 1.25rem;
}
.ml-0 {
margin-left: 0px;
}
.ml-\[300px\] {
margin-left: 300px;
}
@ -784,6 +804,10 @@ video {
display: block;
}
.inline-block {
display: inline-block;
}
.flex {
display: flex;
}
@ -824,6 +848,10 @@ video {
height: 150px;
}
.h-\[25px\] {
height: 25px;
}
.h-\[2px\] {
height: 2px;
}
@ -881,10 +909,6 @@ video {
width: 12rem;
}
.w-\[10\%\] {
width: 10%;
}
.w-\[100\%\] {
width: 100%;
}
@ -901,10 +925,6 @@ video {
width: 13px;
}
.w-\[14\%\] {
width: 14%;
}
.w-\[15\%\] {
width: 15%;
}
@ -945,8 +965,8 @@ video {
width: 25px;
}
.w-\[3\%\] {
width: 3%;
.w-\[2px\] {
width: 2px;
}
.w-\[30\%\] {
@ -961,10 +981,6 @@ video {
width: 30px;
}
.w-\[33\.33\%\] {
width: 33.33%;
}
.w-\[35\%\] {
width: 35%;
}
@ -981,18 +997,10 @@ video {
width: 40px;
}
.w-\[45\%\] {
width: 45%;
}
.w-\[45px\] {
width: 45px;
}
.w-\[5\%\] {
width: 5%;
}
.w-\[50\%\] {
width: 50%;
}
@ -1005,8 +1013,8 @@ video {
width: 50px;
}
.w-\[55\%\] {
width: 55%;
.w-\[55px\] {
width: 55px;
}
.w-\[60px\] {
@ -1017,10 +1025,6 @@ video {
width: 74.5%;
}
.w-\[75\%\] {
width: 75%;
}
.w-\[80\%\] {
width: 80%;
}
@ -1062,6 +1066,10 @@ video {
max-width: 24rem;
}
.max-w-xl {
max-width: 36rem;
}
.max-w-xs {
max-width: 20rem;
}
@ -1078,6 +1086,11 @@ video {
border-collapse: collapse;
}
.-translate-y-1 {
--tw-translate-y: -0.25rem;
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.transform {
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
@ -1106,6 +1119,10 @@ video {
list-style-type: disc;
}
.grid-cols-1 {
grid-template-columns: repeat(1, minmax(0, 1fr));
}
.grid-cols-2 {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
@ -1114,6 +1131,18 @@ video {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.grid-cols-4 {
grid-template-columns: repeat(4, minmax(0, 1fr));
}
.grid-cols-6 {
grid-template-columns: repeat(6, minmax(0, 1fr));
}
.flex-row {
flex-direction: row;
}
.flex-col {
flex-direction: column;
}
@ -1154,6 +1183,10 @@ video {
justify-content: space-between;
}
.gap-0 {
gap: 0px;
}
.gap-1 {
gap: 0.25rem;
}
@ -1231,6 +1264,11 @@ video {
border-radius: 0.375rem;
}
.rounded-b-md {
border-bottom-right-radius: 0.375rem;
border-bottom-left-radius: 0.375rem;
}
.rounded-e-md {
border-start-end-radius: 0.375rem;
border-end-end-radius: 0.375rem;
@ -1294,6 +1332,11 @@ video {
border-style: none;
}
.border-black {
--tw-border-opacity: 1;
border-color: rgb(0 0 0 / var(--tw-border-opacity));
}
.border-blue-500 {
--tw-border-opacity: 1;
border-color: rgb(59 130 246 / var(--tw-border-opacity));
@ -1339,11 +1382,21 @@ video {
border-color: rgb(239 68 68 / var(--tw-border-opacity));
}
.border-red-600 {
--tw-border-opacity: 1;
border-color: rgb(220 38 38 / var(--tw-border-opacity));
}
.border-slate-600 {
--tw-border-opacity: 1;
border-color: rgb(71 85 105 / var(--tw-border-opacity));
}
.border-slate-700 {
--tw-border-opacity: 1;
border-color: rgb(51 65 85 / var(--tw-border-opacity));
}
.border-slate-800 {
--tw-border-opacity: 1;
border-color: rgb(30 41 59 / var(--tw-border-opacity));
@ -1546,6 +1599,14 @@ video {
--tw-bg-opacity: 0.4;
}
.bg-opacity-50 {
--tw-bg-opacity: 0.5;
}
.bg-opacity-60 {
--tw-bg-opacity: 0.6;
}
.stroke-black {
stroke: #000;
}
@ -1610,6 +1671,11 @@ video {
padding-right: 2rem;
}
.px-9 {
padding-left: 2.25rem;
padding-right: 2.25rem;
}
.py-1 {
padding-top: 0.25rem;
padding-bottom: 0.25rem;
@ -1746,6 +1812,11 @@ video {
line-height: 2rem;
}
.text-black {
--tw-text-opacity: 1;
color: rgb(0 0 0 / var(--tw-text-opacity));
}
.text-blue-500 {
--tw-text-opacity: 1;
color: rgb(59 130 246 / var(--tw-text-opacity));
@ -1786,6 +1857,11 @@ video {
color: rgb(239 68 68 / var(--tw-text-opacity));
}
.text-red-600 {
--tw-text-opacity: 1;
color: rgb(220 38 38 / var(--tw-text-opacity));
}
.text-slate-700 {
--tw-text-opacity: 1;
color: rgb(51 65 85 / var(--tw-text-opacity));
@ -1868,6 +1944,18 @@ video {
outline-style: solid;
}
.filter {
filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}
.transition {
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-duration: 150ms;
}
.transition-colors {
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
@ -1880,10 +1968,24 @@ video {
transition-duration: 150ms;
}
.transition-transform {
transition-property: transform;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-duration: 150ms;
}
.duration-300 {
transition-duration: 300ms;
}
.duration-500 {
transition-duration: 500ms;
}
.ease-in-out {
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}
::-webkit-scrollbar {
width: 5px;
/* Width of the entire scrollbar */
@ -1923,6 +2025,94 @@ video {
height: 25px;
}
.closeMenuLine {
width: 2px;
height: 25px;
}
.closeMenuLine.expanded {
width: 25px;
height: 2px;
}
/* SIDE BAR */
@media (max-width: 1200px) {
#scrollPart {
margin-left: 0;
}
.fixedSideHeader {
display: none;
margin-top: 100px;
width: 100% !important;
z-index: 50;
position: absolute;
}
}
/* TO ANIMATION THE UER ACTIVITY FIXED BUTTON */
@keyframes zoomInOut {
0%,
100% {
transform: scale(1);
opacity: 0.5;
}
50% {
transform: scale(1.2);
/* Adjust the scale factor as needed */
opacity: 1;
/* Adjust the opacity as needed */
}
}
.usersActivityIcon {
animation: zoomInOut 1.5s infinite;
}
/* DRAGGABLE SLIDER */
.swiper-container {
width: 100%;
height: 100%;
overflow: hidden !important;
position: relative;
}
.swiper-slide {
width: 33% !important;
margin-right: 20px;
}
.swiper-slide:last-child {
margin-right: 0 !important;
}
.swiper-wrapper::-webkit-scrollbar {
width: 0;
background: transparent;
}
/* Hide the scrollbar thumb when not scrolling */
.swiper-wrapper::-webkit-scrollbar-thumb {
background: transparent;
}
/* Hide the scrollbar track when not scrolling */
.swiper-wrapper::-webkit-scrollbar-track {
background: transparent;
}
@media screen and (max-width: 500px) {
.swiper-slide {
width: 90% !important;
}
}
.hover\:bg-blue-500:hover {
--tw-bg-opacity: 1;
background-color: rgb(59 130 246 / var(--tw-bg-opacity));
@ -1972,11 +2162,63 @@ video {
outline-offset: 2px;
}
.group:hover .group-hover\:opacity-100 {
opacity: 1;
.group:hover .group-hover\:flex {
display: flex;
}
@media (min-width: 650px) {
.s\:h-\[35px\] {
height: 35px;
}
.s\:h-\[50px\] {
height: 50px;
}
.s\:w-\[35px\] {
width: 35px;
}
.s\:w-\[50px\] {
width: 50px;
}
.s\:w-fit {
width: -moz-fit-content;
width: fit-content;
}
.s\:flex-row {
flex-direction: row;
}
.s\:justify-end {
justify-content: flex-end;
}
.s\:gap-0 {
gap: 0px;
}
.s\:px-9 {
padding-left: 2.25rem;
padding-right: 2.25rem;
}
}
@media (min-width: 798px) {
.md\:block {
display: block;
}
.md\:hidden {
display: none;
}
.md\:h-\[150px\] {
height: 150px;
}
.md\:w-\[300px\] {
width: 300px;
}
@ -1985,4 +2227,60 @@ video {
width: -moz-fit-content;
width: fit-content;
}
}
@media (min-width: 1110px) {
.lg\:block {
display: block;
}
.lg\:grid {
display: grid;
}
.lg\:hidden {
display: none;
}
.lg\:w-\[75\%\] {
width: 75%;
}
}
@media (min-width: 1200px) {
.xlg1\:fixed {
position: fixed;
}
.xlg1\:w-\[300px\] {
width: 300px;
}
}
@media (min-width: 1300px) {
.xlg\:flex {
display: flex;
}
.xlg\:hidden {
display: none;
}
.xlg\:grid-cols-6 {
grid-template-columns: repeat(6, minmax(0, 1fr));
}
}
@media (min-width: 1350px) {
.xxlg1\:flex {
display: flex;
}
.xxlg1\:hidden {
display: none;
}
.xxlg1\:grid-cols-3 {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

@ -0,0 +1,22 @@
var swiper = new Swiper('.swiper-container', {
scrollbar: {
el: '.swiper-scrollbar',
hide: false,
draggable: true,
},
loop: false,
slidesPerView: 'auto',
initialSlide: 0
});
// FOR THE BUTTONS
var swiperRightButton = document.getElementById('sliderRight');
var swiperLeftButton = document.getElementById('sliderLeft');
swiperRightButton.addEventListener('click', function() {
swiper.slideNext();
});
swiperLeftButton.addEventListener('click', function() {
swiper.slidePrev();
});

@ -0,0 +1,46 @@
$(document).ready(function () {
// Function to fetch related tasks based on epic ID
function fetchRelatedTasks(epicId) {
$.ajax({
type: "GET",
url: "/get_tasks/" + epicId + "/",
success: function (data) {
// console.log("Ajax call success. Data received:", data);
$("#epicRelatedTasksContainer").html(data);
},
error: function (xhr, status, error) {
console.log("Ajax call failed. Error details:");
console.log("XHR Object:", xhr);
console.log("Status:", status);
console.log("Error:", error);
}
});
}
$("select#epicSelect").change(function () {
// Get the selected option's value
var selectedEpicId = $(this).val();
if (selectedEpicId) {
// Fetch related tasks based on the selected epic
fetchRelatedTasks(selectedEpicId);
}
});
$('#epicSelect').change(function () {
var selectedEpic = $(this).find(':selected');
var startDate = selectedEpic.data('start-date');
var endDate = selectedEpic.data('end-date');
if (startDate && endDate) {
$('#epicDetails').removeClass('hidden');
$('#epicDetails span#startDate').text(startDate);
$('#epicDetails span#endDate').text(endDate);
} else {
$('#epicDetails').addClass('hidden');
}
});
});

@ -59,6 +59,10 @@ document.addEventListener("DOMContentLoaded", function () {
addButtonClickListener("addTagButton", "fit-content", "160px");
addButtonClickListener("addBusinessButton", "550px", "500px");
addButtonClickListener("addStaffPositionButton", "fit-content", "160px");
addButtonClickListener("usersActivityIcon", "500px", "600px");
addButtonClickListener("addStatusButtonMobile", "500px", "80px");
const closeButton = document.getElementById("closeModalButton");
closeButton.addEventListener("click", () => {

@ -2,11 +2,10 @@ const showNotesButton = document.getElementById("showNotesButton");
const notesContainer = document.getElementById("notesContainer");
showNotesButton.addEventListener("click", () => {
if (notesContainer.style.display === "none" || notesContainer.style.display === "") {
notesContainer.style.display = "flex";
showNotesButton.textContent = "Hide Notes"; // Change the button text
} else {
notesContainer.style.display = "none";
showNotesButton.textContent = "Show Notes"; // Change the button text
}
});
// Toggle the 'hidden' class on notesContainer
notesContainer.classList.toggle("hidden");
// Update the button text based on the container's visibility
const isHidden = notesContainer.classList.contains("hidden");
showNotesButton.textContent = isHidden ? "Show Notes" : "Hide Notes";
});

@ -1,13 +1,16 @@
//TO OPEN AND CLOSE THE SIDE BAR + ADDING ANIMATION TO THE BURGER MENU BUTTON
document.addEventListener('DOMContentLoaded', function () {
// This code will run when the DOM is fully loaded
const fixedSideHeader = document.getElementById('fixedSideHeader');
const scrollPart = document.getElementById('scrollPart');
const burgerMenuButton = document.getElementById('burgerMenuButton');
const burgerMenuLines = document.querySelectorAll('.burgerMenuLine');
const closeMenuButton = document.getElementById('closeMenuButton');
const closeMenuLines = document.querySelectorAll('.closeMenuLine');
function toggleSideHeader() {
if (fixedSideHeader.style.display === 'none') {
const computedStyle = getComputedStyle(fixedSideHeader);
const isHidden = computedStyle.display === 'none';
if (isHidden) {
fixedSideHeader.style.display = 'block';
burgerMenuButton.classList.add('flex-col');
@ -17,7 +20,6 @@ document.addEventListener('DOMContentLoaded', function () {
line.classList.remove('expanded');
});
// scrollPart.classList.add('duration-1000');
scrollPart.classList.remove('w-full');
scrollPart.classList.add('flex-1');
scrollPart.classList.add('ml-[300px]');
@ -31,7 +33,39 @@ document.addEventListener('DOMContentLoaded', function () {
line.classList.add('expanded');
});
// scrollPart.classList.add('duration-1000');
scrollPart.classList.remove('flex-1');
scrollPart.classList.remove('ml-[300px]');
scrollPart.classList.add('w-full');
}
}
function toggleCloseMenu() {
const computedStyle = getComputedStyle(fixedSideHeader);
const isHidden = computedStyle.display === 'none';
if (isHidden) {
fixedSideHeader.style.display = 'block';
closeMenuButton.classList.add('flex-col');
closeMenuButton.classList.remove('flex-row');
closeMenuLines.forEach((line) => {
line.classList.add('expanded');
});
scrollPart.classList.remove('w-full');
scrollPart.classList.add('flex-1');
scrollPart.classList.add('ml-[300px]');
} else {
fixedSideHeader.style.display = 'none';
closeMenuButton.classList.remove('flex-col');
closeMenuButton.classList.add('flex-row');
closeMenuLines.forEach((line) => {
line.classList.remove('expanded');
});
scrollPart.classList.remove('flex-1');
scrollPart.classList.remove('ml-[300px]');
scrollPart.classList.add('w-full');
@ -39,9 +73,11 @@ document.addEventListener('DOMContentLoaded', function () {
}
burgerMenuButton.addEventListener('click', toggleSideHeader);
closeMenuButton.addEventListener('click', toggleCloseMenu);
});
// SCRIPT FOR THE SIDEBAR MENU ITEMS
const menuContainers = document.querySelectorAll('.menu-container');

@ -1,6 +1,7 @@
{% extends "main.html" %}
{%load static%}
{% block content %}
<style>
/* TO APPLY HOVER EFFECT ON THE CREATE TASK AND STORY BUTTONS WHEN THEY ARE NOT :disabled ANYMORE */
.epicButtons:not([disabled]):hover {
@ -9,6 +10,7 @@
/* Blue-500 color */
}
</style>
<!-- NOTES SECTION -->
<div class="w-full h-fit flex justify-between items-center px-10 pb-5">
<div class="relative w-full h-fit bg-white shadow-md rounded-md p-5">
@ -321,16 +323,14 @@
<div class="w-full mt-5">
<div class="w-full bg-slate-300 rounded-md shadow-md h-fit p-5 flex justify-between items-center">
<div>
<form method="POST" action="{% url 'save_task' %}">
<select id="epicSelect" name="epic_id"
class="w-[250px] rounded-md border border-gray-300 p-3 outline-none text-gray-500 cursor-pointer">
<option selected disabled>EPICS</option>
{% for epic in epics %}
<option value="{{ epic.id }}" data-start-date="{{ epic.start_date }}"
data-end-date="{{ epic.end_date }}">{{epic.title}}</option>
{% endfor %}
</select>
</form>
<select id="epicSelect" name="epic_id"
class="w-[250px] rounded-md border border-gray-300 p-3 outline-none text-gray-500 cursor-pointer">
<option selected disabled>EPICS</option>
{% for epic in epics %}
<option class="epic-link" value="{{ epic.id }}" data-start-date="{{ epic.start_date }}"
data-end-date="{{ epic.end_date }}">{{epic.title}}</option>
{% endfor %}
</select>
</div>
<div class="w-fit flex flex-col items-center gap-2">
<div class="w-fit justify-start items-center gap-2 hidden" id="epicDetails">
@ -366,160 +366,13 @@
</div>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
$(document).ready(function () {
$('#epicSelect').change(function () {
var selectedEpic = $(this).find(':selected');
var startDate = selectedEpic.data('start-date');
var endDate = selectedEpic.data('end-date');
if (startDate && endDate) {
$('#epicDetails').removeClass('hidden');
$('#epicDetails span#startDate').text(startDate);
$('#epicDetails span#endDate').text(endDate);
} else {
$('#epicDetails').addClass('hidden');
}
});
});
</script>
</div>
<div class="w-full px-4 hidden" id="epicRelatedTasks">
</div>
<!-- TO DISPLAY THE FETCHED TASKS -->
<div class="w-full px-4" id="epicRelatedTasksContainer">
<script>
document.addEventListener("DOMContentLoaded", function () {
var epicSelect = document.getElementById("epicSelect");
var epicRelatedTasks = document.getElementById("epicRelatedTasks");
epicSelect.addEventListener("change", function () {
// Get the selected option element
var selectedOption = epicSelect.options[epicSelect.selectedIndex];
// Check if an option other than the default "EPICS" is selected
if (selectedOption.value !== "") {
// Get the data attributes (start-date and end-date) from the selected option
var startDate = selectedOption.getAttribute("data-start-date");
var endDate = selectedOption.getAttribute("data-end-date");
// Fetch related tasks based on the selected epic ID
fetchTasks(selectedOption.value, startDate, endDate);
} else {
// Hide the related tasks container when the default "EPICS" option is selected
epicRelatedTasks.style.display = "none";
}
});
// Function to fetch and display related tasks
function fetchTasks(epicId, startDate, endDate) {
// Send an AJAX request to fetch related tasks
fetch("/fetch_related_tasks/?epic_id=" + epicId)
.then(function (response) {
return response.json();
})
.then(function (data) {
// Build the HTML for the related tasks
var tasksHtml = buildTasksHtml(data.tasks);
// Update the content of the epicRelatedTasks container with the fetched tasks
epicRelatedTasks.innerHTML = tasksHtml;
epicRelatedTasks.style.display = "block";
})
.catch(function (error) {
console.error("Error fetching tasks:", error);
});
}
// Function to build the HTML for related tasks
function buildTasksHtml(tasks) {
// Initialize the HTML with the table header
var html = '<p class="text-gray-500 text-xl">Related Tasks: </p>';
html += '<div class="w-full bg-white h-fit rounded-md border border-gray-300 mt-3 flex flex-col gap-4 p-3">';
// Build HTML for each task
tasks.forEach(function (task) {
// TABLE HEADER
html += '<div class="w-full h-fit border border gray-300 rounded-t-md">';
html += '<div class="w-full flex h-[70px] rounded-t-md border-b border-gray-300">';
if (task.status == 'Open') {
html += '<div class="w-[55%] flex justify-center items-center border-r border-gray-300 bg-green-700 rounded-tl-md">';
} else if (task.status == 'Working On') {
html += '<div class="w-[55%] flex justify-center items-center border-r border-gray-300 bg-yellow-400 rounded-tl-md">';
} else {
html += '<div class="w-[55%] flex justify-center items-center border-r border-gray-300">';
}
html += '<p class="text-xl text-white">' + task.name + '</p>';
html += '</div>';
html += '<div class="w-[15%] flex justify-center items-center border-r border-gray-300">';
html += '<p class="text-slate-700">' + task.status + '</p>';
html += '</div>';
html += '<div class="w-[15%] flex justify-center items-center border-r border-gray-300">';
html += '<p class="text-slate-700">' + task.start_date + '</p>';
html += '</div>';
html += '<div class="w-[15%] flex justify-center items-center border-gray-300">';
html += '<p class="text-slate-700">' + task.end_date + '</p>';
html += '</div>';
html += '</div>';
// TABLE BODY
html += '<div class="w-full h-fit flex">';
// Left side of the table
html += '<div class="w-[55%] h-fit bg-white p-3 rounded-bl-md">';
html += '<div class="w-full flex flex-col gap-2">';
html += '<div class="flex justify-start items-center gap-2">';
html += '<p class="text-gray-400 text-base"> Assigned To:</p>';
html += '<p class="text-slate-800 text-base"> nataly </p>';
html += '</div>';
html += '<div class="flex justify-start items-center gap-2">';
html += '<p class="text-gray-400 text-base">Files:</p>';
html += '<p class="text-slate-800 text-base"> pdf, docx </p>';
html += '</div>';
html += '<div class="flex justify-start items-center gap-2">';
html += '<p class="text-gray-400 text-base">Tags:</p>';
html += '<p class="text-slate-800 text-base"> tasg test </p>';
html += '</div>';
html += '<div class="flex justify-start items-center gap-2">';
html += '<p class="text-gray-400 text-base">Extra:</p>';
html += '<p class="text-slate-800 text-base">' + task.extra + '</p>';
html += '</div>';
html += '</div>';
html += '</div>';
// Right Side
html += '<div class="w-[45%] h-fit bg-white flex flex-wrap justify-start rounded-br-md">';
html += '<button class="w-[33.33%] p-2 border border-gray-200 text-base h-[70px] bg-gray-300 text-gray-500">Close</button>';
html += '<button class="w-[33.33%] p-2 border border-gray-200 text-base h-[70px] bg-gray-300 text-gray-500">Update Status</button>';
html += '<button class="w-[33.33%] p-2 border border-gray-200 text-base h-[70px] bg-gray-300 text-gray-500">Add Time</button>';
html += '<button class="w-[33.33%] p-2 border border-gray-200 text-base h-[70px] bg-red-500 text-white">Delete</button>';
html += '<button class="w-[33.33%] p-2 border border-gray-200 text-base h-[70px] bg-blue-500 text-white">Update</button>';
html += '<button class="w-[33.33%] p-2 border border-gray-200 text-base h-[70px] bg-gray-300 text-gray-500">Show Points</button>';
html += '<button class="w-[33.33%] p-2 border border-gray-200 text-base h-[70px] bg-gray-300 text-gray-500">Add Point</button>';
html += '<button class="w-[33.33%] p-2 border border-gray-200 text-base h-[70px] bg-gray-300 text-gray-500">Details</button>';
html += '<button class="w-[33.33%] p-2 border border-gray-200 text-base h-[70px] bg-gray-300 text-gray-500 rounded-br-md">Timelines</button>';
html += '</div>';
html += '</div>';
html += '</div>';
});
html += '</div>';
return html;
}
});
</script>
</div>
</div>
</div>
@ -529,7 +382,7 @@
<h1 class="text-2xl text-slate-700 text-center font-semibold">USERS ACTIVITY</h1>
<div class="w-full h-fit mt-2" id="activitiesContainer">
{% include 'recent-activities.html' %}
{% include 'recent-activities.html' %}
</div>
</div>
@ -558,6 +411,9 @@
<!-- THE SCRIPT FOR THE EPICS BAR -->
<script type="text/javascript" src='{% static "js/epics.js" %}'></script>
<!-- TO FETCH THE RELATED TASKS -->
<script type="text/javascript" src='{% static "js/fetch-epic-tasks.js" %}'></script>
<!-- TO DISPLAY THE PROJECT PROGRESS BAR BASED ON ITS REMAINING TIME -->
<script type="text/javascript" src='{% static "js/calculate-project-time.js" %}'></script>
{% endblock content %}

@ -106,24 +106,30 @@
{% endfor %}
</select>
</div>
{% if staff.active %}
<div class="w-full flex justify-start items-center gap-2 mt-2">
<input {% if staff.active %} checked {% endif %} type="checkbox">
<input checked type="checkbox" name="active">
<p class="text-gray-500 text-xl">Active</p>
<input type="hidden" name="active" value="False">
</div>
{% else %}
<div class="w-full flex justify-start items-center gap-2 mt-2">
<input type="checkbox" name="active">
<p class="text-gray-500 text-xl">Active</p>
</div>
{% endif %}
{% if staff.intern %}
<div class="w-full flex justify-start items-center gap-2 mt-2">
<input {% if staff.intern %} checked {% endif %} type="checkbox">
<input checked type="checkbox" name="intern">
<p class="text-gray-500 text-xl">Intern</p>
<input type="hidden" name="intern" value="False">
</div>
{% else %}
<div class="w-full flex justify-start items-center gap-2 mt-2">
<input type="checkbox" name="intern">
<p class="text-gray-500 text-xl">Intern</p>
</div>
{% endif %}
<div class="w-full flex justify-center items-center mt-3">
<button type="submit"
class="w-fit py-1 px-3 bg-blue-500 rounded-md outline-none text-white border border-blue-500 text-xl cursor-pointer hover:bg-white hover:text-blue-500">Save</button>

@ -0,0 +1,156 @@
{% load static %}
{% for task in related_tasks %}
<div class="w-full h-fit bg-white p-3 rounded-md shadow-md mb-5">
<div class="w-full bg-white h-fit rounded-md border border-gray-200">
<!-- TABLE HEADER -->
<div class="w-full h-[70px] rounded-t-md grid grid-cols-2">
<div
class="flex justify-center items-center border-r border-b border-gray-200 bg-slate-600 rounded-tl-md text-xl text-white font-semibold">
<p>{{task.name}}</p>
</div>
<div class="grid grid-cols-3">
{% if task.status == 'Closed' %}
<div class="flex justify-center items-center border-r border-b border-gray-200 text-white bg-green-700">
<p>{{task.status}}</p>
</div>
{% endif %}
{% if task.status == 'Open' %}
<div class="flex justify-center items-center border-r border-b border-gray-200 text-white bg-red-500">
<p>{{task.status}}</p>
</div>
{% endif %}
{% if task.status == 'Working On' %}
<div
class="flex justify-center items-center border-r border-b border-gray-200 text-white bg-orange-500">
<p>{{task.status}}</p>
</div>
{% endif %}
{% if task.status == 'Closed' %}
<div class="flex justify-center items-center border-r border-b border-gray-200 text-white bg-green-700">
<p>{{task.formatted_start_date}}</p>
</div>
{% endif %}
{% if task.status == 'Open' %}
<div class="flex justify-center items-center border-r border-b border-gray-200 text-white bg-red-500">
<p>{{task.formatted_start_date}}</p>
</div>
{% endif %}
{% if task.status == 'Working On' %}
<div
class="flex justify-center items-center border-r border-b border-gray-200 text-white bg-orange-500">
<p>{{task.formatted_start_date}}</p>
</div>
{% endif %}
{% if task.status == 'Closed' %}
<div class="flex justify-center items-center border-r border-b border-gray-200 text-white bg-green-700 rounded-tr-md">
<p>{{task.formatted_end_date}}</p>
</div>
{% endif %}
{% if task.status == 'Open' %}
<div
class="flex justify-center items-center border-b border-gray-200 text-white bg-red-500 rounded-tr-md">
<p>{{task.formatted_end_date}}</p>
</div>
{% endif %}
{% if task.status == 'Working On' %}
<div
class="flex justify-center items-center border-b border-gray-200 text-white bg-orange-500 rounded-tr-md">
<p>{{task.formatted_end_date}}</p>
</div>
{% endif %}
</div>
</div>
<!-- TABLE BODY -->
<div class="w-full h-fit grid grid-cols-2">
<!-- LEFT SIDE OF TABLE BODY -->
<div class="h-fit bg-white p-3 rounded-bl-md">
<!-- 1st row -->
<div class="w-full flex flex-col gap-2">
<div class="flex justify-start items-center gap-2">
<p class="text-gray-400 text-base">Project:</p>
<p class="text-slate-700 text-base">{{task.project.name}}</p>
</div>
<div class="flex justify-start items-center gap-2">
<p class="text-gray-400 text-base">Epic:</p>
<p class="text-slate-700 text-base">{{task.epic.title}}</p>
</div>
<div class="flex justify-start items-center gap-2">
<p class="text-gray-400 text-base">Assigned To:</p>
<p class="text-slate-700 text-base">{{task.assigned_to.user.first_name}}
{{task.assigned_to.user.last_name}}</p>
</div>
<div class="flex justify-start items-center gap-2">
<p class="text-gray-400 text-base">Files:</p>
<p class="text-slate-700 text-base"></p>
</div>
<div class="flex justify-start items-center gap-2">
<p class="text-gray-400 text-base">Tags:</p>
<p class="text-slate-700 text-base"></p>
</div>
<div class="flex justify-start items-center gap-2">
<p class="text-gray-400 text-base">Extra:</p>
<p class="text-slate-700 text-base">{{task.extra}}</p>
</div>
</div>
</div>
<!-- RIGHT SIDE OF TABLE BODY -->
<div class="h-fit bg-white grid grid-cols-3 rounded-br-md">
<button class="p-2 border border-gray-200 text-base h-[70px] bg-gray-100 text-gray-500">Close</button>
<button
class="p-2 border border-gray-200 text-base h-[70px] bg-gray-100 text-gray-500 updateStatusButton"
data-modal-url="{% url 'updatestatus' task.task_id %}">Update
Status</button>
<button class="p-2 border border-gray-200 text-base h-[70px] bg-gray-100 text-gray-500 addTimeButton"
data-modal-url="{% url 'addtime' %}">Add
Time</button>
<button class="p-2 border border-gray-200 text-base h-[70px] bg-gray-100 text-gray-500 deleteTaskButton"
data-modal-url="{% url 'deletetask' %}">Delete</button>
<a href="{% url 'edittask' %}">
<button
class="w-full p-2 border border-gray-200 text-base h-[70px] bg-gray-100 text-gray-500">Edit</button>
</a>
<button class="p-2 border border-gray-200 text-base h-[70px] bg-gray-100 text-gray-500 showPointsButton"
data-modal-url="{% url 'showpoints' task.task_id %}">Show
Points</button>
<button class="p-2 border border-gray-200 text-base h-[70px] bg-gray-100 text-gray-500 addPointButton"
data-modal-url="{% url 'addpoint' task.task_id %}">Add
Point</button>
<a href="{% url 'detailed-task' task.task_id %}">
<button
class="w-full p-2 border border-gray-200 text-base h-[70px] bg-gray-100 text-gray-500">Details</button>
</a>
<button
class="p-2 border border-gray-200 text-base h-[70px] bg-gray-100 text-gray-500 rounded-br-md timelineButton"
data-modal-url="{% url 'timeline' %}">Timeline</button>
</div>
</div>
</div>
</div>
{% endfor %}

@ -1,11 +1,19 @@
{% extends "main.html" %}
{%load static%}
{% block content %}
<div class="w-[55px] h-[55px] bg-slate-700 rounded-full fixed lg:hidden bottom-3 right-3 p-2 flex justify-center items-center cursor-pointer usersActivityIcon z-20"
data-modal-url="{% url 'getupdatedactivities' %}">
<img src="{% static 'images/usersactivity.png' %}" alt="Users">
</div>
<!-- NOTES SECTION -->
<div class="w-full h-fit flex justify-between items-center px-10 pb-5">
<div class="relative w-full h-fit bg-white shadow-md rounded-md p-5">
<div class="w-full flex justify-between items-center">
<div>
<div class="w-full px-5 s:px-9 pb-5">
<div class="w-full h-fit bg-white shadow-md rounded-md p-5">
<div class="w-full flex flex-col s:flex-row justify-between gap-3 s:gap-0 items-center">
<div class="w-full s:w-fit">
<p class="text-base text-gray-500">Recent Note:</p>
<div class="flex justify-start items-center gap-2">
<div class="w-[13px] h-[13px] bg-red-200 rounded-full"
@ -15,9 +23,9 @@
<p class="text-slate-700">{{recent_note.text}}</p>
</div>
</div>
<div class="flex justify-end items-center gap-4">
<div class="w-full s:w-fit flex justify-start s:justify-end items-center gap-4">
<button
class="w-fit rounded-md py-1 px-3 bg-slate-800 border border-slate-800 text-white hover:bg-white hover:text-slate-800"
class="w-full s:w-fit rounded-md py-1 px-3 bg-slate-800 border border-slate-800 text-white hover:bg-white hover:text-slate-800"
id="showNotesButton">Show
Notes</button>
<button
@ -29,179 +37,347 @@
</div>
<!-- ALL NOTES CONTAINER (it appears when clicking on the "Show notes" button) -->
<div class="w-full h-fit relative hidden justify-start gap-3 items-center mt-5 overflow-hidden overflow-x-auto"
id="notesContainer">
<div class="w-full h-fit hidden mt-5" id="notesContainer">
{% for note in notes %}
<div class="w-[16.33%] h-[150px] shadow-sm p-5" style="background-color: {{note.color}}">
<p class="text-base text-slate-800">{{note.text}}</p>
<div class="w-full hidden lg:grid grid-cols-3 xlg:grid-cols-6 gap-3">
{% for note in notes %}
<div class="h-[150px] shadow-sm p-5" style="background-color: {{note.color}}">
<p class="text-base text-slate-800">{{note.text}}</p>
</div>
{% endfor %}
</div>
{% endfor %}
<div class="w-full black lg:hidden">
<div class="swiper-container mt-5">
<div class="swiper-wrapper">
{% for note in notes %}
<div class="swiper-slide">
<div class="w-full h-[150px] p-3 flex justify-start items-start"
style="background-color: {{note.color}}">
{{note.text}}
</div>
</div>
{% endfor %}
</div>
<div class="flex justify-center items-center gap-3 mt-5">
<div class="w-[35px] h-[35px] bg-slate-700 b rounded-md text-white flex justify-center items-center text-[18px] cursor-pointer z-10"
id="sliderLeft">
<i class="fa fa-angle-left"></i>
</div>
<div class="w-[35px] h-[35px] bg-slate-700 b rounded-md text-white flex justify-center items-center text-[18px] cursor-pointer z-10"
id="sliderRight">
<i class="fa fa-angle-right"></i>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- TASKS AND USERS ACTIVITY SECTION -->
<div class="w-full flex justify-between gap-5 px-10 pb-5">
<div class="w-full flex justify-between gap-5 px-5 s:px-9 pb-5">
<!-- LEFT SIDE / TASKS SECTION -->
<div class="w-[75%]">
<div class="w-full lg:w-[75%]">
<!-- TASKS ON DESKTOP -->
<div class="hidden md:block">
<!-- TASKS TABLE -->
{% for task in tasks %}
<div class="w-full h-fit bg-white p-3 rounded-md shadow-md mb-5">
<div class="w-full bg-white h-fit rounded-md border border-gray-200">
<!-- TABLE HEADER -->
<div class="w-full h-[70px] rounded-t-md grid grid-cols-2">
<div
class="flex justify-center items-center border-r border-b border-gray-200 bg-slate-600 rounded-tl-md text-xl text-white font-semibold">
<p>{{task.name}}</p>
</div>
<div class="grid grid-cols-3">
{% if task.status == 'Open' %}
<div
class="flex justify-center items-center border-r border-b border-gray-200 text-white bg-red-500">
<p>{{task.status}}</p>
</div>
{% endif %}
<!-- TASKS TABLE -->
{% for task in tasks %}
<div class="w-full h-fit bg-white p-3 rounded-md shadow-md mb-5">
<div class="w-full bg-white h-fit rounded-md border border-gray-200">
<!-- TABLE HEADER -->
<div class="w-full h-[70px] rounded-t-md grid grid-cols-2">
<div
class="flex justify-center items-center border-r border-b border-gray-200 bg-slate-600 rounded-tl-md text-xl text-white font-semibold">
<p>{{task.name}}</p>
{% if task.status == 'Working On' %}
<div
class="flex justify-center items-center border-r border-b border-gray-200 text-white bg-orange-500">
<p>{{task.status}}</p>
</div>
{% endif %}
{% if task.status == 'Open' %}
<div
class="flex justify-center items-center border-r border-b border-gray-200 text-white bg-red-500">
<p>{{task.formatted_start_date}}</p>
</div>
{% endif %}
{% if task.status == 'Working On' %}
<div
class="flex justify-center items-center border-r border-b border-gray-200 text-white bg-orange-500">
<p>{{task.formatted_start_date}}</p>
</div>
{% endif %}
{% if task.status == 'Open' %}
<div
class="flex justify-center items-center border-b border-gray-200 text-white bg-red-500 rounded-tr-md">
<p>{{task.formatted_end_date}}</p>
</div>
{% endif %}
{% if task.status == 'Working On' %}
<div
class="flex justify-center items-center border-b border-gray-200 text-white bg-orange-500 rounded-tr-md">
<p>{{task.formatted_end_date}}</p>
</div>
{% endif %}
</div>
</div>
<!-- TABLE BODY -->
<div class="w-full h-fit grid grid-cols-2">
<!-- LEFT SIDE OF TABLE BODY -->
<div class="h-fit bg-white p-3 rounded-bl-md">
<!-- 1st row -->
<div class="w-full flex flex-col gap-2">
<div class="flex justify-start items-center gap-2">
<p class="text-gray-400 text-base">Project:</p>
<p class="text-slate-700 text-base">{{task.project.name}}</p>
</div>
<div class="flex justify-start items-center gap-2">
<p class="text-gray-400 text-base">Epic:</p>
<p class="text-slate-700 text-base">{{task.epic.title}}</p>
</div>
<div class="flex justify-start items-center gap-2">
<p class="text-gray-400 text-base">Assigned To:</p>
<p class="text-slate-700 text-base">{{task.assigned_to.user.first_name}}
{{task.assigned_to.user.last_name}}</p>
</div>
<div class="flex justify-start items-center gap-2">
<p class="text-gray-400 text-base">Files:</p>
<p class="text-slate-700 text-base"></p>
</div>
<div class="flex justify-start items-center gap-2">
<p class="text-gray-400 text-base">Tags:</p>
<p class="text-slate-700 text-base"></p>
</div>
<div class="flex justify-start items-center gap-2">
<p class="text-gray-400 text-base">Extra:</p>
<p class="text-slate-700 text-base">{{task.extra}}</p>
</div>
</div>
</div>
<!-- RIGHT SIDE OF TABLE BODY -->
<div class="h-fit bg-white grid grid-cols-3 rounded-br-md">
<button
class="p-2 border border-gray-200 text-base h-[70px] bg-gray-100 text-gray-500">Close</button>
<button
class="p-2 border border-gray-200 text-base h-[70px] bg-gray-100 text-gray-500 updateStatusButton"
data-modal-url="{% url 'updatestatus' task.task_id %}">Update
Status</button>
<button
class="p-2 border border-gray-200 text-base h-[70px] bg-gray-100 text-gray-500 addTimeButton"
data-modal-url="{% url 'addtime' %}">Add
Time</button>
<button
class="p-2 border border-gray-200 text-base h-[70px] bg-gray-100 text-gray-500 deleteTaskButton"
data-modal-url="{% url 'deletetask' %}">Delete</button>
<a href="{% url 'edittask' %}">
<button
class="w-full p-2 border border-gray-200 text-base h-[70px] bg-gray-100 text-gray-500">Edit</button>
</a>
<button
class="p-2 border border-gray-200 text-base h-[70px] bg-gray-100 text-gray-500 showPointsButton"
data-modal-url="{% url 'showpoints' task.task_id %}">Show
Points</button>
<button
class="p-2 border border-gray-200 text-base h-[70px] bg-gray-100 text-gray-500 addPointButton"
data-modal-url="{% url 'addpoint' task.task_id %}">Add
Point</button>
<a href="{% url 'detailed-task' task.task_id %}">
<button
class="w-full p-2 border border-gray-200 text-base h-[70px] bg-gray-100 text-gray-500">Details</button>
</a>
<button
class="p-2 border border-gray-200 text-base h-[70px] bg-gray-100 text-gray-500 rounded-br-md timelineButton"
data-modal-url="{% url 'timeline' %}">Timeline</button>
</div>
</div>
</div>
</div>
{% endfor %}
</div>
<!-- TASKS ON MOBILE -->
<div class="block md:hidden">
{% for task in tasks %}
<div class="w-full h-fit bg-white p-3 rounded-md shadow-md mb-5">
<div class="border border-gray-200 rounded-t-md">
<div class="w-full rounded-t-md">
{% if task.status == 'Open' %}
<div
class="w-full flex justify-center items-center text-white text-center bg-red-500 rounded-t-md py-5 px-3">
<p>{{task.name}}</p>
</div>
{% endif %}
{% if task.status == 'Working On' %}
<div
class="w-full flex justify-center items-center text-white text-center bg-orange-500 rounded-t-md py-5 px-3">
<p>{{task.name}}</p>
</div>
{% endif %}
</div>
<div class="grid grid-cols-3">
<div class="grid grid-cols-3 border-t border-gray-200">
{% if task.status == 'Open' %}
<div class="flex justify-center items-center border-r border-b border-gray-200 text-white bg-red-500">
<div
class="text-white bg-red-500 border-r border-gray-200 flex justify-center items-center text-center py-3 text-sm">
<p>{{task.status}}</p>
</div>
{% endif %}
{% if task.status == 'Working On' %}
<div class="flex justify-center items-center border-r border-b border-gray-200 text-white bg-orange-500">
<div
class="text-white bg-orange-500 border-r border-gray-200 flex justify-center items-center text-center py-3 text-sm">
<p>{{task.status}}</p>
</div>
{% endif %}
{% if task.status == 'Open' %}
<div class="flex justify-center items-center border-r border-b border-gray-200 text-white bg-red-500">
<p>{{task.formatted_start_date}}</p>
<div
class="text-white bg-red-500 border-r border-gray-200 flex justify-center items-center text-center py-3 text-sm">
<p>{{task.start_date}}</p>
</div>
{% endif %}
{% if task.status == 'Working On' %}
<div class="flex justify-center items-center border-r border-b border-gray-200 text-white bg-orange-500">
<p>{{task.formatted_start_date}}</p>
<div
class="text-white bg-orange-500 border-r border-gray-200 flex justify-center items-center text-center py-3 text-sm">
<p>{{task.start_date}}</p>
</div>
{% endif %}
{% if task.status == 'Open' %}
<div class="flex justify-center items-center border-b border-gray-200 text-white bg-red-500 rounded-tr-md">
<p>{{task.formatted_end_date}}</p>
<div class="text-white bg-red-500 flex justify-center items-center text-center py-3 text-sm">
<p>{{task.end_date}}</p>
</div>
{% endif %}
{% if task.status == 'Working On' %}
<div class="flex justify-center items-center border-b border-gray-200 text-white bg-orange-500 rounded-tr-md">
<p>{{task.formatted_end_date}}</p>
<div class="text-white bg-orange-500 flex justify-center items-center text-center py-3 text-sm">
<p>{{task.end_date}}</p>
</div>
{% endif %}
</div>
</div>
<!-- TABLE BODY -->
<div class="w-full h-fit grid grid-cols-2">
<!-- LEFT SIDE OF TABLE BODY -->
<div class="h-fit bg-white p-3 rounded-bl-md">
<!-- 1st row -->
<div class="w-full flex flex-col gap-2">
<div class="flex justify-start items-center gap-2">
<p class="text-gray-400 text-base">Project:</p>
<p class="text-slate-700 text-base">{{task.project.name}}</p>
</div>
<div class="flex justify-start items-center gap-2">
<p class="text-gray-400 text-base">Epic:</p>
<p class="text-slate-700 text-base">{{task.epic.title}}</p>
</div>
<div class="w-full flex flex-col gap-2 p-3">
<div class="flex justify-start items-center gap-2">
<p class="text-gray-400 text-base">Project:</p>
<p class="text-slate-700 text-base">{{task.project.name}}</p>
</div>
<div class="flex justify-start items-center gap-2">
<p class="text-gray-400 text-base">Assigned To:</p>
<p class="text-slate-700 text-base">{{task.assigned_to.user.first_name}}
{{task.assigned_to.user.last_name}}</p>
</div>
<div class="flex justify-start items-center gap-2">
<p class="text-gray-400 text-base">Epic:</p>
<p class="text-slate-700 text-base">{{task.epic.title}}</p>
</div>
<div class="flex justify-start items-center gap-2">
<p class="text-gray-400 text-base">Files:</p>
<p class="text-slate-700 text-base"></p>
</div>
<div class="flex justify-start items-center gap-2">
<p class="text-gray-400 text-base">Tags:</p>
<p class="text-slate-700 text-base"></p>
</div>
<div class="flex justify-start items-center gap-2">
<p class="text-gray-400 text-base">Assigned To:</p>
<p class="text-slate-700 text-base">{{task.assigned_to.user.first_name}}
{{task.assigned_to.user.last_name}}</p>
</div>
<div class="flex justify-start items-center gap-2">
<p class="text-gray-400 text-base">Extra:</p>
<p class="text-slate-700 text-base">{{task.extra}}</p>
</div>
<div class="flex justify-start items-center gap-2">
<p class="text-gray-400 text-base">Extra:</p>
<p class="text-slate-700 text-base">{{task.extra}}</p>
</div>
</div>
<!-- RIGHT SIDE OF TABLE BODY -->
<div class="h-fit bg-white grid grid-cols-3 rounded-br-md">
<div
class="w-full bg-gray-100 flex justify-between items-center py-3 px-3 text-slate-700 actionsButton">
<p>Actions</p>
<i class="fa fa-angle-down" style="font-size: 20px;"></i>
<i class="fa fa-angle-up" style="font-size: 20px; display: none;"></i>
</div>
<div class="grid-cols-3 actionsContainer hidden">
<button
class="p-2 border border-gray-200 text-base h-[70px] bg-gray-100 text-gray-500">Close</button>
class="p-2 border border-gray-200 text-sm h-[70px] bg-gray-100 text-gray-500">Close</button>
<button
class="p-2 border border-gray-200 text-base h-[70px] bg-gray-100 text-gray-500 updateStatusButton"
class="p-2 border border-gray-200 text-sm h-[70px] bg-gray-100 text-gray-500 updateStatusButton"
data-modal-url="{% url 'updatestatus' task.task_id %}">Update
Status</button>
<button
class="p-2 border border-gray-200 text-base h-[70px] bg-gray-100 text-gray-500 addTimeButton"
class="p-2 border border-gray-200 text-sm h-[70px] bg-gray-100 text-gray-500 addTimeButton"
data-modal-url="{% url 'addtime' %}">Add
Time</button>
<button
class="p-2 border border-gray-200 text-base h-[70px] bg-gray-100 text-gray-500 deleteTaskButton"
class="p-2 border border-gray-200 text-sm h-[70px] bg-gray-100 text-gray-500 deleteTaskButton"
data-modal-url="{% url 'deletetask' %}">Delete</button>
<a href="{% url 'edittask' %}">
<button
class="w-full p-2 border border-gray-200 text-base h-[70px] bg-gray-100 text-gray-500">Edit</button>
class="w-full p-2 border border-gray-200 text-sm h-[70px] bg-gray-100 text-gray-500">Edit</button>
</a>
<button
class="p-2 border border-gray-200 text-base h-[70px] bg-gray-100 text-gray-500 showPointsButton"
class="p-2 border border-gray-200 text-sm h-[70px] bg-gray-100 text-gray-500 showPointsButton"
data-modal-url="{% url 'showpoints' task.task_id %}">Show
Points</button>
<button
class="p-2 border border-gray-200 text-base h-[70px] bg-gray-100 text-gray-500 addPointButton"
class="p-2 border border-gray-200 text-sm h-[70px] bg-gray-100 text-gray-500 addPointButton"
data-modal-url="{% url 'addpoint' task.task_id %}">Add
Point</button>
<a href="{% url 'detailed-task' task.task_id %}">
<button
class="w-full p-2 border border-gray-200 text-base h-[70px] bg-gray-100 text-gray-500">Details</button>
class="w-full p-2 border border-gray-200 text-sm h-[70px] bg-gray-100 text-gray-500">Details</button>
</a>
<button
class="p-2 border border-gray-200 text-base h-[70px] bg-gray-100 text-gray-500 rounded-br-md timelineButton"
class="p-2 border border-gray-200 text-sm h-[70px] bg-gray-100 text-gray-500 timelineButton"
data-modal-url="{% url 'timeline' %}">Timeline</button>
</div>
</div>
</div>
{% endfor %}
</div>
{% endfor %}
</div>
<!-- RIGHT SIDE / USERS ACTIVITY -->
<div class="w-[25%] bg-white h-fit rounded-md shadow-md p-5">
<h1 class="text-2xl text-slate-700 text-center font-semibold">USERS ACTIVITY</h1>
<div class="w-full h-fit mt-2" id="activitiesContainer">
{% include 'recent-activities.html' %}
</div>
</div>
</div>
<!-- TICKETS SECTION -->
<div class="w-full h-fit px-10 py-5">
<!-- TICKETS FILTERING BAR -->
<!-- TICKETS SECTION -->
<!-- <div class="w-full h-fit px-10 py-5">
<div class="w-full h-fit bg-white shadow-md rounded-md flex justify-center items-center gap-10 py-5 px-3">
<a class="text-xl text-gray-500">Tickets</a>
<select name="" id=""
@ -223,187 +399,136 @@
<input type="text" placeholder="Project"
class="py-2 px-3 border border-gray-300 rounded-md outline-none w-[220px] h-[40px]">
</div>
<div class="w-full h-fit bg-white rounded-md shadow-md mt-5">
<!-- TABLE HEADER -->
<div class="w-full flex h-[70px] rounded-t-md border border-gray-300">
<div class="w-[3%] h-full flex justify-center items-center border-r border-gray-300">
<h1 class="text-slate-700 text-base">#</h1>
</div>
<div class="w-[14%] h-full flex justify-center items-center border-r border-gray-300">
<h1 class="text-slate-700 text-base">Client</h1>
</div>
<div class="w-[14%] h-full flex justify-center items-center border-r border-gray-300">
<h1 class="text-slate-700 text-base">Last Update</h1>
</div>
<div class="w-[14%] h-full flex justify-center items-center border-r border-gray-300">
<h1 class="text-slate-700 text-base">Last Reply</h1>
</div>
<div class="w-[30%] h-full flex justify-center items-center border-r border-gray-300">
<h1 class="text-slate-700 text-base">Subject</h1>
</div>
<div class="w-[10%] h-full flex justify-center items-center border-r border-gray-300">
<h1 class="text-slate-700 text-base">Department</h1>
</div>
<div class="w-[10%] h-full flex justify-center items-center border-r border-gray-300">
<h1 class="text-slate-700 text-base">Status</h1>
</div>
<div class="w-[5%] h-full flex justify-center items-center">
<h1 class="text-slate-700 text-base">Action</h1>
</div>
</div>
<!-- TABLE BODY -->
<div class="w-full h-fit">
<!-- 1ST ROW -->
<div class="w-full h-[60px] flex border-b border-x border-gray-300">
<div class="w-[3%] h-full flex justify-center items-center border-r border-gray-300 p-2">
<p class="text-sm text-gray-500">1</p>
</div>
<div class="w-[14%] h-full flex justify-center items-center border-r border-gray-300 p-2">
<p class="text-sm text-gray-500 text-center">Emilio</p>
</div>
<div class="w-[14%] h-full flex justify-center items-center border-r border-gray-300 p-2">
<p class="text-sm text-gray-500 text-center">Mon 18/2/2023 - 12:30PM</p>
</div>
<div class="w-[14%] h-full flex justify-center items-center border-r border-gray-300 p-2">
<p class="text-sm text-gray-500 text-center">Nataly</p>
</div>
<div class="w-[30%] h-full flex justify-start items-center border-r border-gray-300 p-2">
<p class="text-sm text-gray-500">Add a "Subsidiary of MetreKarre Koncept" under the
footer logo</p>
</div>
<div class="w-[10%] h-full flex justify-center items-center border-r border-gray-300 p-2">
<p class="text-sm text-gray-500 text-center">Development</p>
</div>
<div class="w-[10%] h-full flex justify-center items-center border-r border-gray-300 p-2 bg-green-700">
<p class="text-sm text-white text-center">Open</p>
</div>
<div class="w-[5%] h-full flex justify-center items-center gap-3 p-2">
<i class="fa fa-edit" style="color: cornflowerblue; font-size: 15px; cursor: pointer;"></i>
<i class="fa fa-trash" style="color: red; font-size: 15px; cursor: pointer;"></i>
</div>
</div>
<!-- 2ND ROW -->
<div class="w-full h-[60px] flex border-b border-x border-gray-300">
<div class="w-[3%] h-full flex justify-center items-center border-r border-gray-300 p-2">
<p class="text-sm text-gray-500">4</p>
</div>
<div class="w-[14%] h-full flex justify-center items-center border-r border-gray-300 p-2">
<p class="text-sm text-gray-500 text-center">Emile</p>
</div>
<div class="w-[14%] h-full flex justify-center items-center border-r border-gray-300 p-2">
<p class="text-sm text-gray-500 text-center">Wed 18/2/2023 - 12:30PM</p>
</div>
<div class="w-[14%] h-full flex justify-center items-center border-r border-gray-300 p-2">
<p class="text-sm text-gray-500 text-center">Salim</p>
</div>
<div class="w-[30%] h-full flex justify-start items-center border-r border-gray-300 p-2">
<p class="text-sm text-gray-500">Fix the ad banners based on screen size</p>
</div>
<div class="w-[10%] h-full flex justify-center items-center border-r border-gray-300 p-2">
<p class="text-sm text-gray-500 text-center">Development</p>
</div>
<div class="w-[10%] h-full flex justify-center items-center border-r border-gray-300 p-2 bg-yellow-400">
<p class="text-sm text-white text-center">Working on</p>
</div>
<div class="w-[5%] h-full flex justify-center items-center gap-3 p-2">
<i class="fa fa-edit" style="color: cornflowerblue; font-size: 15px; cursor: pointer;"></i>
<i class="fa fa-trash" style="color: red; font-size: 15px; cursor: pointer;"></i>
</div>
</div>
<div class="overflow-x-auto border border-gray-300 rounded-md mt-5" id="customersContainer">
<table class="min-w-full divide-y">
<thead class="bg-gray-50">
<tr>
<th scope="col"
class="px-6 py-3 text-sm font-medium text-gray-500 uppercase border-r border-gray-300 whitespace-nowrap">
#
</th>
<th scope="col"
class="px-6 py-3 text-sm font-medium text-gray-500 uppercase border-r border-gray-300 whitespace-nowrap">
Client
</th>
<th scope="col"
class="px-6 py-3 text-sm font-medium text-gray-500 uppercase border-r border-gray-300 whitespace-nowrap">
Last Update
</th>
<th scope="col"
class="px-6 py-3 text-sm font-medium text-gray-500 uppercase border-r border-gray-300 whitespace-nowrap">
Last Reply
</th>
<th scope="col"
class="px-6 py-3 text-sm font-medium text-gray-500 uppercase border-r border-gray-300 whitespace-nowrap">
Subject
</th>
<th scope="col"
class="px-6 py-3 text-sm font-medium text-gray-500 uppercase border-r border-gray-300 whitespace-nowrap">
Department
</th>
<th scope="col"
class="px-6 py-3 text-sm font-medium text-gray-500 uppercase border-r border-gray-300 whitespace-nowrap">
Status
</th>
<th scope="col" class="px-6 py-3 text-sm font-medium text-gray-500 uppercase whitespace-nowrap">
Actions
</th>
</tr>
</thead>
<!-- 3RD ROW -->
<div class="w-full h-[60px] flex border-b border-x border-gray-300">
<div class="w-[3%] h-full flex justify-center items-center border-r border-gray-300 p-2">
<p class="text-sm text-gray-500">5</p>
</div>
<div class="w-[14%] h-full flex justify-center items-center border-r border-gray-300 p-2">
<p class="text-sm text-gray-500 text-center">Fouad</p>
</div>
<div class="w-[14%] h-full flex justify-center items-center border-r border-gray-300 p-2">
<p class="text-sm text-gray-500 text-center">Tue 18/2/2023 - 12:30PM</p>
</div>
<div class="w-[14%] h-full flex justify-center items-center border-r border-gray-300 p-2">
<p class="text-sm text-gray-500 text-center">Reine</p>
</div>
<div class="w-[30%] h-full flex justify-start items-center border-r border-gray-300 p-2">
<p class="text-sm text-gray-500">Fix the alignments of the categories in the inner
category page</p>
</div>
<div class="w-[10%] h-full flex justify-center items-center border-r border-gray-300 p-2">
<p class="text-sm text-gray-500 text-center">Development</p>
</div>
<div class="w-[10%] h-full flex justify-center items-center border-r border-gray-300 p-2 bg-blue-500">
<p class="text-sm text-white text-center">Waiting for client reply</p>
</div>
<div class="w-[5%] h-full flex justify-center items-center gap-3 p-2">
<i class="fa fa-edit" style="color: cornflowerblue; font-size: 15px; cursor: pointer;"></i>
<i class="fa fa-trash" style="color: red; font-size: 15px; cursor: pointer;"></i>
</div>
</div>
<tbody class="bg-white divide-y divide-gray-200">
<tr>
<td class="px-6 py-4 text-center text-sm border-r border-gray-300">
<p class="text-slate-800">1</p>
</td>
<td class="px-6 py-4 text-center text-sm border-r border-gray-300">
<p class="text-slate-800">Asaad</p>
</td>
<td class="px-6 py-4 text-center text-sm border-r border-gray-300">
<p class="text-slate-800">Mon 18/2/2023 - 12:30PM</p>
</td>
<td class="px-6 py-4 text-center text-sm border-r border-gray-300">
<p class="text-slate-800">Nataly</p>
</td>
<td class="px-6 py-4 text-center text-sm border-r border-gray-300">
<p class="text-slate-800">Change the homepage colors</p>
</td>
<td class="px-6 py-4 text-center text-sm border-r border-gray-300">
<p class="text-slate-800">Development</p>
</td>
<td class="px-6 py-4 text-center text-sm border-r border-gray-300 bg-red-500">
<p class="text-white">Open</p>
</td>
<td class="px-6 py-4 text-center text-sm">
<div class="w-full flex justify-center items-center gap-3">
<a href="">
<div class="text-[15px] text-blue-500 cursor-pointer">
<i class="fa fa-eye"></i>
</div>
</a>
<a href="">
<div class="text-[15px] text-blue-500 cursor-pointer">
<i class="fa fa-edit"></i>
</div>
</a>
<div class="text-[15px] text-red-500 cursor-pointer">
<i class="fa fa-trash"></i>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div> -->
<!-- 4TH ROW -->
<div class="w-full h-[60px] flex border-b border-x border-gray-300">
<div class="w-[3%] h-full flex justify-center items-center border-r border-gray-300 p-2">
<p class="text-sm text-gray-500">10</p>
</div>
<div class="w-[14%] h-full flex justify-center items-center border-r border-gray-300 p-2">
<p class="text-sm text-gray-500 text-center">Emilio</p>
</div>
<div class="w-[14%] h-full flex justify-center items-center border-r border-gray-300 p-2">
<p class="text-sm text-gray-500 text-center">Wed 18/2/2023 - 02:30PM</p>
</div>
<div class="w-[14%] h-full flex justify-center items-center border-r border-gray-300 p-2">
<p class="text-sm text-gray-500 text-center">Nataly</p>
</div>
<div class="w-[30%] h-full flex justify-start items-center border-r border-gray-300 p-2">
<p class="text-sm text-gray-500">Add a "Subsidiary of MetreKarre Koncept" under the
footer logo</p>
</div>
<div class="w-[10%] h-full flex justify-center items-center border-r border-gray-300 p-2">
<p class="text-sm text-gray-500 text-center">Development</p>
</div>
<div class="w-[10%] h-full flex justify-center items-center border-r border-gray-300 p-2 bg-green-700">
<p class="text-sm text-white text-center">Open</p>
</div>
<div class="w-[5%] h-full flex justify-center items-center gap-3 p-2">
<i class="fa fa-edit" style="color: cornflowerblue; font-size: 15px; cursor: pointer;"></i>
<i class="fa fa-trash" style="color: red; font-size: 15px; cursor: pointer;"></i>
</div>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function () {
var actionsButtons = document.querySelectorAll('.actionsButton');
actionsButtons.forEach(function (button) {
button.addEventListener('click', function () {
var arrowDown = button.querySelector('.fa-angle-down');
var arrowUp = button.querySelector('.fa-angle-up');
arrowDown.style.display = arrowDown.style.display === 'none' ? 'inline-block' : 'none';
arrowUp.style.display = arrowUp.style.display === 'none' ? 'inline-block' : 'none';
var actionsContainer = button.nextElementSibling;
actionsContainer.classList.toggle('hidden');
actionsContainer.classList.toggle('grid');
});
});
});
</script>
<!-- RIGHT SIDE / USERS ACTIVITY -->
<div class="hidden lg:block w-[25%] bg-white h-fit rounded-md shadow-md p-5">
<h1 class="text-2xl text-slate-700 text-center font-semibold">USERS ACTIVITY</h1>
<div class="w-full h-fit mt-2" id="activitiesContainer">
{% include 'recent-activities.html' %}
<!-- 5TH ROW -->
<div class="w-full h-[60px] flex border-b border-x border-gray-300">
<div class="w-[3%] h-full flex justify-center items-center border-r border-gray-300 p-2">
<p class="text-sm text-gray-500">6</p>
</div>
<div class="w-[14%] h-full flex justify-center items-center border-r border-gray-300 p-2">
<p class="text-sm text-gray-500 text-center">Emilio</p>
</div>
<div class="w-[14%] h-full flex justify-center items-center border-r border-gray-300 p-2">
<p class="text-sm text-gray-500 text-center">Fri 20/2/2023 - 12:30PM</p>
</div>
<div class="w-[14%] h-full flex justify-center items-center border-r border-gray-300 p-2">
<p class="text-sm text-gray-500 text-center">Nataly</p>
</div>
<div class="w-[30%] h-full flex justify-start items-center border-r border-gray-300 p-2">
<p class="text-sm text-gray-500">Add a "Subsidiary of MetreKarre Koncept" under the
footer logo</p>
</div>
<div class="w-[10%] h-full flex justify-center items-center border-r border-gray-300 p-2">
<p class="text-sm text-gray-500 text-center">Development</p>
</div>
<div class="w-[10%] h-full flex justify-center items-center border-r border-gray-300 p-2 bg-red-500">
<p class="text-sm text-white text-center">Closed</p>
</div>
<div class="w-[5%] h-full flex justify-center items-center gap-3 p-2">
<i class="fa fa-edit" style="color: cornflowerblue; font-size: 15px; cursor: pointer;"></i>
<i class="fa fa-trash" style="color: red; font-size: 14px; cursor: pointer;"></i>
</div>
</div>
</div>
</div>
</div>
</div>
@ -427,4 +552,7 @@
<!-- TO SHOW ALL THE ADDED NOTES BY THE USER WHEN CLICKING ON THE SHOW NOTES BUTTON -->
<script type="text/javascript" src='{% static "js/show-notes.js" %}'></script>
<script type="text/javascript" src='{% static "js/draggable-slider.js" %}'></script>
{% endblock content %}

@ -91,7 +91,6 @@
<div class="w-full mt-10">
<!-- TASKS TABLE -->
{% for task in my_tasks %}
{% for task in my_tasks %}
<div class="w-full h-fit bg-white p-3 rounded-md shadow-md mb-5">
<div class="w-full bg-white h-fit rounded-md border border-gray-200">
@ -141,7 +140,7 @@
{% if task.status == 'Closed' %}
<div class="flex justify-center items-center border-r border-b border-gray-200 text-white bg-green-700">
<div class="flex justify-center items-center border-r border-b border-gray-200 text-white bg-green-700 rounded-tr-md">
<p>{{task.formatted_end_date}}</p>
</div>
{% endif %}
@ -246,7 +245,6 @@
</div>
</div>
{% endfor %}
{% endfor %}
</div>

@ -11,6 +11,10 @@
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css">
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<!-- DRAGGABLE SLIDER LINKS -->
<link rel="stylesheet" href="https://unpkg.com/swiper/swiper-bundle.min.css" />
<script src="https://unpkg.com/swiper/swiper-bundle.min.js"></script>
</head>
<body class="bg-gray-200">
@ -222,7 +226,7 @@
<!-- Footer -->
<div
class="w-[300px] h-fit bg-slate-800 flex flex-col items-center justify-center gap-2 py-2 fixed bottom-0 inset-x-0">
class="w-full xlg1:w-[300px] h-fit bg-slate-800 flex flex-col items-center absolute xlg1:fixed justify-center gap-2 py-2 bottom-0 inset-x-0">
<div class="w-full flex flex-col justify-center items-center">
<p class="text-gray-500 font-light text-sm">Powered By Ositcom</p>
<p class="text-gray-500 font-light text-sm">Copyrights © 2023 All Rights Reserved</p>
@ -230,18 +234,25 @@
</div>
</div>
<!-- SCROLL PART -->
<div class="flex-1 ml-[300px] h-fit bg-gray-200" id="scrollPart">
<!-- TOP HEADER -->
<div class="w-full h-[100px] bg-white shadow-md px-10 py-5 flex justify-between items-center">
<div class="w-full h-[100px] bg-white shadow-md px-5 s:px-9 py-5 flex justify-between items-center">
<div class="w-fit flex justify-center items-center gap-10">
<div class="w-fit flex flex-col gap-2 cursor-pointer" id="burgerMenuButton">
<div class="w-fit hidden xlg:flex flex-col gap-2 cursor-pointer" id="burgerMenuButton">
<div class="burgerMenuLine w-[25px] h-[2px] bg-slate-800 duration-300"></div>
<div class="burgerMenuLine w-[25px] h-[2px] bg-slate-800 duration-300"></div>
<div class="burgerMenuLine w-[25px] h-[2px] bg-slate-800 duration-300"></div>
</div>
<div class="flex justify-start items-center gap-5">
<div class="w-fit flex flex-row xlg:hidden gap-2 cursor-pointer" id="closeMenuButton">
<div class="closeMenuLine w-[2px] h-[25px] bg-slate-800 duration-300"></div>
<div class="closeMenuLine w-[2px] h-[25px] bg-slate-800 duration-300"></div>
<div class="closeMenuLine w-[2px] h-[25px] bg-slate-800 duration-300"></div>
</div>
<div class="hidden xxlg1:flex justify-start items-center gap-5">
<div id="statusContainer">
{% include 'recent-status.html' %}
</div>
@ -255,15 +266,15 @@
<div>
<div class="w-fit flex justify-between items-center gap-3">
<div class="flex justify-center items-center gap-2">
<p class="text-gray-400">{{request.user.first_name}}
{{request.user.last_name}}</p>
<i class="fa fa-angle-down" style="color: grey;"></i>
</div>
<div class="w-[50px] h-[50px] bg-slate-600 rounded-full">
<div class="w-[40px] s:w-[50px] h-[40px] s:h-[50px] bg-slate-600 rounded-full">
<img src='{{request.user.staffprofile.image.url}}' alt="user-image"
class="w-full h-full object-cover rounded-full">
</div>
@ -272,7 +283,23 @@
</div>
<!-- MODULES SECTION -->
<div class="w-full h-fit grid grid-cols-3 gap-5 px-10 py-5">
<div class="w-full h-fit grid grid-cols-1 xxlg1:grid-cols-3 gap-5 px-5 s:px-9 py-5">
<div class="h-[150px] bg-white shadow-md rounded-md block xxlg1:hidden">
<div
class="px-5 py-3 bg-slate-700 rounded-t-md flex justify-between items-center text-white text-[22px] font-bold">
<p>Recent Status</p>
<button
class="w-[30px] h-[30px] rounded-full p-2 bg-gray-300 text-slate-700 text-[18px] outline-none border-none cursor-pointer flex justify-center items-center shadow-md addStatusButtonMobile"
data-modal-url="{% url 'statusmobilemodal' %}">
<i class="fa fa-plus"></i>
</button>
</div>
<div id="statusContainer" class="w-full h-fit p-5">
{% include 'recent-status.html' %}
</div>
</div>
<div class="h-[150px] bg-white shadow-md rounded-md p-5">
<div class="w-full h-full flex flex-col justify-between items-center">
<div class="w-full flex justify-between items-center">
@ -299,83 +326,116 @@
</div>
</div>
<div class="h-[150px] bg-white shadow-md rounded-md p-5 flex flex-col gap-3">
<div class="h-fit md:h-[150px] bg-white shadow-md rounded-md p-5 flex flex-col gap-3">
<div class="w-full flex justify-between items-center">
<p class="text-[22px] text-slate-800 font-bold uppercase">Connected Users</p>
<i class="fa fa-users" style="font-size: 30px; color: salmon;"></i>
</div>
<div class="flex flex-wrap gap-2">
<div class="relative group">
<div class="absolute w-fit py-2 px-2 bg-black bg-opacity-40 text-white text-sm whitespace-nowrap bottom-10 userName opacity-0 group-hover:opacity-100 transition-opacity duration-300">
<div
class="userName absolute w-fit py-2 px-2 bg-black bg-opacity-50 text-white text-sm whitespace-nowrap bottom-10 group-hover:flex duration-500 hidden">
<p>Salim Elliye</p>
</div>
<div class="w-[30px] s:w-[35px] h-[30px] s:h-[35px] rounded-full cursor-pointer userImage">
<img src="{% static 'images/1669023415919.jpeg' %}" alt="User Profile"
class="w-full h-full rounded-full object-cover">
</div>
</div>
<div class="relative group">
<div
class="userName absolute w-fit py-2 px-2 bg-black bg-opacity-50 text-white text-sm whitespace-nowrap bottom-10 group-hover:flex duration-500 hidden">
<p>Salim Elliye</p>
</div>
<div class="w-[35px] h-[35px] rounded-full cursor-pointer userImage">
<img src="{% static 'images/1669023415919.jpeg' %}" alt="User Profile" class="w-full h-full rounded-full object-cover">
<div class="w-[30px] s:w-[35px] h-[30px] s:h-[35px] rounded-full cursor-pointer userImage">
<img src="{% static 'images/1669023415919.jpeg' %}" alt="User Profile"
class="w-full h-full rounded-full object-cover">
</div>
</div>
<div class="relative group">
<div class="absolute w-fit py-2 px-2 bg-black bg-opacity-40 text-white text-sm whitespace-nowrap bottom-10 userName opacity-0 group-hover:opacity-100 transition-opacity duration-300">
<p>Miryam Elliye</p>
<div
class="userName absolute w-fit py-2 px-2 bg-black bg-opacity-50 text-white text-sm whitespace-nowrap bottom-10 group-hover:flex duration-500 hidden">
<p>Salim Elliye</p>
</div>
<div class="w-[35px] h-[35px] rounded-full cursor-pointer userImage">
<img src="{% static 'images/1686063290067.jpeg' %}" alt="User Profile" class="w-full h-full rounded-full object-cover">
<div class="w-[30px] s:w-[35px] h-[30px] s:h-[35px] rounded-full cursor-pointer userImage">
<img src="{% static 'images/1669023415919.jpeg' %}" alt="User Profile"
class="w-full h-full rounded-full object-cover">
</div>
</div>
<div class="relative group">
<div class="absolute w-fit py-2 px-2 bg-black bg-opacity-40 text-white text-sm whitespace-nowrap bottom-10 userName opacity-0 group-hover:opacity-100 transition-opacity duration-300">
<p>Rachel</p>
<div
class="userName absolute w-fit py-2 px-2 bg-black bg-opacity-50 text-white text-sm whitespace-nowrap bottom-10 group-hover:flex duration-500 hidden">
<p>Salim Elliye</p>
</div>
<div class="w-[35px] h-[35px] rounded-full cursor-pointer userImage">
<img src="{% static 'images/C2ruP-K3_400x400_3eYEtuD.jpeg' %}" alt="User Profile" class="w-full h-full rounded-full object-cover">
<div class="w-[30px] s:w-[35px] h-[30px] s:h-[35px] rounded-full cursor-pointer userImage">
<img src="{% static 'images/1669023415919.jpeg' %}" alt="User Profile"
class="w-full h-full rounded-full object-cover">
</div>
</div>
<div class="relative group">
<div class="absolute w-fit py-2 px-2 bg-black bg-opacity-40 text-white text-sm whitespace-nowrap bottom-10 userName opacity-0 group-hover:opacity-100 transition-opacity duration-300">
<p>Nataly Abi Wajeh</p>
<div
class="userName absolute w-fit py-2 px-2 bg-black bg-opacity-50 text-white text-sm whitespace-nowrap bottom-10 group-hover:flex duration-500 hidden">
<p>Salim Elliye</p>
</div>
<div class="w-[35px] h-[35px] rounded-full cursor-pointer userImage">
<img src="{% static 'images/WhatsApp_Image_2024-01-02_at_1.31.29_PM_i37PpV4.jpeg' %}" alt="User Profile" class="w-full h-full rounded-full object-cover">
<div class="w-[30px] s:w-[35px] h-[30px] s:h-[35px] rounded-full cursor-pointer userImage">
<img src="{% static 'images/1669023415919.jpeg' %}" alt="User Profile"
class="w-full h-full rounded-full object-cover">
</div>
</div>
<div class="relative group">
<div class="absolute w-fit py-2 px-2 bg-black bg-opacity-40 text-white text-sm whitespace-nowrap bottom-10 userName opacity-0 group-hover:opacity-100 transition-opacity duration-300">
<div
class="userName absolute w-fit py-2 px-2 bg-black bg-opacity-50 text-white text-sm whitespace-nowrap bottom-10 group-hover:flex duration-500 hidden">
<p>Salim Elliye</p>
</div>
<div class="w-[35px] h-[35px] rounded-full cursor-pointer userImage">
<img src="{% static 'images/1669023415919.jpeg' %}" alt="User Profile" class="w-full h-full rounded-full object-cover">
<div class="w-[30px] s:w-[35px] h-[30px] s:h-[35px] rounded-full cursor-pointer userImage">
<img src="{% static 'images/1669023415919.jpeg' %}" alt="User Profile"
class="w-full h-full rounded-full object-cover">
</div>
</div>
<div class="relative group">
<div class="absolute w-fit py-2 px-2 bg-black bg-opacity-40 text-white text-sm whitespace-nowrap bottom-10 userName opacity-0 group-hover:opacity-100 transition-opacity duration-300">
<p>Miryam Elliye</p>
<div
class="userName absolute w-fit py-2 px-2 bg-black bg-opacity-50 text-white text-sm whitespace-nowrap bottom-10 group-hover:flex duration-500 hidden">
<p>Salim Elliye</p>
</div>
<div class="w-[35px] h-[35px] rounded-full cursor-pointer userImage">
<img src="{% static 'images/1686063290067.jpeg' %}" alt="User Profile" class="w-full h-full rounded-full object-cover">
<div class="w-[30px] s:w-[35px] h-[30px] s:h-[35px] rounded-full cursor-pointer userImage">
<img src="{% static 'images/1669023415919.jpeg' %}" alt="User Profile"
class="w-full h-full rounded-full object-cover">
</div>
</div>
<div class="relative group">
<div class="absolute w-fit py-2 px-2 bg-black bg-opacity-40 text-white text-sm whitespace-nowrap bottom-10 userName opacity-0 group-hover:opacity-100 transition-opacity duration-300">
<p>Rachel</p>
<div
class="userName absolute w-fit py-2 px-2 bg-black bg-opacity-50 text-white text-sm whitespace-nowrap bottom-10 group-hover:flex duration-500 hidden">
<p>Salim Elliye</p>
</div>
<div class="w-[35px] h-[35px] rounded-full cursor-pointer userImage">
<img src="{% static 'images/C2ruP-K3_400x400_3eYEtuD.jpeg' %}" alt="User Profile" class="w-full h-full rounded-full object-cover">
<div class="w-[30px] s:w-[35px] h-[30px] s:h-[35px] rounded-full cursor-pointer userImage">
<img src="{% static 'images/1669023415919.jpeg' %}" alt="User Profile"
class="w-full h-full rounded-full object-cover">
</div>
</div>
<div class="relative group">
<div class="absolute w-fit py-2 px-2 bg-black bg-opacity-40 text-white text-sm whitespace-nowrap bottom-10 userName opacity-0 group-hover:opacity-100 transition-opacity duration-300">
<p>Nataly Abi Wajeh</p>
<div
class="userName absolute w-fit py-2 px-2 bg-black bg-opacity-50 text-white text-sm whitespace-nowrap bottom-10 group-hover:flex duration-500 hidden">
<p>Salim Elliye</p>
</div>
<div class="w-[35px] h-[35px] rounded-full cursor-pointer userImage">
<img src="{% static 'images/WhatsApp_Image_2024-01-02_at_1.31.29_PM_i37PpV4.jpeg' %}" alt="User Profile" class="w-full h-full rounded-full object-cover">
<div class="w-[30px] s:w-[35px] h-[30px] s:h-[35px] rounded-full cursor-pointer userImage">
<img src="{% static 'images/1669023415919.jpeg' %}" alt="User Profile"
class="w-full h-full rounded-full object-cover">
</div>
</div>
</div>
</div>

@ -0,0 +1,21 @@
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Osina</title>
<link rel="stylesheet" type="text/css" href='{% static "dist/output.css" %}'>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css">
</head>
<body>
<div id="hiddenContent">
<h1 class="text-slate-700 text-2xl font-semibold text-center">You are only allowed to add a status on Desktop.</h1>
</div>
</body>
</html>

@ -1,3 +1,9 @@
{% load static %}
<link rel="stylesheet" type="text/css" href='{% static "dist/output.css" %}'>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css">
{% for latest in latest_statuses_time_ago %}
<div class="w-full flex flex-col py-3">
<div class="w-full flex flex-col justify-center items-start gap-2">

Loading…
Cancel
Save