email internationalization and dealer plan active condition

This commit is contained in:
Faheedkhan 2025-08-07 14:34:07 +03:00
parent cb01a7f5c5
commit 1189418511
21 changed files with 313 additions and 174 deletions

View File

@ -3079,7 +3079,7 @@ class CustomGroup(models.Model):
"view_saleorder",
"view_leads",
"view_opportunity",
"view_customers",
"view_customer",
],
)
self.set_permissions(

View File

@ -9477,10 +9477,15 @@ def ledger_unpost_all_journals(request, dealer_slug, entity_slug, pk):
@login_required
@permission_required("inventory.change_dealer", raise_exception=True)
def pricing_page(request, dealer_slug):
get_object_or_404(models.Dealer, slug=dealer_slug)
plan_list = PlanPricing.objects.all()
form = forms.PaymentPlanForm()
return render(request, "pricing_page.html", {"plan_list": plan_list, "form": form})
dealer=get_object_or_404(models.Dealer, slug=dealer_slug)
if not dealer.active_plan:
plan_list = PlanPricing.objects.all()
form = forms.PaymentPlanForm()
return render(request, "pricing_page.html", {"plan_list": plan_list, "form": form})
else:
messages.info(request,_("You already have an plan!!"))
return redirect('home',dealer_slug=dealer_slug)
@login_required

View File

@ -1,123 +1,177 @@
{% load static i18n %}
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>Access Forbidden</title>
<meta name="description" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="apple-touch-icon"
sizes="180x180"
href="{% static 'assets/img/favicons/apple-touch-icon.png' %}" />
<link rel="icon"
type="image/png"
sizes="32x32"
href="{% static 'assets/img/favicons/favicon-32x32.png' %}" />
<link rel="icon"
type="image/png"
sizes="16x16"
href="{% static 'assets/img/favicons/favicon-16x16.png' %}" />
<link rel="shortcut icon"
type="image/x-icon"
href="{% static 'assets/img/favicons/favicon.ico' %}" />
<link rel="manifest"
href="{% static 'assets/img/favicons/manifest.json' %}" />
<meta name="msapplication-TileImage"
content="{% static 'assets/img/favicons/mstile-150x150.png' %}" />
<meta name="theme-color" content="#ffffff" />
<script src="{% static 'vendors/simplebar/simplebar.min.js' %}"></script>
<script src="{% static 'assets/js/config.js' %}"></script>
<!-- =============================================== -->
<!-- Stylesheets -->
<!-- =============================================== -->
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="" />
<link href="https://fonts.googleapis.com/css2?family=Nunito+Sans:wght@300;400;600;700;800;900&amp;display=swap"
rel="stylesheet" />
<link href="{% static 'vendors/simplebar/simplebar.min.css' %}"
rel="stylesheet" />
<link rel="stylesheet"
href="https://unicons.iconscout.com/release/v4.0.8/css/line.css" />
<link href="{% static 'assets/css/theme-rtl.min.css' %}"
type="text/css"
rel="stylesheet"
id="style-rtl" />
<link href="{% static 'assets/css/theme.min.css' %}"
type="text/css"
rel="stylesheet"
id="style-default" />
<link href="{% static 'assets/css/user-rtl.min.css' %}"
type="text/css"
rel="stylesheet"
id="user-style-rtl" />
<link href="{% static 'assets/css/user.min.css' %}"
type="text/css"
rel="stylesheet"
id="user-style-default" />
<style>
body, html {
height: 100%;
margin: 0;
display: flex;
justify-content: center;
align-items: center;
text-align: center;
}
.main {
width: 100%;
max-width: 1200px;
margin: auto;
}
.flex-center {
display: flex;
justify-content: center;
align-items: center;
}
.text-center {
text-align: center;
}
</style>
</head>
<body>
<main class="main" id="top">
<div id="main_content" class="px-3">
<div class="row min-vh-100 flex-center p-5">
<div class="col-12 col-xl-10 col-xxl-8">
<div class="row justify-content-center align-items-center g-5">
<div class="col-12 col-lg-6 text-center order-lg-1">
<img class="img-fluid w-md-50 w-lg-100 d-light-none"
src="{% static 'images/spot-illustrations/dark_403-illustration.png' %}"
alt=""
width="540" />
</div>
<div class="col-12 col-lg-6 text-center text-lg-start">
<img class="img-fluid mb-6 w-50 w-lg-75 d-dark-none"
src="{% static 'images/spot-illustrations/403.png' %}"
alt="" />
<h2 class="text-body-secondary fw-bolder mb-3">Access Forbidden!</h2>
<p class="text-body mb-5">
Halt! Thou art endeavouring to trespass upon a realm not granted unto thee.
<br class="d-none d-md-block d-lg-none" />
granted unto thee.
</p>
<a class="btn btn-lg btn-phoenix-primary" href="{% url 'home' %}">Go Home</a>
</div>
</div>
</div>
</div>
</div>
</main>
<script src="{% static 'vendors/bootstrap/bootstrap.min.js' %}"></script>
<script src="{% static 'js/phoenix.js' %}"></script>
<script src="{% static 'vendors/popper/popper.min.js' %}"></script>
<script src="{% static 'vendors/bootstrap/bootstrap.min.js' %}"></script>
<script src="{% static 'vendors/anchorjs/anchor.min.js' %}"></script>
<script src="{% static 'vendors/is/is.min.js' %}"></script>
<script src="{% static 'vendors/fontawesome/all.min.js' %}"></script>
<script src="{% static 'vendors/lodash/lodash.min.js' %}"></script>
<script src="{% static 'vendors/list.js/list.min.js' %}"></script>
<script src="{% static 'vendors/feather-icons/feather.min.js' %}"></script>
<script src="{% static 'vendors/dayjs/dayjs.min.js' %}"></script>
<script src="{% static 'assets/js/phoenix.js' %}"></script>
</body>
</html>
{% load i18n %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>403 - Access Forbidden</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<style>
:root {
--dark-bg: #121212;
--main-color: #ff3864;
--secondary-color: #e6e6e6;
}
body, html {
height: 100%;
margin: 0;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background-color: var(--dark-bg);
color: var(--secondary-color);
overflow: hidden; /* Hide overflow for the particles */
}
.center-content {
height: 100%;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
flex-direction: column;
z-index: 2; /* Ensure content is on top of particles */
position: relative;
}
.glitch {
font-size: 10rem;
font-weight: bold;
color: var(--main-color);
position: relative;
animation: glitch-animation 2.5s infinite;
}
@keyframes glitch-animation {
0% { text-shadow: 2px 2px var(--secondary-color); }
20% { text-shadow: -2px -2px var(--secondary-color); }
40% { text-shadow: 4px 4px var(--main-color); }
60% { text-shadow: -4px -4px var(--main-color); }
80% { text-shadow: 6px 6px var(--secondary-color); }
100% { text-shadow: -6px -6px var(--secondary-color); }
}
.main-message {
font-size: 2.5rem;
margin-top: -20px;
letter-spacing: 5px;
text-transform: uppercase;
}
.sub-message {
font-size: 1.2rem;
color: #8c8c8c;
margin-top: 10px;
}
.home-button {
margin-top: 30px;
padding: 12px 30px;
background-color: var(--main-color);
border: none;
color: #fff;
border-radius: 5px;
font-size: 1rem;
text-decoration: none;
transition: background-color 0.3s, transform 0.3s;
}
.home-button:hover {
background-color: #d12e52;
transform: scale(1.05);
}
/* Particle Background styles */
#particles-js {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
z-index: 1;
}
</style>
</head>
<body>
<div id="particles-js"></div>
<div class="center-content container-fluid">
<h1 class="glitch">403</h1>
<h2 class="main-message">{% trans "Access Forbidden" %}</h2>
<p class="sub-message">{% trans "You do not have permission to view this page."%}</p>
<p class="sub-message fs-2">{% trans "Powered By Tenhal, Riyadh Saudi Arabia"%}</p>
<a href="{% url 'home' %}" class="home-button">{% trans "Go Home" %}</a>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/particles.js@2.0.0/particles.min.js"></script>
<script>
/* Particles.js Configuration */
particlesJS("particles-js", {
"particles": {
"number": {
"value": 80,
"density": {
"enable": true,
"value_area": 800
}
},
"color": {
"value": "#ff3864"
},
"shape": {
"type": "circle",
},
"opacity": {
"value": 0.5,
"random": false,
"anim": {
"enable": false
}
},
"size": {
"value": 3,
"random": true,
},
"line_linked": {
"enable": true,
"distance": 150,
"color": "#e6e6e6",
"opacity": 0.4,
"width": 1
},
"move": {
"enable": true,
"speed": 6,
"direction": "none",
"random": false,
"straight": false,
"out_mode": "out",
"bounce": false,
"attract": {
"enable": false,
}
}
},
"interactivity": {
"detect_on": "canvas",
"events": {
"onhover": {
"enable": true,
"mode": "grab"
},
"onclick": {
"enable": true,
"mode": "push"
},
"resize": true
},
"modes": {
"grab": {
"distance": 140,
"line_linked": {
"opacity": 1
}
},
"push": {
"particles_nb": 4
}
}
},
"retina_detect": true
});
</script>
</body>
</html>

View File

@ -61,7 +61,7 @@
</div>
<div class="d-flex flex-between-center pt-4">
<div>
<h6 class="mb-2 text-body-secondary">{% trans 'last login'|capfirst %}</h6>
<h6 class="mb-2 text-body-secondary">{% trans 'last login'|capfirst %}<li class="fas fa-sign-in-alt ms-1"></li></h6>
<h4 class="fs-7 text-body-highlight mb-0">{{ dealer.user.last_login|date:"D M d, Y H:i" }}</h4>
</div>
<div class="text-center me-1">
@ -80,12 +80,12 @@
<div class="card h-100">
<div class="card-body">
<div class="border-bottom border-dashed">
<h4 class="mb-3">{% trans 'Default Address' %}</h4>
<h4 class="mb-3">{% trans 'Contact Information' %}</h4>
</div>
<div class="pt-4 mb-7 mb-lg-4 mb-xl-7">
<div class="row justify-content-between">
<div class="col-auto">
<h5 class="text-body-highlight">{% trans 'Address' %}</h5>
<h5 class="text-body-highlight">{% trans 'Address' %}<li class="fas fa-location-dot ms-1"></li></h5>
</div>
<div class="col-auto">
<p class="text-body-secondary">{{ dealer.address }}</p>
@ -95,13 +95,13 @@
<div class="border-top border-dashed pt-4">
<div class="row flex-between-center mb-2">
<div class="col-auto">
<h5 class="text-body-highlight mb-0">{% trans 'Email' %}</h5>
<h5 class="text-body-highlight mb-0">{% trans 'Email' %}<li class="fas fa-envelope ms-1"></li></h5>
</div>
<div class="col-auto">{{ dealer.user.email }}</div>
</div>
<div class="row flex-between-center">
<div class="col-auto">
<h5 class="text-body-highlight mb-0">{% trans 'Phone' %}</h5>
<h5 class="text-body-highlight mb-0">{% trans 'Phone' %}<li class="fas fa-phone ms-1"></li></h5>
</div>
<div class="col-auto" dir="ltr">{{ dealer.phone_number }}</div>
</div>

View File

@ -13,6 +13,6 @@
</p>
<p>مع أطيب التحيات،<br>
فريق {{ SITE_NAME }}</p>
فريق تنحل</p>
</body>
</html>

View File

@ -5,4 +5,4 @@
جدد اشتراكك الآن: {{ RENEWAL_URL }}
مع أطيب التحيات،
فريق {{ SITE_NAME }}
فريق تنحل

View File

@ -9,6 +9,6 @@
<p><a href="{{ RENEWAL_URL }}">Renew now</a> to continue service.</p>
<p>Best regards,<br>
The {{ SITE_NAME }} Team</p>
The Team at Tenhal</p>
</body>
</html>

View File

@ -5,4 +5,4 @@ Your {{ plan.name }} subscription will expire in {{ days_until_expire }} days on
Renew now: {{ RENEWAL_URL }}
Best regards,
{{ SITE_NAME }} Team
The Team at Tenhal

View File

@ -7,4 +7,4 @@ Please settle your outstanding balance of {{ amount_due }} .
If you have already paid, please disregard this notice.
Best regards,
{{ SITE_NAME }} Team
The Team at Tenhal

View File

@ -7,5 +7,5 @@ Please settle your outstanding balance of {{ amount_due }} before the due date t
If you have already paid, please disregard this notice.
Best regards,
{{ SITE_NAME }} Team
The Team at Tenhal

View File

@ -14,19 +14,21 @@
<body>
<div class="container">
<h2>Hello {{ user_name }},</h2>
<p>This is a friendly reminder for your upcoming schedule:</p>
<p>{% trans "This is a friendly reminder for your upcoming schedule" %}:</p>
<p>
<span class="highlight">Purpose:</span> {{ schedule_purpose }}<br>
<span class="highlight">Scheduled At:</span> {{ scheduled_at }}<br>
<span class="highlight">Type:</span> {{ schedule_type }}<br>
{% if customer_name != 'N/A' %}<span class="highlight">Customer:</span> {{ customer_name }}<br>{% endif %}
{% if notes %}<span class="highlight">Notes:</span> {{ notes }}<br>{% endif %}
<span class="highlight">{% trans "Purpose" %}:</span> {{ schedule_purpose }}<br>
<span class="highlight">{% trans "Scheduled At" %}:</span> {{ scheduled_at }}<br>
<span class="highlight">{% trans "Type" %}:</span> {{ schedule_type }}<br>
{% if customer_name != 'N/A' %}<span class="highlight">{% trans "Customer" %}:</span> {{ customer_name }}<br>{% endif %}
{% if notes %}<span class="highlight">{% trans "Notes" %}:</span> {{ notes }}<br>{% endif %}
</p>
<p>Please be prepared for your schedule.</p>
<p>Thank you!</p>
<p>{% trans "Please be prepared for your schedule" %}.</p>
<p>{% trans "Thank you" %}!</p>
<p class="fs-4">{% trans "The team at Tenhal" %}.</p>
<div class="footer">
<p>This is an automated reminder. Please do not reply to this email.</p>
<p>{% trans "This is an automated reminder. Please do not reply to this email." %}</p>
</div>
</div>
</body>
</html>

View File

@ -1,16 +1,16 @@
Hello {{ user_name }},
{% trans "Hello" %} {{ user_name }},
This is a friendly reminder for your upcoming schedule:
{% trans "This is a friendly reminder for your upcoming schedule" %}:
Purpose: {{ schedule_purpose }}
Scheduled At: {{ scheduled_at }}
Type: {{ schedule_type }}
{% if customer_name != 'N/A' %}Customer: {{ customer_name }}{% endif %}
{% if notes %}Notes: {{ notes }}{% endif %}
{% trans "Purpose" %}: {{ schedule_purpose }}
{% trans "Scheduled At" %}: {{ scheduled_at }}
{% trans "Type" %}: {{ schedule_type }}
{% if customer_name != 'N/A' %}{% trans "Customer" %}: {{ customer_name }}{% endif %}
{% if notes %}{% trans "Notes" %}: {{ notes }}{% endif %}
Please be prepared for your schedule.
Thank you!
{% trans "Please be prepared for your schedule" %}.
{% trans "Thank you" %}!
---
This is an automated reminder. Please do not reply to this email.
{% trans " The Team at Tenhal" %}
{% trans "This is an automated reminder. Please do not reply to this email" %}.

View File

@ -33,7 +33,7 @@
</div>
</footer> {% endcomment %}
<footer class="footer position-absolute fs-9 bg-white text-secondary">
{% comment %} <footer class="footer position-absolute fs-9 bg-white text-secondary">
<div class="row g-0 justify-content-between align-items-center h-100">
<div class="col-12 col-sm-auto text-center">
<span class="text-body"> © 2025 {{ _("All right reserved")}}</span>
@ -50,4 +50,74 @@
<span class="fas fa-registered fs-10 fw-light text-opacity-85 text-secondary"></span>
</div>
</div>
</footer>
</footer> {% endcomment %}
<style>
.improved-footer {
/* Kept `position-absolute` and adjusted padding */
position: absolute;
bottom: 0;
width: 90%;
padding: 1.5rem;
border-top: 1px solid rgba(255, 255, 255, 0.05);
color: var(--text-color);
}
.improved-footer .text-body {
color: var(--text-color) !important;
font-weight: 400;
}
.improved-footer .fw-bold {
font-weight: 600 !important;
color: var(--link-color);
}
.improved-footer a {
color: var(--link-color) !important;
text-decoration: none;
transition: color 0.3s ease-in-out, transform 0.3s ease-in-out;
}
.improved-footer a:hover {
color: #d1d5db !important; /* A slightly softer white on hover */
transform: translateY(-2px);
}
.improved-footer .fas.fa-registered {
font-size: 0.8rem;
color: var(--text-color);
opacity: 0.6;
}
</style>
<footer class="improved-footer">
<div class="container">
<div class="row g-0 justify-content-between align-items-center h-100">
<div class="col-12 col-sm-auto text-center">
<span class="text-body"> © 2025 All rights reserved</span>
<span class="fw-bold">Haikal</span>&nbsp;|&nbsp;<span class="fw-bold">هيكل</span>
</div>
<div class="col-12 col-sm-auto text-center">
<span class="text-body">Powered by </span>
<span>
<a class="mx-1 text-secondary" href="https://tenhal.sa">
<span>TENHAL</span>&nbsp;|&nbsp;<span>تنحل</span>
</a>
</span>
<span class="fas fa-registered fw-light"></span>
</div>
</div>
</div>
</footer>

View File

@ -180,7 +180,7 @@
<td class="fs-9">{{ car.invoice.date_paid|date|default_if_none:"-" }}</td>
<td class="fs-9">{{ car.finances.cost_price }} <span class="icon-saudi_riyal"></span></td>
<td class="fs-9">{{ car.finances.marked_price }} <span class="icon-saudi_riyal"></span></td>
<td class="fs-9">{{ car.finances.discount_amount }} <span class="icon-saudi_riyal"></span></td>
<td class="fs-9">{{ car.finances.total_discount }} <span class="icon-saudi_riyal"></span></td>
<td class="fs-9">{{ car.finances.selling_price }} <span class="icon-saudi_riyal"></span></td>
<td class="fs-9">{{ car.finances.vat_amount }} <span class="icon-saudi_riyal"></span></td>
<td class="fs-9">{{ car.invoice.invoice_number }}</td>

View File

@ -9,5 +9,5 @@
{% trans "Thank you" %}
--
{% blocktrans %}The Team at {{ site_name }}{% endblocktrans %}
{% blocktrans %}The Team at Tenhal{% endblocktrans %}
{% endautoescape %}

View File

@ -10,5 +10,5 @@ http://{{ site_domain }}{% url 'upgrade_plan' %}
{% trans "Thank you" %}
--
{% blocktrans %}The Team at {{ site_name }}{% endblocktrans %}
{% blocktrans %}The Team at Tenhal{% endblocktrans %}
{% endautoescape %}

View File

@ -1 +1,3 @@
{% load i18n %}{% blocktrans %}Your account {{ user }} has just expired{% endblocktrans %}
{% load i18n %}{% blocktrans %}Your account {{ user }} has just expired{% endblocktrans %}

View File

@ -7,5 +7,5 @@
{% trans "Thank you" %}
--
{% blocktrans %}The Team at {{ site_name }}{% endblocktrans %}
{% blocktrans %}The Team at Tenhal{% endblocktrans %}
{% endautoescape %}

View File

@ -10,5 +10,5 @@ http://{{ site_domain }}{% url 'order' pk=order %}
{% trans "Thank you" %}
--
{% blocktrans %}The Team at {{ site_name }}{% endblocktrans %}
{% blocktrans %}The Team at Tenhal{% endblocktrans %}
{% endautoescape %}

View File

@ -7,4 +7,9 @@
http://{{ site_domain }}{% url 'current_plan' %}
{% blocktrans %}or you can upgrade your plan here:{% endblocktrans %}
http://{{ site_domain }}{% url 'upgrade_plan' %}
http://{{ site_domain }}{% url 'upgrade_plan' %}
{% trans "Thank you" %}
--
{% blocktrans %}The Team at Tenhal{% endblocktrans %}
{% endautoescape %}

View File

@ -46,7 +46,7 @@
<div class="col-12 col-sm-auto flex-1">
<h3>{{ staff.get_local_name }}</h3>
<p>
{% trans 'Role' %}:
<li class="fas fa-user-shield me-1"></li>{% trans 'Role' %}:
{% for group in staff.groups%}
<span class="text-body-secondary me-2">&nbsp;{{group}}</span>
{% endfor %}
@ -55,10 +55,11 @@
</div>
</div>
</div>
<div class="d-flex flex-between-center pt-4">
<div>
<h6 class="mb-2 text-body-secondary">{% trans 'last login'|capfirst %}</h6>
<h6 class="mb-2 text-body-secondary">{% trans 'last login'|capfirst %}<li class="fas fa-sign-in-alt ms-1"></li></h6>
<h4 class="fs-7 text-body-highlight mb-0">{{ staff.user.last_login|date:"D M d, Y H:i" }}</h4>
</div>
@ -70,12 +71,12 @@
<div class="card h-100">
<div class="card-body">
<div class="border-bottom border-dashed">
<h4 class="mb-3">{% trans 'Default Address' %}</h4>
<h4 class="mb-3">{% trans 'Contact Information' %}</h4>
</div>
<div class="pt-4 mb-7 mb-lg-4 mb-xl-7">
<div class="row justify-content-between">
<div class="col-auto">
<h5 class="text-body-highlight">{% trans 'Address' %}</h5>
<h5 class="text-body-highlight">{% trans 'Address' %}<li class="fas fa-location-dot ms-1"></li></h5>
</div>
<div class="col-auto">
<p class="text-body-secondary">{{ staff.address }}</p>
@ -85,13 +86,13 @@
<div class="border-top border-dashed pt-4">
<div class="row flex-between-center mb-2">
<div class="col-auto">
<h5 class="text-body-highlight mb-0">{% trans 'Email' %}</h5>
<h5 class="text-body-highlight mb-0">{% trans 'Email' %}<li class="fas fa-envelope ms-1"></li></h5>
</div>
<div class="col-auto">{{ staff.user.email }}</div>
</div>
<div class="row flex-between-center">
<div class="col-auto">
<h5 class="text-body-highlight mb-0">{% trans 'Phone' %}</h5>
<h5 class="text-body-highlight mb-0">{% trans 'Phone' %}<li class="fas fa-phone ms-1"></li></h5>
</div>
<div class="col-auto" dir="ltr">{{ staff.phone_number }}</div>
</div>