updating profile

This commit is contained in:
Flatlogic Bot 2026-01-25 11:03:54 +00:00
parent 59f1cf28c3
commit f2a747c61a
18 changed files with 131 additions and 9 deletions

View File

@ -164,6 +164,10 @@ STATICFILES_DIRS = [
BASE_DIR / 'node_modules',
]
# Media files
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'
# Email
EMAIL_BACKEND = os.getenv(
"EMAIL_BACKEND",

View File

@ -16,4 +16,5 @@ urlpatterns += i18n_patterns(
if settings.DEBUG:
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += static("/assets/", document_root=settings.BASE_DIR / "assets")

View File

@ -1,6 +1,6 @@
import os
import time
from .models import Profile
from .models import Profile, PlatformProfile
def project_context(request):
"""
@ -13,10 +13,13 @@ def project_context(request):
except:
profile, created = Profile.objects.get_or_create(user=request.user)
platform_profile = PlatformProfile.objects.first()
return {
"project_description": os.getenv("PROJECT_DESCRIPTION", ""),
"project_image_url": os.getenv("PROJECT_IMAGE_URL", ""),
# Used for cache-busting static assets
"deployment_timestamp": int(time.time()),
"user_profile": profile,
"platform_profile": platform_profile,
}

View File

@ -0,0 +1,23 @@
# Generated by Django 5.2.7 on 2026-01-25 11:00
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('core', '0007_platformprofile'),
]
operations = [
migrations.AddField(
model_name='platformprofile',
name='privacy_policy',
field=models.TextField(blank=True, verbose_name='Privacy Policy'),
),
migrations.AddField(
model_name='platformprofile',
name='terms_conditions',
field=models.TextField(blank=True, verbose_name='Terms and Conditions'),
),
]

View File

@ -154,6 +154,8 @@ class PlatformProfile(models.Model):
phone_number = models.CharField(_('Phone Number'), max_length=50, blank=True)
registration_number = models.CharField(_('Registration Number'), max_length=100, blank=True)
vat_number = models.CharField(_('VAT Number'), max_length=100, blank=True)
privacy_policy = models.TextField(_('Privacy Policy'), blank=True)
terms_conditions = models.TextField(_('Terms and Conditions'), blank=True)
def __str__(self):
return self.name

View File

@ -41,7 +41,7 @@
{% block head %}{% endblock %}
</head>
<body>
<body class="d-flex flex-column min-vh-100">
<!-- Navbar -->
<nav class="navbar navbar-expand-lg navbar-dark bg-dark w-100" style="z-index: 1000;">
<div class="container">
@ -126,13 +126,62 @@
{% endif %}
</div>
<main>
<main class="flex-grow-1">
{% block content %}{% endblock %}
</main>
<footer class="py-5 bg-white border-top">
<div class="container text-center">
<p class="text-muted mb-0">&copy; 2026 masarX. {% trans "All rights reserved." %}</p>
<footer class="bg-dark text-white pt-5 pb-3 mt-5">
<div class="container">
<div class="row">
<div class="col-md-4 mb-4">
{% if platform_profile and platform_profile.logo %}
<img src="{{ platform_profile.logo.url }}" alt="{{ platform_profile.name }}" height="40" class="mb-3">
{% else %}
<h5 class="fw-bold text-white">masar<span style="color: var(--accent-orange)">X</span></h5>
{% endif %}
{% if platform_profile.slogan %}
<p class="text-white-50">{{ platform_profile.slogan }}</p>
{% else %}
<p class="text-white-50">{% trans "Small Shipments, Smart Delivery" %}</p>
{% endif %}
</div>
<div class="col-md-4 mb-4">
<h5 class="text-white mb-3">{% trans "Contact Us" %}</h5>
<ul class="list-unstyled text-white-50">
{% if platform_profile.address %}
<li class="mb-2"><i class="bi bi-geo-alt me-2"></i>{{ platform_profile.address }}</li>
{% endif %}
{% if platform_profile.phone_number %}
<li class="mb-2"><i class="bi bi-telephone me-2"></i>{{ platform_profile.phone_number }}</li>
{% endif %}
{% if platform_profile.registration_number %}
<li class="mb-2">{% trans "Reg No:" %} {{ platform_profile.registration_number }}</li>
{% endif %}
{% if platform_profile.vat_number %}
<li class="mb-2">{% trans "VAT No:" %} {{ platform_profile.vat_number }}</li>
{% endif %}
{% if not platform_profile.address and not platform_profile.phone_number %}
<li class="mb-2">{% trans "Contact information pending." %}</li>
{% endif %}
</ul>
</div>
<div class="col-md-4 mb-4">
<h5 class="text-white mb-3">{% trans "Legal" %}</h5>
<ul class="list-unstyled">
<li class="mb-2"><a href="{% url 'privacy_policy' %}" class="text-white-50 text-decoration-none">{% trans "Privacy Policy" %}</a></li>
<li class="mb-2"><a href="{% url 'terms_conditions' %}" class="text-white-50 text-decoration-none">{% trans "Terms & Conditions" %}</a></li>
</ul>
</div>
</div>
<hr class="border-secondary my-4">
<div class="text-center text-white-50">
<p class="mb-0">&copy; {% now "Y" %} {{ platform_profile.name|default:"masarX" }}. {% trans "All rights reserved." %}</p>
</div>
</div>
</footer>

View File

@ -0,0 +1,15 @@
{% extends "base.html" %}
{% load i18n %}
{% block content %}
<div class="container py-5">
<h1>{% trans "Privacy Policy" %}</h1>
<div class="mt-4">
{% if platform_profile and platform_profile.privacy_policy %}
{{ platform_profile.privacy_policy|linebreaks }}
{% else %}
<p>{% trans "Privacy Policy not available yet." %}</p>
{% endif %}
</div>
</div>
{% endblock %}

View File

@ -0,0 +1,15 @@
{% extends "base.html" %}
{% load i18n %}
{% block content %}
<div class="container py-5">
<h1>{% trans "Terms and Conditions" %}</h1>
<div class="mt-4">
{% if platform_profile and platform_profile.terms_conditions %}
{{ platform_profile.terms_conditions|linebreaks }}
{% else %}
<p>{% trans "Terms and Conditions not available yet." %}</p>
{% endif %}
</div>
</div>
{% endblock %}

View File

@ -21,4 +21,8 @@ urlpatterns = [
path('payment/initiate/<int:parcel_id>/', views.initiate_payment, name='initiate_payment'),
path('payment/success/', views.payment_success, name='payment_success'),
path('payment/cancel/', views.payment_cancel, name='payment_cancel'),
# Static pages
path('privacy-policy/', views.privacy_policy, name='privacy_policy'),
path('terms-conditions/', views.terms_conditions, name='terms_conditions'),
]

View File

@ -182,3 +182,9 @@ def get_cities(request):
cities = City.objects.filter(governate_id=governate_id).order_by(field_name)
data = [{'id': c.id, 'name': getattr(c, field_name)} for c in cities]
return JsonResponse(data, safe=False)
def privacy_policy(request):
return render(request, 'core/privacy_policy.html')
def terms_conditions(request):
return render(request, 'core/terms_conditions.html')

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB