diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index a2eb3fa..c97e951 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,19 +4,30 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -31,9 +42,13 @@
+
+
+
+
+
+
@@ -50,6 +71,7 @@
+
@@ -84,11 +106,43 @@
1750784740296
-
+
+
+
+
+ 1750855057151
+
+
+
+ 1750855057151
+
+
+ 1750855273832
+
+
+
+ 1750855273832
+
+
+
+
+
+
+
+
+
+
+ file://$PROJECT_DIR$/common/views.py
+ 22
+
+
+
+
+
\ No newline at end of file
diff --git a/DepoT/settings.py b/DepoT/settings.py
index 8ec2cd8..e162aa4 100644
--- a/DepoT/settings.py
+++ b/DepoT/settings.py
@@ -101,6 +101,8 @@ DATABASES = {
# Password validation
# https://docs.djangoproject.com/en/5.2/ref/settings/#auth-password-validators
+# AUTH_USER_MODEL = 'users.CustomUser'
+
AUTH_PASSWORD_VALIDATORS = [
{
"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator",
@@ -134,6 +136,9 @@ USE_TZ = True
STATIC_URL = "static/"
+STATICFILES_DIRS = [
+ BASE_DIR / 'static'
+]
# Default primary key field type
# https://docs.djangoproject.com/en/5.2/ref/settings/#default-auto-field
diff --git a/DepoT/urls.py b/DepoT/urls.py
index 0c10fbd..5da75ef 100644
--- a/DepoT/urls.py
+++ b/DepoT/urls.py
@@ -16,8 +16,10 @@ Including another URLconf
"""
# from django.contrib import admin
-from django.urls import path
+from django.urls import path, include
urlpatterns = [
# path("admin/", admin.site.urls),
+ path('', include('common.urls')),
+ path('user/', include('users.urls')),
]
diff --git a/common/urls.py b/common/urls.py
new file mode 100644
index 0000000..53367a2
--- /dev/null
+++ b/common/urls.py
@@ -0,0 +1,9 @@
+from django.urls import path
+from common import views
+
+urlpatterns = [
+ path('', views.IndexView.as_view(), name='index'),
+ path('client/dashboard/', views.ClientDashboardView.as_view(), name='client_dashboard'),
+ path ('client/preinfo/', views.ClientPreinfoView.as_view(), name='client_preinfo'),
+ path('dashboard/', views.DashboardRedirectView.as_view(), name='dashboard'),
+]
diff --git a/common/views.py b/common/views.py
index 91ea44a..84d84ea 100644
--- a/common/views.py
+++ b/common/views.py
@@ -1,3 +1,46 @@
-from django.shortcuts import render
+from django.urls import reverse_lazy
+from django.views.generic import TemplateView, RedirectView
+from django.shortcuts import render, redirect
+
# Create your views here.
+class IndexView(TemplateView):
+ template_name = 'landing-page.html'
+ extra_context = {
+ 'title': 'Home',
+ 'description': 'This is the home page of the container application.',
+ }
+
+ def get(self, request, *args, **kwargs):
+ return render(request, self.template_name, self.extra_context)
+
+
+
+class DashboardRedirectView(RedirectView):
+ is_permanent = False
+
+ def get_redirect_url(self, *args, **kwargs):
+ if 1==1:
+ return reverse_lazy('client_dashboard')
+ return reverse_lazy('client_dashboard')
+
+
+class ClientDashboardView(TemplateView):
+ template_name = 'client-dashboard.html'
+ extra_context = {
+ 'title': 'Client Dashboard',
+ 'description': 'This is the client dashboard page.',
+ }
+
+ def get(self, request, *args, **kwargs):
+ return render(request, self.template_name, self.extra_context)
+
+class ClientPreinfoView(TemplateView):
+ template_name = 'client-preinfo.html'
+ extra_context = {
+ 'title': 'Client Preinfo',
+ 'description': 'This is the client preinfo page.',
+ }
+
+ def get(self, request, *args, **kwargs):
+ return render(request, self.template_name, self.extra_context)
\ No newline at end of file
diff --git a/static/styles/styles.css b/static/styles/styles.css
new file mode 100644
index 0000000..ce4f9f1
--- /dev/null
+++ b/static/styles/styles.css
@@ -0,0 +1,198 @@
+body {
+ background: linear-gradient(135deg, #EDDECB 0%, #E1C6A8 100%);
+ min-height: 100vh;
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
+ margin: 0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 1rem;
+}
+
+.wave {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 100px;
+ background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1440 320'%3E%3Cpath fill='%23ffffff' fill-opacity='0.3' d='M0,192L48,197.3C96,203,192,213,288,229.3C384,245,480,267,576,250.7C672,235,768,181,864,181.3C960,181,1056,235,1152,234.7C1248,235,1344,181,1392,154.7L1440,128L1440,320L1392,320C1344,320,1248,320,1152,320C1056,320,960,320,864,320C768,320,672,320,576,320C480,320,384,320,288,320C192,320,96,320,48,320L0,320Z'%3E%3C/path%3E%3C/svg%3E");
+ background-size: cover;
+ background-repeat: no-repeat;
+ z-index: -1;
+}
+
+.login-container {
+ background-color: white;
+ border-radius: 0.75rem;
+ box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
+ overflow: hidden;
+ max-width: 56rem;
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ animation: fadeIn 0.8s ease-in-out;
+}
+
+@media (min-width: 768px) {
+ .login-container {
+ flex-direction: row;
+ }
+}
+
+@keyframes fadeIn {
+ from { opacity: 0; transform: translateY(-20px); }
+ to { opacity: 1; transform: translateY(0); }
+}
+
+.login-form-section {
+ width: 100%;
+ padding: 2rem;
+}
+
+@media (min-width: 768px) {
+ .login-form-section {
+ width: 50%;
+ }
+}
+
+.info-section {
+ width: 100%;
+ background: linear-gradient(to bottom right, #EDDECB, #E1C6A8);
+ padding: 2rem;
+ color: white;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+}
+
+@media (min-width: 768px) {
+ .info-section {
+ width: 50%;
+ }
+}
+
+h1 {
+ font-size: 1.875rem;
+ font-weight: bold;
+ color: #1f2937;
+ margin-bottom: 0.5rem;
+}
+
+.subtitle {
+ color: #4b5563;
+ margin-top: 0.5rem;
+}
+
+.form-group {
+ margin-bottom: 1.5rem;
+}
+
+label {
+ display: block;
+ font-size: 0.875rem;
+ font-weight: 500;
+ color: #374151;
+ margin-bottom: 0.25rem;
+}
+
+input[type="text"],
+input[type="password"] {
+ width: 100%;
+ padding: 0.5rem 1rem;
+ border: 1px solid #d1d5db;
+ border-radius: 0.375rem;
+ outline: none;
+ box-sizing: border-box;
+}
+
+input[type="text"]:focus,
+input[type="password"]:focus {
+ border-color: #E1C6A8;
+ box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.2);
+}
+
+.remember-forgot {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 1.5rem;
+}
+
+.remember-me {
+ display: flex;
+ align-items: center;
+}
+
+.remember-me input {
+ margin-right: 0.5rem;
+}
+
+.forgot-password {
+ color: #E1C6A8;
+ text-decoration: none;
+ font-size: 0.875rem;
+}
+
+.forgot-password:hover {
+ color: #E1C6A8;
+}
+
+.submit-button {
+ width: 100%;
+ background-color: #E1C6A8;
+ color: white;
+ padding: 0.5rem 1rem;
+ border: none;
+ border-radius: 0.375rem;
+ cursor: pointer;
+ transition: background-color 0.2s;
+}
+
+.submit-button:hover {
+ background-color: #E1C6A8;
+}
+
+.feature-item {
+ display: flex;
+ align-items: flex-start;
+ margin-bottom: 1rem;
+}
+
+.feature-icon {
+ background-color: rgba(37, 99, 235, 0.5);
+ padding: 0.5rem;
+ border-radius: 9999px;
+ margin-right: 0.75rem;
+}
+
+.feature-text {
+ color: rgba(219, 234, 254, 0.9);
+ font-size: 0.875rem;
+}
+
+.version-info {
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+ margin-top: 2rem;
+ font-size: 0.875rem;
+}
+
+#loginMessage {
+ text-align: center;
+ margin-top: 1rem;
+ display: none;
+}
+
+#loginMessage.error {
+ color: #ef4444;
+}
+
+#loginMessage.success {
+ color: #10b981;
+}
+
+.icon {
+ width: 1.5rem;
+ height: 1.5rem;
+}
diff --git a/templates/client-dashboard-original.html b/templates/client-dashboard-original.html
new file mode 100644
index 0000000..f2169b9
--- /dev/null
+++ b/templates/client-dashboard-original.html
@@ -0,0 +1,689 @@
+
+
+
+
+
+
+
+ Line Operator Dashboard | Container Depot
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Active Containers
+
42
+
+3 since last week
+
+
+
+
+
+
+
+
+
Preinfo Sent
+
18
+
+5 since last week
+
+
+
+
+
+
+
+
+
Pending Orders
+
7
+
2 require attention
+
+
+
+
+
+
+
+
+
Recent Container Activity
+
+
+
+
+
+
+ Container
+ Type
+ Status
+ Date
+
+
+
+
+ MSCU1234567
+ 40HC
+
+ Received
+
+ 2023-06-15
+
+
+ MSCU7654321
+ 20DV
+
+ Preinfo
+
+ 2023-06-14
+
+
+ MSCU2468135
+ 40DV
+
+ Order
+
+ 2023-06-13
+
+
+ MSCU1357924
+ 20RF
+
+ Expedited
+
+ 2023-06-12
+
+
+
+
+
+
+
+
+
+
Payment Status
+
+
+
+
+
+
+ Invoice
+ Amount
+ Status
+ Due Date
+
+
+
+
+ INV-2023-0042
+ $1,250.00
+
+ Paid
+
+ 2023-06-10
+
+
+ INV-2023-0041
+ $875.50
+
+ Pending
+
+ 2023-06-20
+
+
+ INV-2023-0040
+ $2,100.00
+
+ Overdue
+
+ 2023-06-05
+
+
+ INV-2023-0039
+ $950.25
+
+ Paid
+
+ 2023-05-28
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Submit Container Preinfo
+
Provide information about containers that will arrive at the depot
+
+
+
+
+
+
+
Recent Preinfo Submissions
+
+
+
+
+
+
+ Container
+ Type
+ Est. Arrival
+ Status
+ Actions
+
+
+
+
+ MSCU7654321
+ 20DV
+ 2023-06-18
+
+ Pending
+
+
+ Edit
+ Cancel
+
+
+
+ MSCU9876543
+ 40HC
+ 2023-06-17
+
+ Received
+
+
+ View
+
+
+
+ MSCU1122334
+ 20RF
+ 2023-06-16
+
+ Delayed
+
+
+ Edit
+ Cancel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Create Expedition Order
+
Request containers to be expedited from the depot
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Special Instructions
+
+
+
+
+
+ Submit Order
+
+
+
+
+
+
+
+
+
Active Expedition Orders
+
+
+
+
+
+
+ Order ID
+ Container
+ Pickup Date
+ Status
+ Actions
+
+
+
+
+ ORD-2023-0015
+ MSCU2468135
+ 2023-06-20
+
+ Approved
+
+
+ View
+ Cancel
+
+
+
+ ORD-2023-0014
+ Any 40HC
+ 2023-06-19
+
+ Pending
+
+
+ View
+ Cancel
+
+
+
+ ORD-2023-0013
+ MSCU1357924
+ 2023-06-15
+
+ Completed
+
+
+ View
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/templates/landing-page.html b/templates/landing-page.html
new file mode 100644
index 0000000..c243775
--- /dev/null
+++ b/templates/landing-page.html
@@ -0,0 +1,150 @@
+{% load static %}
+
+
+
+
+
+
+ K-DepoT | Kikimor EOOD
+
+
+
+
+
+
+
+
+ Efficient, Secure & Reliable Container Solutions
+
+
+
+
About Us
+
K-DepoT is your trusted partner for fast, efficient, and secure container depot services. Located in the port city of Varna, we specialize in container receiving, storage, and dispatching. At Kikimor EOOD, we combine modern logistics with reliable service to keep your cargo moving without delays.
+
+
Gallery
+
+
Contact Us
+
Address: Morska sirena str. 39, Varna, Bulgaria
+
Phone: +359 88 123 4567
+
Email: info@k-depot.bg
+
+
+
+
+
+ © 2025 Kikimor EOOD | K-DepoT - All rights reserved.
+
+
+
+
+
+
+
+
+
+
diff --git a/users/forms.py b/users/forms.py
new file mode 100644
index 0000000..bc46453
--- /dev/null
+++ b/users/forms.py
@@ -0,0 +1,5 @@
+from django.forms import forms
+
+
+class LoginForm(forms.Form):
+ field_order = ['username', 'password']
\ No newline at end of file
diff --git a/users/urls.py b/users/urls.py
new file mode 100644
index 0000000..4d2fe64
--- /dev/null
+++ b/users/urls.py
@@ -0,0 +1,7 @@
+from django.urls import path
+
+from users import views
+
+urlpatterns = [
+ path('login/', views.LoginView.as_view(), name='login'),
+]
\ No newline at end of file