1/2/26 V.4

This commit is contained in:
Flatlogic Bot 2026-01-03 02:33:33 +00:00
parent fa77b3759c
commit d289010e28
16 changed files with 227 additions and 18 deletions

View File

@ -0,0 +1,10 @@
{% extends 'base.html' %}
{% block title %}Completed Projects{% endblock %}
{% block content %}
<div class="p-6">
<h1 class="text-2xl font-semibold">Completed Projects</h1>
<p>This page will contain the completed projects.</p>
</div>
{% endblock %}

View File

@ -0,0 +1,10 @@
{% extends 'base.html' %}
{% block title %}Daily Logs{% endblock %}
{% block content %}
<div class="p-6">
<h1 class="text-2xl font-semibold">Daily Logs</h1>
<p>This page will contain the daily logs.</p>
</div>
{% endblock %}

View File

@ -0,0 +1,10 @@
{% extends 'base.html' %}
{% block title %}Documents{% endblock %}
{% block content %}
<div class="p-6">
<h1 class="text-2xl font-semibold">Documents</h1>
<p>This page will contain the documents.</p>
</div>
{% endblock %}

View File

@ -0,0 +1,10 @@
{% extends 'base.html' %}
{% block title %}Equipment{% endblock %}
{% block content %}
<div class="p-6">
<h1 class="text-2xl font-semibold">Equipment</h1>
<p>This page will contain the equipment.</p>
</div>
{% endblock %}

View File

@ -0,0 +1,10 @@
{% extends 'base.html' %}
{% block title %}Incidents{% endblock %}
{% block content %}
<div class="p-6">
<h1 class="text-2xl font-semibold">Incidents</h1>
<p>This page will contain the incidents.</p>
</div>
{% endblock %}

View File

@ -47,56 +47,68 @@
<div class="flex-1">
<p class="px-6 text-xs text-gray-500 uppercase tracking-wider">Menu</p>
<nav class="px-4 py-2 space-y-1">
<a href="#" class="flex items-center px-4 py-2 text-sm font-medium text-gray-700 bg-gray-200 rounded-lg">
<a href="{% url 'index' %}" class="flex items-center px-4 py-2 text-sm font-medium text-gray-700 bg-gray-200 rounded-lg">
🏠 Dashboard
</a>
{% if 'Manager' in user_groups or 'Admin' in user_groups %}
<a href="#" class="flex items-center px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-200 rounded-lg">
📊 Reports
</a>
{% endif %}
<a href="#" class="flex items-center px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-200 rounded-lg">
📅 Calendar
</a>
{% if 'Manager' in user_groups or 'Admin' in user_groups %}
<a href="#" class="flex items-center px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-200 rounded-lg">
👥 Teams
</a>
{% endif %}
</nav>
<p class="px-6 mt-4 text-xs text-gray-500 uppercase tracking-wider">Daily Operations</p>
<hr class="mx-6 my-4 border-gray-200">
<p class="px-6 text-xs text-gray-500 uppercase tracking-wider">Daily Operations</p>
<nav class="px-4 py-2 space-y-1">
<a href="#" class="flex items-center px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-200 rounded-lg">
<a href="{% url 'daily_logs' %}" class="flex items-center px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-200 rounded-lg">
📝 Daily Logs
</a>
<a href="#" class="flex items-center px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-200 rounded-lg">
<a href="{% url 'safety_meetings' %}" class="flex items-center px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-200 rounded-lg">
🛡️ Safety Meetings
</a>
<a href="#" class="flex items-center px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-200 rounded-lg">
🚨 Incidents
<a href="/incidents" class="sidebar-link flex items-center px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-200 rounded-lg">
<span>🚨 Incidents</span>
<span class="ml-auto inline-block py-0.5 px-2 text-xs font-semibold text-white bg-red-500 rounded-full">2</span>
</a>
</nav>
<p class="px-6 mt-4 text-xs text-gray-500 uppercase tracking-wider">Compliance</p>
{% if 'Manager' in user_groups or 'Admin' in user_groups %}
<hr class="mx-6 my-4 border-gray-200">
<p class="px-6 text-xs text-gray-500 uppercase tracking-wider">Compliance</p>
<nav class="px-4 py-2 space-y-1">
<a href="#" class="flex items-center px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-200 rounded-lg">
📄 Documents
<a href="/documents" class="sidebar-link flex items-center px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-200 rounded-lg">
<span>📄 Documents</span>
<span class="ml-auto inline-block py-0.5 px-2 text-xs font-semibold text-white bg-orange-500 rounded-full">7</span>
</a>
<a href="#" class="flex items-center px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-200 rounded-lg">
<a href="{% url 'subcontractors' %}" class="flex items-center px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-200 rounded-lg">
👷 Subcontractors
</a>
<a href="#" class="flex items-center px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-200 rounded-lg">
<a href="{% url 'equipment' %}" class="flex items-center px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-200 rounded-lg">
🔧 Equipment
</a>
</nav>
<p class="px-6 mt-4 text-xs text-gray-500 uppercase tracking-wider">Projects</p>
<hr class="mx-6 my-4 border-gray-200">
<p class="px-6 text-xs text-gray-500 uppercase tracking-wider">Projects</p>
<nav class="px-4 py-2 space-y-1">
<a href="#" class="flex items-center px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-200 rounded-lg">
<a href="{% url 'ongoing_projects' %}" class="flex items-center px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-200 rounded-lg">
🟦 Ongoing
</a>
<a href="#" class="flex items-center px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-200 rounded-lg">
<a href="{% url 'completed_projects' %}" class="flex items-center px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-200 rounded-lg">
✅ Completed
</a>
<a href="#" class="flex items-center px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-200 rounded-lg">
<a href="{% url 'on_hold_projects' %}" class="flex items-center px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-200 rounded-lg">
⏸️ On Hold
</a>
</nav>
{% endif %}
</div>
{% if 'Manager' in user_groups or 'Admin' in user_groups %}
<div class="p-4">
<div class="p-4 bg-gray-100 rounded-lg text-center">
<p class="text-sm font-medium">Ready to launch a new project?</p>
@ -104,11 +116,14 @@
<button class="mt-3 w-full bg-blue-600 text-white py-2 rounded-lg text-sm font-semibold">Add New Project</button>
</div>
</div>
{% endif %}
<div class="border-t border-gray-200">
<nav class="px-4 py-4 space-y-1">
{% if 'Manager' in user_groups or 'Admin' in user_groups %}
<a href="{% url 'settings' %}" class="flex items-center px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-200 rounded-lg">
⚙️ Settings
</a>
{% endif %}
<a href="#" class="flex items-center px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-200 rounded-lg">
🛟 Help Center
</a>

View File

@ -0,0 +1,10 @@
{% extends 'base.html' %}
{% block title %}On Hold Projects{% endblock %}
{% block content %}
<div class="p-6">
<h1 class="text-2xl font-semibold">On Hold Projects</h1>
<p>This page will contain the on hold projects.</p>
</div>
{% endblock %}

View File

@ -0,0 +1,10 @@
{% extends 'base.html' %}
{% block title %}Ongoing Projects{% endblock %}
{% block content %}
<div class="p-6">
<h1 class="text-2xl font-semibold">Ongoing Projects</h1>
<p>This page will contain the ongoing projects.</p>
</div>
{% endblock %}

View File

@ -0,0 +1,10 @@
{% extends 'base.html' %}
{% block title %}Safety Meetings{% endblock %}
{% block content %}
<div class="p-6">
<h1 class="text-2xl font-semibold">Safety Meetings</h1>
<p>This page will contain the safety meetings.</p>
</div>
{% endblock %}

View File

@ -0,0 +1,10 @@
{% extends 'base.html' %}
{% block title %}Subcontractors{% endblock %}
{% block content %}
<div class="p-6">
<h1 class="text-2xl font-semibold">Subcontractors</h1>
<p>This page will contain the subcontractors.</p>
</div>
{% endblock %}

View File

@ -1,9 +1,31 @@
from django.urls import path
from .views import index, search, settings
from .views import (
index,
search,
settings,
daily_logs,
safety_meetings,
incidents,
documents,
subcontractors,
equipment,
ongoing_projects,
completed_projects,
on_hold_projects,
)
urlpatterns = [
path("", index, name="index"),
path("search", search, name="search"),
path("settings", settings, name="settings"),
path("daily-logs", daily_logs, name="daily_logs"),
path("safety-meetings", safety_meetings, name="safety_meetings"),
path("incidents", incidents, name="incidents"),
path("documents", documents, name="documents"),
path("subcontractors", subcontractors, name="subcontractors"),
path("equipment", equipment, name="equipment"),
path("projects/ongoing", ongoing_projects, name="ongoing_projects"),
path("projects/completed", completed_projects, name="completed_projects"),
path("projects/on-hold", on_hold_projects, name="on_hold_projects"),
]

View File

@ -3,12 +3,19 @@ from ai.local_ai_api import LocalAIApi
import json
def index(request):
user_groups = []
if request.user.is_authenticated:
user_groups = [group.name for group in request.user.groups.all()]
context = {
"project_name": "ComplianceShield",
"user_groups": user_groups,
}
return render(request, "core/index.html", context)
def search(request):
user_groups = []
if request.user.is_authenticated:
user_groups = [group.name for group in request.user.groups.all()]
if request.method == "POST":
query = request.POST.get("query", "")
if query:
@ -37,6 +44,7 @@ def search(request):
context = {
"project_name": "ComplianceShield",
"search_results": search_results,
"user_groups": user_groups,
}
return render(request, "core/index.html", context)
@ -45,5 +53,33 @@ def search(request):
def settings(request):
context = {
"project_name": "ComplianceShield",
"user_groups": user_groups,
}
return render(request, "core/settings.html", context)
def daily_logs(request):
return render(request, "core/daily_logs.html")
def safety_meetings(request):
return render(request, "core/safety_meetings.html")
def incidents(request):
return render(request, "core/incidents.html")
def documents(request):
return render(request, "core/documents.html")
def subcontractors(request):
return render(request, "core/subcontractors.html")
def equipment(request):
return render(request, "core/equipment.html")
def ongoing_projects(request):
return render(request, "core/ongoing_projects.html")
def completed_projects(request):
return render(request, "core/completed_projects.html")
def on_hold_projects(request):
return render(request, "core/on_hold_projects.html")

View File

@ -55,4 +55,27 @@
.search-bar {
border: 1px solid #000 !important;
}
}
.sidebar-section-header { font-size: 11px; font-weight: 700; color: #606060; text-transform: uppercase; letter-spacing: 0.5px; margin: 24px 0 12px 0; padding-left: 12px; }
.sidebar-link.active { background: rgba(255, 255, 255, 0.08); border-left: 3px solid #c9a55a; /* Gold accent */ color: #ffffff; }
.badge {
display: inline-block;
padding: .25em .6em;
font-size: 75%;
font-weight: 700;
line-height: 1;
color: #fff;
text-align: center;
white-space: nowrap;
vertical-align: baseline;
border-radius: .375rem;
}
.badge.red {
background-color: #dc3545;
}
.badge.orange {
background-color: #fd7e14;
}

View File

@ -55,4 +55,27 @@
.search-bar {
border: 1px solid #000 !important;
}
}
.sidebar-section-header { font-size: 11px; font-weight: 700; color: #606060; text-transform: uppercase; letter-spacing: 0.5px; margin: 24px 0 12px 0; padding-left: 12px; }
.sidebar-link.active { background: rgba(255, 255, 255, 0.08); border-left: 3px solid #c9a55a; /* Gold accent */ color: #ffffff; }
.badge {
display: inline-block;
padding: .25em .6em;
font-size: 75%;
font-weight: 700;
line-height: 1;
color: #fff;
text-align: center;
white-space: nowrap;
vertical-align: baseline;
border-radius: .375rem;
}
.badge.red {
background-color: #dc3545;
}
.badge.orange {
background-color: #fd7e14;
}