You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			836 lines
		
	
	
		
			44 KiB
		
	
	
	
		
			HTML
		
	
			
		
		
	
	
			836 lines
		
	
	
		
			44 KiB
		
	
	
	
		
			HTML
		
	
| {% extends "main.html" %}
 | |
| {%load static%}
 | |
| {% block content %}
 | |
| 
 | |
| <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
 | |
| 
 | |
| 
 | |
| <!-- USERS ACTIVITIES ON MOBILE -->
 | |
| <div class="w-[55px] h-[55px] bg-slate-700 rounded-full fixed xxlg1: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 POPUP THAT APPEARS WHEN CLICKING ON A SPECIFIC NOTE -->
 | |
| <div id="notesModal"
 | |
|     class="w-full h-full bg-black bg-opacity-40 z-20 fixed hidden justify-center items-center inset-0 p-5">
 | |
|     <div class="w-full s:w-[500px] h-fit rounded-md p-5 cursor-pointer relative"
 | |
|         style="background-color: {{note.color}}">
 | |
|         <p class="text-base text-gray-500 p-5 rounded-md" id="noteContent">
 | |
|         </p>
 | |
| 
 | |
|         <div class="bg-white rounded-full h-[30px] w-[30px] shadow-md absolute top-2 right-2 p-2 flex justify-center items-center cursor-pointer"
 | |
|             onclick="closeModal()">
 | |
|             <svg xmlns="http://www.w3.org/2000/svg" height="16" width="12" viewBox="0 0 384 512">
 | |
|                 <path
 | |
|                     d="M376.6 84.5c11.3-13.6 9.5-33.8-4.1-45.1s-33.8-9.5-45.1 4.1L192 206 56.6 43.5C45.3 29.9 25.1 28.1 11.5 39.4S-3.9 70.9 7.4 84.5L150.3 256 7.4 427.5c-11.3 13.6-9.5 33.8 4.1 45.1s33.8 9.5 45.1-4.1L192 306 327.4 468.5c11.3 13.6 31.5 15.4 45.1 4.1s15.4-31.5 4.1-45.1L233.7 256 376.6 84.5z"
 | |
|                     fill="grey" />
 | |
|             </svg>
 | |
|         </div>
 | |
|     </div>
 | |
| </div>
 | |
| 
 | |
| 
 | |
| <!-- NOTES SECTION -->
 | |
| <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 flex justify-between items-center">
 | |
|                 <div class="hidden md:block">
 | |
|                     <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] rounded-full" style="background-color: {{ recent_note.color }};">
 | |
|                         </div>
 | |
|                         <p class="text-slate-700 truncate max-w-xs l:max-w-xl">{{recent_note.text}}</p>
 | |
|                     </div>
 | |
|                 </div>
 | |
| 
 | |
|                 <div class="w-full flex justify-between items-center md:hidden">
 | |
|                     <p class="text-base text-gray-500">My Notes</p>
 | |
| 
 | |
|                     <button
 | |
|                         class="w-[34px] h-[33px] rounded-md p-2 bg-gray-300 text-white text-[16px] outline-none border-none cursor-pointer flex s:hidden justify-center items-center shadow-md addNoteButton hover:bg-osiblue duration-300"
 | |
|                         data-modal-url="% url 'addnotemodal' %}">
 | |
|                         <i class="fa fa-plus"></i>
 | |
|                     </button>
 | |
|                 </div>
 | |
|             </div>
 | |
| 
 | |
|             <div class="w-full s:w-fit hidden md:flex justify-start s:justify-end items-center gap-2">
 | |
|                 <button
 | |
|                     class="w-full s:w-fit rounded-md py-1 px-3 bg-osiblue border border-osiblue text-white hover:bg-white hover:text-osiblue cursor-pointer duration-300"
 | |
|                     id="showNotesButton">Show
 | |
|                     Notes</button>
 | |
|                 <button
 | |
|                     class="w-[34px] h-[33px] rounded-md p-2 bg-gray-300 text-white text-[16px] outline-none border-none cursor-pointer flex justify-center items-center shadow-md addNoteButton hover:bg-osiblue duration-300"
 | |
|                     data-modal-url="% url 'addnotemodal' %}">
 | |
|                     <i class="fa fa-plus"></i>
 | |
|                 </button>
 | |
|             </div>
 | |
|         </div>
 | |
| 
 | |
|         <!-- ALL NOTES CONTAINER (appears when clicking on the "Show notes" button) -->
 | |
|         <div class="w-full h-fit hidden mt-3 s:mt-5" id="notesContainer">
 | |
| 
 | |
|             <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-md rounded-md p-5 cursor-pointer" style="background-color: {{note.color}}"
 | |
|                     onclick="showModal('{{ note.text }}', '{{ note.color }}')">
 | |
|                     <p class="text-sm text-gray-500 overflow-hidden"
 | |
|                         style="word-break: break-all; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 5; -webkit-box-orient: vertical;">
 | |
|                         {{ note.text }}
 | |
|                     </p>
 | |
|                 </div>
 | |
|                 {% endfor %}
 | |
|             </div>
 | |
| 
 | |
|             <!-- MOBILE NOTES IN SLIDER -->
 | |
|             <div class="w-full block lg:hidden">
 | |
|                 <div class="swiper-container mt-3">
 | |
|                     <div class="swiper-wrapper">
 | |
|                         {% for note in notes %}
 | |
|                         <div class="swiper-slide cursor-pointer">
 | |
|                             <div class="w-full h-[150px] p-3 flex justify-start items-start rounded-md shadow-md"
 | |
|                                 style="background-color: {{note.color}}"
 | |
|                                 onclick="showModal('{{ note.text }}', '{{ note.color }}')">
 | |
|                                 <p class="text-sm text-gray-500 overflow-hidden"
 | |
|                                     style="word-break: break-all; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 5; -webkit-box-orient: vertical;">
 | |
|                                     {{ note.text }}
 | |
|                                 </p>
 | |
|                             </div>
 | |
|                         </div>
 | |
|                         {% endfor %}
 | |
|                     </div>
 | |
|                 </div>
 | |
|             </div>
 | |
|         </div>
 | |
|     </div>
 | |
| </div>
 | |
| 
 | |
| 
 | |
| 
 | |
| <!-- PROJECT DETAIL AND USERS ACTIVITY SECTION -->
 | |
| <div class="w-full flex justify-between gap-5 px-5 s:px-9 pb-5">
 | |
|     <!-- LEFT SIDE / PROJECT DETAIL SECTION -->
 | |
|     <div class="w-full xxlg1:w-[74.5%] bg-white h-fit rounded-md shadow-md p-5">
 | |
|         {% if project.status == 'Completed' %}
 | |
|         <div class="w-full bg-green-700 rounded-t-md flex flex-col justify-center items-center py-2">
 | |
|             <h1 class="text-xl md:text-3xl text-white font-semibold text-center">{{project.name}}</h1>
 | |
|             <p class="text-white text-center text-base">{{project.project_id}}</p>
 | |
|         </div>
 | |
|         {% endif %}
 | |
|         {% if project.status == 'Cancelled' %}
 | |
|         <div class="w-full  bg-red-500 rounded-t-md flex flex-col justify-center items-center py-2">
 | |
|             <h1 class="text-xl md:text-3xl text-white font-semibold text-center">{{project.name}}</h1>
 | |
|             <p class="text-white text-center text-base">{{project.project_id}}</p>
 | |
|         </div>
 | |
|         {% endif %}
 | |
|         {% if project.status == 'Active' %}
 | |
|         <div class="w-full  bg-orange-500 rounded-t-md flex flex-col justify-center items-center py-2">
 | |
|             <h1 class="text-xl md:text-3xl text-white font-semibold text-center">{{project.name}}</h1>
 | |
|             <p class="text-white text-center text-base">{{project.project_id}}</p>
 | |
|         </div>
 | |
|         {% endif %}
 | |
|         {% if project.status == 'Pending' %}
 | |
|         <div class="w-full bg-yellow-400 rounded-t-md flex flex-col justify-center items-center py-2">
 | |
|             <h1 class="text-xl md:text-3xl text-white font-semibold text-center">{{project.name}}</h1>
 | |
|             <p class="text-white text-center text-base">{{project.project_id}}</p>
 | |
|         </div>
 | |
|         {% endif %}
 | |
|         <div class="w-full rounded-b-md flex xll:hidden items-center">
 | |
|             <button
 | |
|                 class="w-[50%] text-base px-3 py-2 bg-red-500 text-white outline-none border border-red-500 rounded-bl-md cursor-pointer hover:bg-white hover:text-red-500 duration-300 deleteProjectButton"
 | |
|                 data-modal-url="{% url 'deleteprojectmodal' project.id %}">Delete
 | |
|                 Project</button>
 | |
|             <a href="{% url 'editproject' project.project_id %}" class="w-[50%]">
 | |
|                 <button
 | |
|                     class="w-full text-base px-3 py-2 bg-secondosiblue text-white outline-none border border-secondosiblue rounded-br-md cursor-pointer hover:bg-white hover:text-secondosiblue duration-300">Edit
 | |
|                     Project</button>
 | |
|             </a>
 | |
|         </div>
 | |
| 
 | |
|         <p id="projectId" class="hidden">{{project.id}}</p>
 | |
| 
 | |
|         <!-- PROJECT PROGRESS BAR -->
 | |
|         <div class="w-full h-[10px] bg-gray-100 shadow-md mt-3 xll:mt-1 mainBar rounded-md xll:rounded-none">
 | |
|             <div class="h-full rounded-md xll:rounded-none progressBar">
 | |
|             </div>
 | |
|         </div>
 | |
| 
 | |
|         <div
 | |
|             class="w-full h-fit md:h-[70px] flex justify-between items-center bg-gray-100 shadow-md rounded-md px-3 py-3 md:py-1 mt-4">
 | |
|             <div class="w-full md:w-fit flex flex-col md:flex-row justify-start items-center gap-3">
 | |
|                 <a href="{% url 'addepic' project.project_id %}" class="w-full md:w-fit">
 | |
|                     <button
 | |
|                         class="w-full md:w-fit text-base px-3 py-2 bg-transparent text-osiblue outline-none border border-osiblue duration-300 rounded-md cursor-pointer hover:bg-osiblue hover:text-white">Create
 | |
|                         Epic</button>
 | |
|                 </a>
 | |
|                 <a href="{% url 'addprojecttask' project.project_id  %}" class="w-full md:w-fit">
 | |
|                     <button
 | |
|                         class="w-full md:w-fit text-base px-3 py-2 bg-transparent text-osiblue outline-none border border-osiblue duration-300 rounded-md cursor-pointer hover:bg-osiblue hover:text-white">Create
 | |
|                         Task</button>
 | |
|                 </a>
 | |
|                 <button
 | |
|                     class="w-full md:w-fit text-base px-3 py-2 bg-transparent text-osiblue outline-none border border-osiblue duration-300 rounded-md cursor-pointer hover:bg-osiblue hover:text-white">Create
 | |
|                     Story</button>
 | |
|                 <button
 | |
|                     class="w-full md:w-fit text-base px-3 py-2 bg-transparent text-osiblue outline-none border border-osiblue duration-300 rounded-md cursor-pointer hover:bg-osiblue hover:text-white">Create
 | |
|                     Milestone</button>
 | |
|             </div>
 | |
|             <div class="hidden xll:flex justify-end items-center gap-3">
 | |
|                 <button
 | |
|                     class="w-fit text-base px-3 py-2 bg-red-500 text-white outline-none border border-red-500 rounded-md cursor-pointer hover:bg-white hover:text-red-500 duration-300 deleteProjectButton"
 | |
|                     data-modal-url="{% url 'deleteprojectmodal' project.id %}">Delete
 | |
|                     Project</button>
 | |
|                 <a href="{% url 'editproject' project.project_id %}">
 | |
|                     <button
 | |
|                         class="w-fit text-base px-3 py-2 bg-secondosiblue text-white outline-none border border-secondosiblue rounded-md cursor-pointer hover:bg-white hover:text-secondosiblue duration-300">Edit
 | |
|                         Project</button>
 | |
|                 </a>
 | |
|             </div>
 | |
|         </div>
 | |
| 
 | |
|         <div class="w-full flex flex-col gap-4 mt-5">
 | |
|             <div>
 | |
|                 <p class="text-gray-500 text-xl">Client: <span
 | |
|                         class="text-slate-800 text-xl font-semibold">{{project.customer.user.first_name}}
 | |
|                         {{project.customer.user.last_name}}</span></p>
 | |
|             </div>
 | |
| 
 | |
|             <div>
 | |
|                 <p class="text-gray-500 text-xl">Project Manager: <span
 | |
|                         class="text-slate-800 text-xl font-semibold">{{project.manager.user.first_name}}
 | |
|                         {{project.manager.last_name}}</span></p>
 | |
|             </div>
 | |
| 
 | |
| 
 | |
|             <div>
 | |
|                 <p class="text-gray-500 text-xl">Member(s):
 | |
|                     {% for member in project.members.all %}
 | |
|                     <span class="text-slate-800 text-xl font-semibold">
 | |
|                         {{member.user.first_name}} {{member.user.last_name}} {% if not forloop.last %}, {% endif %}
 | |
|                         {% endfor %}</span>
 | |
|                 </p>
 | |
|             </div>
 | |
| 
 | |
|             <div>
 | |
|                 <p class="text-gray-500 text-xl">Type:
 | |
|                     {% for type in project.project_type.all %}
 | |
|                     <span class="text-slate-800 text-xl font-semibold">
 | |
|                         {{type.name}} {% if not forloop.last %}, {% endif %}
 | |
|                         {% endfor %}</span>
 | |
|                 </p>
 | |
|             </div>
 | |
| 
 | |
|             <div>
 | |
|                 <p class="text-gray-500 text-xl">Status:
 | |
|                     {% if project.status == 'Cancelled' %}
 | |
|                     <span class="text-red-500 text-xl font-semibold">{{project.status}}</span>
 | |
|                     {% endif %}
 | |
|                     {% if project.status == 'Completed' %}
 | |
|                     <span class="text-green-700 text-xl font-semibold">{{project.status}}</span>
 | |
|                     {% endif %}
 | |
|                     {% if project.status == 'Active' %}
 | |
|                     <span class="text-orange-500 text-xl font-semibold">{{project.status}}</span>
 | |
|                     {% endif %}
 | |
|                     {% if project.status == 'Pending' %}
 | |
|                     <span class="text-yellow-400 text-xl font-semibold">{{project.status}}</span>
 | |
|                     {% endif %}
 | |
|                 </p>
 | |
|             </div>
 | |
| 
 | |
|             <div>
 | |
|                 <p class="text-gray-500 text-xl">Start Date: <span
 | |
|                         class="text-slate-800 text-xl font-semibold startDate">{{project.start_date}}</span></p>
 | |
|             </div>
 | |
| 
 | |
|             <div>
 | |
|                 <p class="text-gray-500 text-xl">End Date: <span
 | |
|                         class="text-slate-800 text-xl font-semibold endDate">{{project.end_date}}</span></p>
 | |
|             </div>
 | |
| 
 | |
|             <!-- PROJECT DETAILS -->
 | |
|             <div>
 | |
|                 <div>
 | |
|                     <p class="text-gray-500 text-xl">Project Details:</p>
 | |
|                     <div class="w-full pr-8">
 | |
|                         <p class="text-slate-800 font-semibold">
 | |
|                             {{project.details}}
 | |
|                         </p>
 | |
|                     </div>
 | |
|                 </div>
 | |
|             </div>
 | |
| 
 | |
| 
 | |
|             <!-- USER STORIES -->
 | |
|             <div class="w-full mt-5">
 | |
|                 <div class="overflow-x-auto border border-gray-300 rounded-md mt-5">
 | |
|                     <div
 | |
|                         class=" bg-osiblue rounded-t-md flex justify-between items-center text-white text-xl font-bold h-[50px]">
 | |
|                         <div class="px-3">
 | |
|                             <p class="text-white uppercase font-bold">User Stories</p>
 | |
|                         </div>
 | |
| 
 | |
|                         <button
 | |
|                             class="h-full rounded-tr-md px-4 bg-gray-300 text-osiblue text-[18px] outline-none border-none cursor-pointer flex justify-center items-center addUserStoryButton"
 | |
|                             data-modal-url="{% url 'adduserstorymodal' project.project_id %}">
 | |
|                             <i class="fa fa-plus"></i>
 | |
|                         </button>
 | |
|                     </div>
 | |
|                     <table class="min-w-full divide-y">
 | |
|                         <!-- TABLE HEADER -->
 | |
|                         <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">
 | |
|                                     Story
 | |
|                                 </th>
 | |
|                                 <th scope="col"
 | |
|                                     class="px-6 py-3 text-sm font-medium text-gray-500 uppercase border-r border-gray-300 whitespace-nowrap">
 | |
|                                     Related Task
 | |
|                                 </th>
 | |
|                                 <th scope="col"
 | |
|                                     class="px-6 py-3 text-sm font-medium text-gray-500 uppercase whitespace-nowrap">
 | |
|                                     Actions
 | |
|                                 </th>
 | |
|                             </tr>
 | |
|                         </thead>
 | |
| 
 | |
|                         <!-- TABLE BODY -->
 | |
|                         <tbody class="bg-white divide-y divide-gray-200">
 | |
|                             <!-- 1st row -->
 | |
|                             {% if project.projectrequirement_set.all %}
 | |
|                             {% for requirement in project.projectrequirement_set.all %}
 | |
|                             <tr>
 | |
|                                 <td class="px-6 py-4 text-center text-sm border-r border-gray-300">
 | |
|                                     <p class="text-slate-800">{{requirement.content}}</p>
 | |
|                                 </td>
 | |
| 
 | |
|                                 <td class="px-6 py-4 text-center text-sm border-r border-gray-300">
 | |
|                                     {% if requirement.task_set.all %}
 | |
|                                     {% for task in requirement.task_set.all %}
 | |
|                                     <a class="text-blue-500 underline"
 | |
|                                         href="{% url 'detailed-task' task.task_id %}">{{task.name}} <i
 | |
|                                             class="fas fa-angle-double-right"></i></a>
 | |
|                                     {% endfor %}
 | |
|                                     {%else%}
 | |
|                                     <p class="text-slate-800">None</p>
 | |
|                                     {% endif %}
 | |
| 
 | |
|                                 </td>
 | |
| 
 | |
| 
 | |
|                                 <td class="px-6 py-4 text-center text-sm">
 | |
|                                     <div class="w-full flex justify-center items-center gap-3">
 | |
|                                         <a href="{% url 'adduserstorytask' project.project_id requirement.id %}">
 | |
|                                             <button
 | |
|                                                 class="w-fit py-2 px-3 bg-green-700 border border-green-700 text-white rounded-md cursor-pointer hover:bg-white hover:text-green-700">Add
 | |
|                                                 Task</button>
 | |
|                                         </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>
 | |
|                             {% endfor %}
 | |
|                             {% else %}
 | |
|                             <tr>
 | |
|                                 <td colspan="3" class="px-6 py-4 text-center text-sm text-slate-800">
 | |
|                                     No Requirements at the moment
 | |
|                                 </td>
 | |
|                             </tr>
 | |
|                             {% endif %}
 | |
|                         </tbody>
 | |
|                     </table>
 | |
|                 </div>
 | |
|             </div>
 | |
| 
 | |
| 
 | |
|             <!-- CREDENTIALS -->
 | |
|             <div class="mt-5 relative">
 | |
|                 <div
 | |
|                     class=" bg-osiblue rounded-t-md flex justify-between items-center text-white text-xl font-bold h-[50px]">
 | |
|                     <div class="px-3">
 | |
|                         <p class="text-white uppercase font-bold">Credentials</p>
 | |
|                     </div>
 | |
| 
 | |
|                     <button
 | |
|                         class="h-full rounded-tr-md px-4 bg-gray-300 text-osiblue text-[18px] outline-none border-none cursor-pointer flex justify-center items-center addCredentialsButton"
 | |
|                         data-modal-url="{% url 'addcredentialmodal' %}">
 | |
|                         <i class="fa fa-plus"></i>
 | |
|                     </button>
 | |
|                 </div>
 | |
| 
 | |
|                 <div class="overflow-x-auto border border-gray-300 rounded-b-md">
 | |
|                     <table class="min-w-full divide-y">
 | |
|                         <!-- TABLE HEADER -->
 | |
|                         <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">
 | |
|                                     Email or Username
 | |
|                                 </th>
 | |
|                                 <th scope="col"
 | |
|                                     class="px-6 py-3 text-sm font-medium text-gray-500 uppercase border-r border-gray-300 whitespace-nowrap">
 | |
|                                     Password
 | |
|                                 </th>
 | |
|                                 <th scope="col"
 | |
|                                     class="px-6 py-3 text-sm font-medium text-gray-500 uppercase whitespace-nowrap">
 | |
|                                     Used For
 | |
|                                 </th>
 | |
|                             </tr>
 | |
|                         </thead>
 | |
| 
 | |
|                         <!-- TABLE BODY -->
 | |
|                         <tbody class="bg-white divide-y divide-gray-200">
 | |
|                             <!-- 1st row -->
 | |
|                             {% if project.projectcredential_set.all %}
 | |
|                             {% for credential in project.projectcredential_set.all %}
 | |
|                             <tr>
 | |
|                                 <td class="px-6 py-4 text-center text-sm border-r border-gray-300">
 | |
|                                     <p class="text-slate-800">{{credential.emailorusername}}</p>
 | |
|                                 </td>
 | |
| 
 | |
|                                 <td class="px-6 py-4 text-center text-sm border-r border-gray-300">
 | |
|                                     <a class="text-slate-800">{{credential.password}}</a>
 | |
|                                 </td>
 | |
| 
 | |
|                                 <td class="px-6 py-4 text-center text-sm border-r border-gray-300">
 | |
|                                     <a class="text-slate-800">{{credential.usedfor}}</a>
 | |
|                                 </td>
 | |
|                             </tr>
 | |
|                             {% endfor %}
 | |
|                             {% else %}
 | |
|                             <tr>
 | |
|                                 <td colspan="3" class="px-6 py-4 text-center text-sm text-slate-800">
 | |
|                                     No Available Credentials
 | |
|                                 </td>
 | |
|                             </tr>
 | |
|                             {% endif %}
 | |
|                         </tbody>
 | |
|                     </table>
 | |
|                 </div>
 | |
|             </div>
 | |
| 
 | |
| 
 | |
|             <!-- RELATED FILES -->
 | |
|             <div class="w-full mt-5">
 | |
|                 <div class="overflow-x-auto border border-gray-300 rounded-md mt-5">
 | |
|                     <div
 | |
|                         class=" bg-osiblue rounded-t-md flex justify-between items-center text-white text-xl font-bold h-[50px]">
 | |
|                         <div class="px-3">
 | |
|                             <p class="text-white uppercase font-bold">Related files</p>
 | |
|                         </div>
 | |
| 
 | |
|                         <button
 | |
|                             class="h-full rounded-tr-md px-4 bg-gray-300 text-osiblue text-[18px] outline-none border-none cursor-pointer flex justify-center items-center addFileButton"
 | |
|                             data-modal-url="{% url 'addfilemodal' %}">
 | |
|                             <i class="fa fa-plus"></i>
 | |
|                         </button>
 | |
|                     </div>
 | |
| 
 | |
|                     <table class="min-w-full divide-y">
 | |
|                         <!-- TABLE HEADER -->
 | |
|                         <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">
 | |
|                                     File Name
 | |
|                                 </th>
 | |
|                                 <th scope="col"
 | |
|                                     class="px-6 py-3 text-sm font-medium text-gray-500 uppercase border-r border-gray-300 whitespace-nowrap">
 | |
|                                     File
 | |
|                                 </th>
 | |
|                                 <th scope="col"
 | |
|                                     class="px-6 py-3 text-sm font-medium text-gray-500 uppercase whitespace-nowrap">
 | |
|                                     Date Entered
 | |
|                                 </th>
 | |
|                             </tr>
 | |
|                         </thead>
 | |
| 
 | |
|                         <!-- TABLE BODY -->
 | |
|                         <tbody class="bg-white divide-y divide-gray-200">
 | |
|                             <!-- 1st row -->
 | |
|                             {% if project.projectfile_set.all %}
 | |
|                             {% for file in project.projectfile_set.all %}
 | |
|                             <tr>
 | |
|                                 <td class="px-6 py-4 text-center text-sm border-r border-gray-300">
 | |
|                                     <p class="text-slate-800">{{file.name}}</p>
 | |
|                                 </td>
 | |
| 
 | |
|                                 <td class="px-6 py-4 text-center text-sm border-r border-gray-300">
 | |
|                                     <a class="text-slate-800">{{file.file}}</a>
 | |
|                                 </td>
 | |
| 
 | |
|                                 <td class="px-6 py-4 text-center text-sm border-r border-gray-300">
 | |
|                                     <a class="text-slate-800">{{file.date}}</a>
 | |
|                                 </td>
 | |
|                             </tr>
 | |
|                             {% endfor %}
 | |
|                             {% else %}
 | |
|                             <tr>
 | |
|                                 <td colspan="3" class="px-6 py-4 text-center text-sm text-slate-800">
 | |
|                                     No Available Files
 | |
|                                 </td>
 | |
|                             </tr>
 | |
|                             {% endif %}
 | |
|                         </tbody>
 | |
|                     </table>
 | |
|                 </div>
 | |
|             </div>
 | |
| 
 | |
|             <!-- NOTES -->
 | |
|             <div class="w-full mt-5">
 | |
|                 <div class="overflow-x-auto border border-gray-300 rounded-md mt-5">
 | |
|                     <div
 | |
|                         class=" bg-osiblue rounded-t-md flex justify-between items-center text-white text-xl font-bold h-[50px]">
 | |
|                         <div class="px-3">
 | |
|                             <p class="text-white uppercase font-bold">Notes</p>
 | |
|                         </div>
 | |
| 
 | |
|                         <button
 | |
|                             class="h-full rounded-tr-md px-4 bg-gray-300 text-osiblue text-[18px] outline-none border-none cursor-pointer flex justify-center items-center addProjectNoteButton"
 | |
|                             data-modal-url="{% url 'addprojectnotemodal' project.project_id %}">
 | |
|                             <i class="fa fa-plus"></i>
 | |
|                         </button>
 | |
|                     </div>
 | |
| 
 | |
|                     <table class="min-w-full divide-y">
 | |
|                         <!-- TABLE HEADER -->
 | |
|                         <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">
 | |
|                                     Note
 | |
|                                 </th>
 | |
|                                 <th scope="col"
 | |
|                                     class="px-6 py-3 text-sm font-medium text-gray-500 uppercase border-r border-gray-300 whitespace-nowrap">
 | |
|                                     Date
 | |
|                                 </th>
 | |
|                                 <th scope="col"
 | |
|                                     class="px-6 py-3 text-sm font-medium text-gray-500 uppercase border-r border-gray-300 whitespace-nowrap">
 | |
|                                     Added By
 | |
|                                 </th>
 | |
|                                 <th scope="col"
 | |
|                                     class="px-6 py-3 text-sm font-medium text-gray-500 uppercase whitespace-nowrap">
 | |
|                                     Actions
 | |
|                                 </th>
 | |
|                             </tr>
 | |
|                         </thead>
 | |
| 
 | |
|                         <!-- TABLE BODY -->
 | |
|                         <tbody class="bg-white divide-y divide-gray-200">
 | |
|                             <!-- 1st row -->
 | |
| 
 | |
|                             {% for note in project_notes %}
 | |
|                             <tr style="background-color: {{note.color}}">
 | |
|                                 <td class="px-6 py-4 text-center text-sm border-r border-gray-300">
 | |
|                                     <p class="text-gray-500">{{ note.text }}</p>
 | |
|                                 </td>
 | |
| 
 | |
|                                 <td class="px-6 py-4 text-center text-sm border-r border-gray-300">
 | |
|                                     <p class="text-gray-500">{{ note.date }}</p>
 | |
|                                 </td>
 | |
| 
 | |
|                                 <td class="px-6 py-4 text-center text-sm border-r border-gray-300">
 | |
|                                     <p class="text-gray-500">{{ note.user.username }}</p>
 | |
|                                 </td>
 | |
| 
 | |
|                                 <td class="px-6 py-4 text-center text-sm">
 | |
|                                     <div class="w-full flex justify-center items-center gap-2">
 | |
|                                         <button
 | |
|                                             class="rounded-md bg-white border border-white p-1 h-[30px] w-[30px] deleteProjectNoteButton"
 | |
|                                             data-modal-url="{% url 'deleteprojectnotemodal' note.id %}" style="color: {{note.color}}">
 | |
|                                             <i class="fa fa-trash"></i>
 | |
|                                         </button>
 | |
|                                         <button
 | |
|                                             class="rounded-md bg-white border border-white p-1 h-[30px] w-[30px]" style="color: {{note.color}}">
 | |
|                                             <i class="fa fa-edit"></i>
 | |
|                                         </button>
 | |
|                                     </div>
 | |
|                                 </td>
 | |
|                             </tr>
 | |
|                             {% endfor %}
 | |
| 
 | |
|                             {% if project_notes.count == 0 %}
 | |
|                             <tr>
 | |
|                                 <td colspan="4" class="px-6 py-4 text-center text-sm text-slate-800">
 | |
|                                     No Available Notes
 | |
|                                 </td>
 | |
|                             </tr>
 | |
|                             {% endif %}
 | |
|                         </tbody>
 | |
|                     </table>
 | |
|                 </div>
 | |
|             </div>
 | |
| 
 | |
| 
 | |
|             <!-- TAGS -->
 | |
|             <div>
 | |
|                 <p class="text-gray-500 text-xl mt-5">Tags:</p>
 | |
|                 <div class="w-full h-fit px-4 mt-3 flex flex-wrap justify-start items-center gap-3">
 | |
|                     <button
 | |
|                         class="text-sm text-gray-400 border border-gray-400 rounded-md w-fit py-2 px-3 outline-none">Media
 | |
|                         Streaming</button>
 | |
| 
 | |
|                     <button
 | |
|                         class="text-sm text-gray-400 border border-gray-400 rounded-md w-fit py-2 px-3 outline-none">Live
 | |
|                         Streaming</button>
 | |
| 
 | |
|                     <button
 | |
|                         class="text-sm text-gray-400 border border-gray-400 rounded-md w-fit py-2 px-3 outline-none">Audio
 | |
|                         On Demand</button>
 | |
|                 </div>
 | |
|             </div>
 | |
| 
 | |
| 
 | |
| 
 | |
|             <!-- RELATED TASK CONTAINER BASED ON THE CHOSEN EPIC -->
 | |
|             <div class="w-full mt-5">
 | |
|                 <div class="w-full bg-osiblue rounded-md shadow-md h-fit p-5 flex flex-col gap-3">
 | |
|                     <p class="text-white uppercase text-xl font-semibold">Filter Tasks by Epics</p>
 | |
|                     <div class="w-full flex flex-wrap gap-3">
 | |
|                         <div>
 | |
|                             <a class="selectedEpic text-gray-400 font-semibold cursor-pointer openTasks"
 | |
|                                 data-project-id="{{project.id}}">All Open Tasks</a>
 | |
|                         </div>
 | |
|                         <p class="text-white opacity-30 font-extralight">|</p>
 | |
|                         {% for epic in epics %}
 | |
|                         <div>
 | |
|                             <a class="epicTitle text-gray-400 font-semibold cursor-pointer"
 | |
|                                 data-epic-id="{{ epic.id }}">{{epic.title}}</a>
 | |
|                         </div>
 | |
|                         <p class="text-white opacity-30 font-extralight">|</p>
 | |
|                         {% endfor %}
 | |
|                     </div>
 | |
|                 </div>
 | |
|             </div>
 | |
| 
 | |
| 
 | |
|             <!-- TO DISPLAY THE FETCHED TASKS -->
 | |
|             <div class="w-full" id="epicRelatedTasksContainer">
 | |
| 
 | |
|             </div>
 | |
|         </div>
 | |
|     </div>
 | |
| 
 | |
| 
 | |
|     <!-- RIGHT SIDE / USERS ACTIVITY -->
 | |
|     <div class="w-[25%] hidden xxlg1:flex flex-col gap-3">
 | |
|         {% if latest_statuses_time_ago %}
 | |
|         <div
 | |
|             class="hidden xxlg1:block w-full bg-white h-[1283px] overflow-y-auto overflow-hidden rounded-md shadow-md p-5">
 | |
|             <h1 class="text-2xl text-secondosiblue text-center font-semibold">Users Activity</h1>
 | |
|             <div class="w-full h-fit mt-2" id="activitiesContainer">
 | |
|     
 | |
|                 {% include 'recent-activities.html' %}
 | |
|     
 | |
|             </div>
 | |
|         </div>
 | |
|         {% else %}
 | |
|         <div
 | |
|             class="hidden xxlg1:block w-full bg-white h-[305px] overflow-y-auto overflow-hidden rounded-md shadow-md p-5">
 | |
|             <h1 class="text-2xl text-secondosiblue text-center font-semibold">Users Activity</h1>
 | |
|             <div class="w-full h-fit mt-2" id="activitiesContainer">
 | |
|     
 | |
|                 {% include 'recent-activities.html' %}
 | |
|     
 | |
|             </div>
 | |
|         </div>
 | |
|         {% endif %}
 | |
|     
 | |
|     
 | |
|         <div class="w-full hidden xxlg1:block bg-white shadow-md rounded-md p-5 cursor-pointer">
 | |
|             <div class="w-full h-full flex flex-col gap-3 items-center">
 | |
|                 <div class="w-full flex justify-center items-center">
 | |
|                     <p class="text-[20px] text-secondosiblue font-bold text-center"><span
 | |
|                             class="text-green-700">14</span>
 | |
|                         Connected User</p>
 | |
|                 </div>
 | |
|     
 | |
|                 <div class="w-full flex flex-wrap gap-2">
 | |
|                     <div class="relative userProfileContainer">
 | |
|                         <div
 | |
|                             class="w-fit py-2 px-3 bg-gray-700 bg-opacity-60 text-white absolute bottom-10 whitespace-nowrap hidden userName">
 | |
|                             <p>Salim Elliye</p>
 | |
|                         </div>
 | |
|                         <div class="w-[30px] h-[30px] rounded-full userImage">
 | |
|                             <img src="{% static 'images/1669023415919.jpeg' %}" alt="User Image"
 | |
|                                 class="w-full h-full rounded-full object-cover">
 | |
|                         </div>
 | |
|                     </div>
 | |
|                     <div class="relative userProfileContainer">
 | |
|                         <div
 | |
|                             class="w-fit py-2 px-3 bg-gray-700 bg-opacity-60 text-white absolute bottom-10 whitespace-nowrap hidden userName">
 | |
|                             <p>Salim Elliye</p>
 | |
|                         </div>
 | |
|                         <div class="w-[30px] h-[30px] rounded-full userImage">
 | |
|                             <img src="{% static 'images/1686063290067.jpeg' %}" alt="User Image"
 | |
|                                 class="w-full h-full rounded-full object-cover">
 | |
|                         </div>
 | |
|                     </div>
 | |
|                     <div class="relative userProfileContainer">
 | |
|                         <div
 | |
|                             class="w-fit py-2 px-3 bg-gray-700 bg-opacity-60 text-white absolute bottom-10 whitespace-nowrap hidden userName">
 | |
|                             <p>Salim Elliye</p>
 | |
|                         </div>
 | |
|                         <div class="w-[30px] h-[30px] rounded-full userImage">
 | |
|                             <img src="{% static 'images/avatar3.png' %}" alt="User Image"
 | |
|                                 class="w-full h-full rounded-full object-cover">
 | |
|                         </div>
 | |
|                     </div>
 | |
|                     <div class="relative userProfileContainer">
 | |
|                         <div
 | |
|                             class="w-fit py-2 px-3 bg-gray-700 bg-opacity-60 text-white absolute bottom-10 whitespace-nowrap hidden userName">
 | |
|                             <p>Salim Elliye</p>
 | |
|                         </div>
 | |
|                         <div class="w-[30px] h-[30px] rounded-full userImage">
 | |
|                             <img src="{% static 'images/1669023415919.jpeg' %}" alt="User Image"
 | |
|                                 class="w-full h-full rounded-full object-cover">
 | |
|                         </div>
 | |
|                     </div>
 | |
|                     <div class="relative userProfileContainer">
 | |
|                         <div
 | |
|                             class="w-fit py-2 px-3 bg-gray-700 bg-opacity-60 text-white absolute bottom-10 whitespace-nowrap hidden userName">
 | |
|                             <p>Salim Elliye</p>
 | |
|                         </div>
 | |
|                         <div class="w-[30px] h-[30px] rounded-full userImage">
 | |
|                             <img src="{% static 'images/1686063290067.jpeg' %}" alt="User Image"
 | |
|                                 class="w-full h-full rounded-full object-cover">
 | |
|                         </div>
 | |
|                     </div>
 | |
|                     <div class="relative userProfileContainer">
 | |
|                         <div
 | |
|                             class="w-fit py-2 px-3 bg-gray-700 bg-opacity-60 text-white absolute bottom-10 whitespace-nowrap hidden userName">
 | |
|                             <p>Salim Elliye</p>
 | |
|                         </div>
 | |
|                         <div class="w-[30px] h-[30px] rounded-full userImage">
 | |
|                             <img src="{% static 'images/avatar3.png' %}" alt="User Image"
 | |
|                                 class="w-full h-full rounded-full object-cover">
 | |
|                         </div>
 | |
|                     </div>
 | |
|                     <div class="relative userProfileContainer">
 | |
|                         <div
 | |
|                             class="w-fit py-2 px-3 bg-gray-700 bg-opacity-60 text-white absolute bottom-10 whitespace-nowrap hidden userName">
 | |
|                             <p>Salim Elliye</p>
 | |
|                         </div>
 | |
|                         <div class="w-[30px] h-[30px] rounded-full userImage">
 | |
|                             <img src="{% static 'images/1669023415919.jpeg' %}" alt="User Image"
 | |
|                                 class="w-full h-full rounded-full object-cover">
 | |
|                         </div>
 | |
|                     </div>
 | |
|                     <div class="relative userProfileContainer">
 | |
|                         <div
 | |
|                             class="w-fit py-2 px-3 bg-gray-700 bg-opacity-60 text-white absolute bottom-10 whitespace-nowrap hidden userName">
 | |
|                             <p>Salim Elliye</p>
 | |
|                         </div>
 | |
|                         <div class="w-[30px] h-[30px] rounded-full userImage">
 | |
|                             <img src="{% static 'images/1686063290067.jpeg' %}" alt="User Image"
 | |
|                                 class="w-full h-full rounded-full object-cover">
 | |
|                         </div>
 | |
|                     </div>
 | |
|                     <div class="relative userProfileContainer">
 | |
|                         <div
 | |
|                             class="w-fit py-2 px-3 bg-gray-700 bg-opacity-60 text-white absolute bottom-10 whitespace-nowrap hidden userName">
 | |
|                             <p>Salim Elliye</p>
 | |
|                         </div>
 | |
|                         <div class="w-[30px] h-[30px] rounded-full userImage">
 | |
|                             <img src="{% static 'images/avatar3.png' %}" alt="User Image"
 | |
|                                 class="w-full h-full rounded-full object-cover">
 | |
|                         </div>
 | |
|                     </div>
 | |
|                     <div class="relative userProfileContainer">
 | |
|                         <div
 | |
|                             class="w-fit py-2 px-3 bg-gray-700 bg-opacity-60 text-white absolute bottom-10 whitespace-nowrap hidden userName">
 | |
|                             <p>Salim Elliye</p>
 | |
|                         </div>
 | |
|                         <div class="w-[30px] h-[30px] rounded-full userImage">
 | |
|                             <img src="{% static 'images/1669023415919.jpeg' %}" alt="User Image"
 | |
|                                 class="w-full h-full rounded-full object-cover">
 | |
|                         </div>
 | |
|                     </div>
 | |
|                     <div class="relative userProfileContainer">
 | |
|                         <div
 | |
|                             class="w-fit py-2 px-3 bg-gray-700 bg-opacity-60 text-white absolute bottom-10 whitespace-nowrap hidden userName">
 | |
|                             <p>Salim Elliye</p>
 | |
|                         </div>
 | |
|                         <div class="w-[30px] h-[30px] rounded-full userImage">
 | |
|                             <img src="{% static 'images/1686063290067.jpeg' %}" alt="User Image"
 | |
|                                 class="w-full h-full rounded-full object-cover">
 | |
|                         </div>
 | |
|                     </div>
 | |
|                     <div class="relative userProfileContainer">
 | |
|                         <div
 | |
|                             class="w-fit py-2 px-3 bg-gray-700 bg-opacity-60 text-white absolute bottom-10 whitespace-nowrap hidden userName">
 | |
|                             <p>Salim Elliye</p>
 | |
|                         </div>
 | |
|                         <div class="w-[30px] h-[30px] rounded-full userImage">
 | |
|                             <img src="{% static 'images/avatar3.png' %}" alt="User Image"
 | |
|                                 class="w-full h-full rounded-full object-cover">
 | |
|                         </div>
 | |
|                     </div>
 | |
|                     <div class="relative userProfileContainer">
 | |
|                         <div
 | |
|                             class="w-fit py-2 px-3 bg-gray-700 bg-opacity-60 text-white absolute bottom-10 whitespace-nowrap hidden userName">
 | |
|                             <p>Salim Elliye</p>
 | |
|                         </div>
 | |
|                         <div class="w-[30px] h-[30px] rounded-full userImage">
 | |
|                             <img src="{% static 'images/1669023415919.jpeg' %}" alt="User Image"
 | |
|                                 class="w-full h-full rounded-full object-cover">
 | |
|                         </div>
 | |
|                     </div>
 | |
|                     <div class="relative userProfileContainer">
 | |
|                         <div
 | |
|                             class="w-fit py-2 px-3 bg-gray-700 bg-opacity-60 text-white absolute bottom-10 whitespace-nowrap hidden userName">
 | |
|                             <p>Salim Elliye</p>
 | |
|                         </div>
 | |
|                         <div class="w-[30px] h-[30px] rounded-full userImage">
 | |
|                             <img src="{% static 'images/1686063290067.jpeg' %}" alt="User Image"
 | |
|                                 class="w-full h-full rounded-full object-cover">
 | |
|                         </div>
 | |
|                     </div>
 | |
|                 </div>
 | |
|             </div>
 | |
|         </div>
 | |
|     </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| <!-- POPUP MODAL -->
 | |
| <div class="w-full h-full bg-black bg-opacity-40 z-20 fixed justify-center items-center hidden" id="popUpModal">
 | |
|     <div class="w-[95%] md:w-fit h-fit bg-white rounded-md p-9 relative">
 | |
|         <button class="absolute top-3 right-5 text-slate-800 text-xl cursor-pointer outline-none border-none"
 | |
|             id="closeModalButton">
 | |
|             <i class="fa fa-close"></i>
 | |
|         </button>
 | |
|         <iframe id="popupModalFrame" frameborder="0"></iframe>
 | |
|     </div>
 | |
| </div>
 | |
| <script type="text/javascript" src='{% static "js/pop-modals.js" %}'></script>
 | |
| </div>
 | |
| 
 | |
| 
 | |
| <!---------------------- JS SCRIPTS -------------------->
 | |
| 
 | |
| <!-- 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>
 | |
| 
 | |
| 
 | |
| <!-- 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>
 | |
| 
 | |
| <!-- IT OPENS A POPUP FOR THE WHOLE NOTE CONTENT -->
 | |
| <script type="text/javascript" src='{% static "js/notes-pop-modal.js" %}'></script>
 | |
| {% endblock content %} |