Compare commits

..

No commits in common. "5d79ea90d7bc70d5f849324a2320058a807b137f" and "29532ffbd0c32a52eed2831ca5bb6afbcf9d0c4a" have entirely different histories.

13 changed files with 150 additions and 285 deletions

View File

@ -1129,6 +1129,7 @@ class ChartOfAccountModelCreateView(ChartOfAccountModelModelBaseViewMixIn, Creat
}, },
) )
class ChartOfAccountModelUpdateView(ChartOfAccountModelModelBaseViewMixIn, UpdateView): class ChartOfAccountModelUpdateView(ChartOfAccountModelModelBaseViewMixIn, UpdateView):
context_object_name = "coa_model" context_object_name = "coa_model"
slug_url_kwarg = "coa_slug" slug_url_kwarg = "coa_slug"

View File

@ -4360,8 +4360,7 @@ class AccountListView(LoginRequiredMixin, PermissionRequiredMixin, ListView):
def get_queryset(self): def get_queryset(self):
query = self.request.GET.get("q") query = self.request.GET.get("q")
dealer = get_user_type(self.request) dealer = get_user_type(self.request)
coa = ChartOfAccountModel.objects.get(entity=dealer.entity,pk=self.kwargs["coa_pk"]) or self.request.entity.get_default_coa() accounts = dealer.entity.get_all_accounts()
accounts = coa.get_coa_accounts()
return apply_search_filters(accounts, query) return apply_search_filters(accounts, query)
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
@ -4412,19 +4411,8 @@ class AccountCreateView(
def form_valid(self, form): def form_valid(self, form):
dealer = get_user_type(self.request) dealer = get_user_type(self.request)
instance = form.save(commit=False)
coa = ChartOfAccountModel.objects.get(entity=dealer.entity,pk=self.kwargs["coa_pk"]) or self.request.entity.get_default_coa()
# coa.insert_account(account_model=instance)
account = coa.entity.create_account(
coa_model=coa,
code=instance.code,
name=instance.name,
role=instance.role,
balance_type=_(instance.balance_type),
active=True,
)
form.instance.entity_model = dealer.entity form.instance.entity_model = dealer.entity
form.instance.coa_model = coa form.instance.coa_model = dealer.entity.get_default_coa()
form.instance.depth = 0 form.instance.depth = 0
form.instance.path = form.instance.code form.instance.path = form.instance.code
return super().form_valid(form) return super().form_valid(form)
@ -4432,15 +4420,13 @@ class AccountCreateView(
def get_form_kwargs(self): def get_form_kwargs(self):
dealer = get_user_type(self.request) dealer = get_user_type(self.request)
kwargs = super().get_form_kwargs() kwargs = super().get_form_kwargs()
coa = ChartOfAccountModel.objects.get(entity=dealer.entity,pk=self.kwargs["coa_pk"]) or self.request.entity.get_default_coa() kwargs["coa_model"] = dealer.entity.get_default_coa()
kwargs["coa_model"] = coa
return kwargs return kwargs
def get_form(self, form_class=None): def get_form(self, form_class=None):
form = super().get_form(form_class) form = super().get_form(form_class)
entity = get_user_type(self.request).entity entity = get_user_type(self.request).entity
coa = ChartOfAccountModel.objects.get(entity=entity,pk=self.kwargs["coa_pk"]) or self.request.entity.get_default_coa() form.initial["coa_model"] = entity.get_default_coa()
form.initial["coa_model"] = coa
return form return form
def get_success_url(self): def get_success_url(self):
@ -4452,11 +4438,10 @@ class AccountCreateView(
context["url_kwargs"] = self.kwargs context["url_kwargs"] = self.kwargs
coa_pk = context["url_kwargs"]["coa_pk"] coa_pk = context["url_kwargs"]["coa_pk"]
try: try:
context["coa_model"] = ChartOfAccountModel.objects.get(entity=self.request.entity,pk=coa_pk) kwargs["coa_model"] = ChartOfAccountModel.objects.get(pk=coa_pk) or self.request.entity.get_default_coa()
except Exception: except Exception:
context["coa_model"] = self.request.entity.get_default_coa() kwargs["coa_model"] = self.request.entity.get_default_coa()
return context return context
class AccountDetailView(LoginRequiredMixin, PermissionRequiredMixin, DetailView): class AccountDetailView(LoginRequiredMixin, PermissionRequiredMixin, DetailView):
""" """
Represents the detailed view for an account with additional context data related to account Represents the detailed view for an account with additional context data related to account
@ -4556,10 +4541,6 @@ class AccountUpdateView(
form.fields["_position"].widget = HiddenInput() form.fields["_position"].widget = HiddenInput()
return form return form
def form_valid(self, form):
form.instance.coa_model = ChartOfAccountModel.objects.get(pk=self.kwargs['coa_pk']) or self.request.entity.get_default_coa()
return super().form_valid(form)
def get_success_url(self): def get_success_url(self):
return reverse_lazy( return reverse_lazy(
"account_list", kwargs={"dealer_slug": self.kwargs["dealer_slug"],"coa_pk":self.kwargs["coa_pk"]} "account_list", kwargs={"dealer_slug": self.kwargs["dealer_slug"],"coa_pk":self.kwargs["coa_pk"]}
@ -4570,9 +4551,9 @@ class AccountUpdateView(
context["url_kwargs"] = self.kwargs context["url_kwargs"] = self.kwargs
coa_pk = context["url_kwargs"]["coa_pk"] coa_pk = context["url_kwargs"]["coa_pk"]
try: try:
context["coa_model"] = ChartOfAccountModel.objects.get(pk=coa_pk) or self.request.entity.get_default_coa() kwargs["coa_model"] = ChartOfAccountModel.objects.get(pk=coa_pk) or self.request.entity.get_default_coa()
except Exception: except Exception:
context["coa_model"] = self.request.entity.get_default_coa() kwargs["coa_model"] = self.request.entity.get_default_coa()
return context return context
@login_required @login_required
@permission_required("django_ledger.delete_accountmodel") @permission_required("django_ledger.delete_accountmodel")
@ -11454,10 +11435,7 @@ def staff_password_reset_view(request, dealer_slug, user_pk):
if request.method == 'POST': if request.method == 'POST':
form = forms.CustomSetPasswordForm(staff.user, request.POST) form = forms.CustomSetPasswordForm(staff.user, request.POST)
if form.is_valid(): if form.is_valid():
print(form.cleaned_data['new_password1'])
print(form.cleaned_data['new_password2'])
form.save() form.save()
messages.success(request, _('Your password has been set. You may go ahead and log in now.')) messages.success(request, _('Your password has been set. You may go ahead and log in now.'))
return redirect('user_detail',dealer_slug=dealer_slug,slug=staff.slug) return redirect('user_detail',dealer_slug=dealer_slug,slug=staff.slug)
@ -11698,9 +11676,9 @@ def ticket_update(request, ticket_id):
}) })
# class ChartOfAccountModelListView(ChartOfAccountModelListViewBase): class ChartOfAccountModelListView(ChartOfAccountModelListViewBase):
# template_name = 'chart_of_accounts/coa_list.html' template_name = 'chart_of_accounts/coa_list.html'
# permission_required = 'django_ledger.view_chartofaccountmodel' permission_required = 'django_ledger.view_chartofaccountmodel'
class ChartOfAccountModelCreateView(ChartOfAccountModelCreateViewBase): class ChartOfAccountModelCreateView(ChartOfAccountModelCreateViewBase):
template_name = 'chart_of_accounts/coa_create.html' template_name = 'chart_of_accounts/coa_create.html'
permission_required = 'django_ledger.add_chartofaccountmodel' permission_required = 'django_ledger.add_chartofaccountmodel'

View File

@ -77,7 +77,7 @@
</div> </div>
</div> </div>
</section> </section>
{% include 'footer.html' %}
{% if LOGIN_BY_CODE_ENABLED or PASSKEY_LOGIN_ENABLED %} {% if LOGIN_BY_CODE_ENABLED or PASSKEY_LOGIN_ENABLED %}
<hr> <hr>
{% element button_group vertical=True %} {% element button_group vertical=True %}

View File

@ -3,7 +3,7 @@
{% load i18n static %} {% load i18n static %}
{% block content %} {% block content %}
<section class="main my-4"> <section class="main my-2">
<div class="container" style="max-width:60rem;"> <div class="container" style="max-width:60rem;">
<div class="row form-container" id="form-container"> <div class="row form-container" id="form-container">
<div class="col-12 "> <div class="col-12 ">
@ -35,135 +35,26 @@
<button class="btn btn-primary" type="submit">{% trans 'Sign Up' %}</button> <button class="btn btn-primary" type="submit">{% trans 'Sign Up' %}</button>
</div> </div>
</form> </form>
<a href="#" class="float-start mt-4" data-bs-toggle="modal" data-bs-target="#contentModal">
Our Refund Policy
</a>
</div> </div>
</div> </div>
<div class="mx-auto mt-4 text-center">
<button type="button" class="btn btn-lg btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal">
{% trans "Our Refund Policy" %}
</button>
</div>
</div> </div>
</section> </section>
<div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true"> <div class="modal fade" id="contentModal" tabindex="-1" aria-labelledby="contentModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xl"> <div class="modal-dialog modal-xl modal-dialog-centered">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">{% trans "Our Refund Policy" %}</h5> <h5 class="modal-title" id="contentModalLabel">Refund Policy</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div> </div>
<div class="modal-body"> <div class="modal-body modal-dialog-scrollable">
{% include 'haikal_policy/refund_policy.html' %} {% include "haikal_policy/refund_policy.html" %}
</div> </div>
</div> </div>
</div> </div>
</div> </div>
{% include 'footer.html' %}
{% endblock content %}
{% endblock content %}
{% block customJS %}
<script src="{% static 'js/phoenix.js' %}"></script>
<script src="{% static 'js/main.js' %}"></script>
<script src="{% static 'js/sweetalert2.all.min.js' %}"></script>
<script type="module"
src="https://cdn.jsdelivr.net/gh/starfederation/datastar@v1.0.0-beta.11/bundles/datastar.js"></script>
<script>
function validatePassword(password, confirmPassword) {
return password === confirmPassword && password.length > 7 && password !== '';
}
function validateEmail(email) {
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
return emailRegex.test(email) && email !== '';
}
function validateform2(name,arabic_name,phone_number) {
if (name === '' || arabic_name === '' || phone_number === '' || phone_number.length < 10 || !phone_number.startsWith('05')) {
return false;
}
return true
}
function validate_sa_phone_number(phone_number) {
const phone_numberRegex = /^05[0-9]{8}$/;
return phone_numberRegex.test(phone_number) && phone_numberRegex !== '';
}
function getAllFormData() {
const forms = document.querySelectorAll('.needs-validation');
const formData = {};
forms.forEach(form => {
const fields = form.querySelectorAll('input,textarea,select');
fields.forEach(field => {
formData[field.name] = field.value;
});
});
return formData;
}
function showLoading() {
Swal.fire({
title: "{% trans 'Please Wait' %}",
text: "{% trans 'Loading' %}...",
allowOutsideClick: false,
didOpen: () => {
Swal.showLoading();
}
});
}
function hideLoading() {
Swal.close();
}
function notify(tag,msg){
Swal.fire({
icon: tag,
titleText: msg
});
}
function getCookie(name) {
let cookieValue = null;
if (document.cookie && document.cookie !== "") {
const cookies = document.cookie.split(";");
for (let cookie of cookies) {
cookie = cookie.trim();
if (cookie.substring(0, name.length + 1) === name + "=") {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
async function sendFormData() {
const formData = getAllFormData();
const url = "{% url 'account_signup' %}";
const csrftoken = getCookie('csrftoken');
try {
showLoading();
const response = await fetch(url, {
method: 'POST',
headers: {
'X-CSRFToken': '{{csrf_token}}',
'Content-Type': 'application/json',
},
body: JSON.stringify(formData),
});
hideLoading();
const data = await response.json();
if (response.ok) {
notify("success","Account created successfully");
setTimeout(() => {
window.location.href = "{% url 'account_login' %}";
}, 1000);
} else {
notify("error",data.error);
}
} catch (error) {
notify("error",error);
}
}
</script>
{% endblock customJS %}

View File

@ -56,7 +56,7 @@
/* Kept `position-absolute` and adjusted padding */ /* Kept `position-absolute` and adjusted padding */
position: absolute; position: absolute;
bottom: 0; bottom: 0;
width: 96%; width: 90%;
padding: 1.5rem; padding: 1.5rem;

View File

@ -1,5 +1,4 @@
{% load i18n %} {% load i18n %}
<div class="policy-container m-4"> <div class="policy-container m-4">
<div class="policy-header"> <div class="policy-header">
<h1>{% trans "Haikal Refund Policy" %}</h1> <h1>{% trans "Haikal Refund Policy" %}</h1>

View File

@ -483,7 +483,7 @@
{% if request.user.is_authenticated %} {% if request.user.is_authenticated %}
<div class="navbar-logo"> <div class="navbar-logo">
<div class="d-flex align-items-center"> <div class="d-flex align-items-center">
{% with name_to_display=request.user.first_name|default:request.dealer.name %} {% with name_to_display=request.user.staff.first_name|default:request.dealer.name %}
<h6 class="text-gray-600 ms-2 d-none d-sm-block fs-8" <h6 class="text-gray-600 ms-2 d-none d-sm-block fs-8"
data-bs-toggle="tooltip" data-bs-toggle="tooltip"
data-bs-placement="bottom" data-bs-placement="bottom"
@ -660,19 +660,19 @@
</hr> </hr>
<div class="px-3"> <div class="px-3">
<a class="btn btn-sm btn-phoenix-danger d-flex flex-center w-100" <a class="btn btn-sm btn-phoenix-danger d-flex flex-center w-100"
href="{% url 'account_logout' %}"> <span class="fas fa-power-off me-2"></span>{% trans 'Sign Out' %}</a> href="{% url 'account_logout' %}"> <i class="fa-solid fa-right-from-bracket me-2"></i></span>{% trans 'Sign Out' %}</a>
</div> </div>
<div class="my-2 text-center fw-bold fs-10 text-body-quaternary"> <div class="my-2 text-center fw-bold fs-10 text-body-quaternary">
<a class="text-body-quaternary me-1" href="">{% trans 'Privacy policy' %}</a>&bull;<a class="text-body-quaternary mx-1" href="">{% trans 'Terms' %}</a>&bull;<a class="text-body-quaternary ms-1" href="">Cookies</a> <a class="text-body-quaternary me-1" href="">{% trans 'Privacy policy' %}</a>&bull;<a class="text-body-quaternary mx-1" href="">{% trans 'Terms' %}</a>&bull;<a class="text-body-quaternary ms-1" href="">{% trans "Cookies" %}</a>
</div> </div>
{% else %} {% else %}
<div class="px-3"> <div class="px-3">
<a class="btn btn-phoenix-succes d-flex flex-center w-100" <a class="btn btn-phoenix-succes d-flex flex-center w-100"
href="{% url 'account_login' %}"> <span class="me-2" data-feather="log-in"></span>{% trans 'Sign In' %}</a> href="{% url 'account_login' %}"> <i class="fa-solid fa-right-to-bracket me-2"></i>{% trans 'Sign In' %}</a>
</div> </div>
<div class="px-3"> <div class="px-3">
<a class="btn btn-phoenix-primary d-flex flex-center w-100" <a class="btn btn-phoenix-primary d-flex flex-center w-100"
href="{% url 'account_signup' %}"> <span class="me-2" data-feather="user-plus"></span>{% trans 'Sign Up' %}</a> href="{% url 'account_signup' %}"> <i class="fa-solid fa-user-plus"></i>{% trans 'Sign Up' %}</a>
</div> </div>
{% endif %} {% endif %}
</div> </div>

View File

@ -20,7 +20,7 @@
{% else %} {% else %}
{% trans "Add New Account" %} {% trans "Add New Account" %}
<i class="fa-solid fa-book ms-2"></i> <i class="fa-solid fa-book ms-2"></i>
{% endif %} {% endif %}
</h3> </h3>
</div> </div>
<div class="card-body p-4 p-md-5"> <div class="card-body p-4 p-md-5">

View File

@ -1,108 +1,79 @@
{% extends "base.html" %} {% extends "base.html" %}
{% load i18n %} {% load i18n %}
{% block title %}{% trans 'Order Details' %}{% endblock %} {% block title %}
{% trans 'Order Details' %}
{% endblock %}
{% block head %} {% block head %}
<script> <script>
$(function () { $(function () {
$('a.invoice-link').on('click', function (event) { $('a.invoice').click(function () {
event.preventDefault(); event.preventDefault();
window.open($(this).attr('href'), 'invoice_' + $(this).data('invoice-id'), 'width=860,resizable=1,location=0,status=0,titlebar=1'); window.open($(this).attr('href'), 'plans_invoice_{{ invoice.id }}', 'width=860,resizable=1,location=0,status=0,titlebar=1');
}); });
}); });
</script> </script>
{% endblock %} {% endblock %}
{% block body %} {% block body %}
<div class="max-w-4xl mx-auto"> <h1 class="mt-4">
<div class="flex items-center justify-between mb-6"> {% blocktrans with object.id as order_id and object.get_status_display as order_status %}Order #{{ order_id }}
<h1 class="text-3xl font-bold text-gray-800"> (status: {{ order_status }}){% endblocktrans %}
{% blocktrans with object.id as order_id %}Order #{{ order_id }}{% endblocktrans %} </h1>
</h1> {# You should provide displaying django messages in this template #}
<span class="inline-flex items-center px-3 py-1 rounded-full text-sm font-medium {% with object as order %}
{% if object.status == object.STATUS.COMPLETED %}bg-green-100 text-green-800{% elif object.status == object.STATUS.PENDING %}bg-yellow-100 text-yellow-800{% else %}bg-gray-100 text-gray-800{% endif %}"> {% include "plans/order_detail_table.html" %}
<i class="fas {% if object.status == object.STATUS.COMPLETED %}fa-check-circle{% elif object.status == object.STATUS.PENDING %}fa-clock{% else %}fa-info-circle{% endif %} mr-2"></i> {% endwith %}
{{ object.get_status_display }}
</span>
</div>
{# Order Summary Section #}
<div class="rounded-xl shadow-sm overflow-hidden mb-6">
<div class="px-6 py-4">
<h2 class="text-xl font-semibold text-gray-800 mb-4">{% trans "Order Summary" %}</h2>
{% with object as order %}
{% include "plans/order_detail_table.html" %}
{% endwith %}
</div>
</div>
{# Printable Documents Section #}
{% if object.get_all_invoices.count %} {% if object.get_all_invoices.count %}
<div class="rounded-xl shadow-sm overflow-hidden mb-6"> <h2 class="mt-4">{% trans "Printable documents" %}</h2>
<div class="px-6 py-4"> <ul id="order_printable_documents">
<h2 class="text-xl font-semibold text-gray-800 mb-4"> {% for invoice in object.get_all_invoices %}
<i class="fas fa-file-pdf text-gray-400 mr-2"></i> {% trans "Printable documents" %}
</h2>
<ul class="space-y-2">
{% for invoice in object.get_all_invoices %}
<li> <li>
<a href="{{ invoice.get_absolute_url }}" data-invoice-id="{{ invoice.id }}" class="invoice-link text-blue-600 hover:text-blue-800 font-medium transition-colors duration-200"> <a href="{{ invoice.get_absolute_url }}" class="invoice">{{ invoice.get_type_display }} {{ invoice }}</a>
{{ invoice.get_type_display }} {{ invoice }}
</a>
</li>
{% endfor %} {% endfor %}
</ul> </ul>
</div> {% endif %}
</div> <h2 class="mt-4">{% trans "Payment" %}</h2>
{% endif %} {% if object.completed %}
<p class="alert alert-phoenix-success mt-2">
{# Payment Section #} {% blocktrans with object.completed as completed %}
<div class="rounded-xl overflow-hidden mb-6"> Payment completed on: {{ completed }}
<div class="px-6 py-4"> {% endblocktrans %}
<h2 class="text-xl font-semibold text-gray-800 mb-4"> </p>
<i class="fas fa-credit-card text-gray-400 mr-2"></i> {% trans "Payment" %} {% else %}
</h2> {% if object.is_ready_for_payment %}
{% if object.completed %} {% block payment_method %}
<div class="bg-green-50 text-green-700 px-4 py-3 rounded-lg flex items-center"> <p class="mt-2">
<i class="fas fa-check-circle mr-3 text-lg"></i> Here should go bindings to your payment. We recommend using <a href="https://github.com/cypreess/django-getpaid">django-getpaid</a> for payment processing.
<p class="text-sm font-medium"> Use a fake payment below to simulate paying for an order:
{% blocktrans with object.completed as completed %}
Payment completed on: {{ completed|date:"F j, Y" }}
{% endblocktrans %}
</p> </p>
</div> <a class="btn btn-phoenix-success"
{% else %}
{% if object.is_ready_for_payment %}
<p class="text-gray-600 mb-4">
You can use a fake payment below to simulate paying for this order.
</p>
<a class="inline-flex items-center px-6 py-3 border border-transparent text-base font-medium rounded-lg shadow-sm text-white bg-green-600 hover:bg-green-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-500 transition-colors duration-200"
role="button" role="button"
href="{% url "fake_payments" pk=object.id %}"> href="{% url "fake_payments" pk=object.id %}">Pay using
<i class="fas fa-money-bill-wave mr-2"></i> FakePayments™ ;</a>
Pay using FakePayments&trade; {# An example code snippet for accepting payments using django-getpaid #}
</a> {# <form action="{% url "getpaid-new-payment" currency=object.currency %}" method="post"#}
{% else %} {# class="standard_form payment_form">#}
<div class="bg-yellow-50 text-yellow-700 px-4 py-3 rounded-lg flex items-center"> {# {% csrf_token %}#}
<i class="fas fa-exclamation-triangle mr-3 text-lg"></i> {# <ul>{{ payment_form.as_ul }}</ul>#}
<p class="text-sm font-medium"> {# <p><label>&nbsp;</label><input type="submit"
{% blocktrans %} value="{% trans "Pay the order" %}"
This order is expired. New payments cannot be initialized. Please make a new order if necessary. class="submit_button">#}
{% endblocktrans %} {# </p>#}
</p> {# </form>#}
</div> {% endblock %}
{% endif %} {% else %}
{% endif %} <p class="alert alert-phoenix-warning mt-2">
{% if object.status == object.STATUS.NOT_VALID %}
<div class="bg-red-50 text-red-700 px-4 py-3 rounded-lg mt-4 flex items-center">
<i class="fas fa-times-circle mr-3 text-lg"></i>
<p class="text-sm font-medium">
{% blocktrans %} {% blocktrans %}
This order could not be processed as it is not valid. Please contact customer service. This order is expired. It will accept an incoming payment made earlier, but new payment cannot be
{% endblocktrans %} initialized. Please make a new order if necessary.
{% endblocktrans %}
</p> </p>
</div>
{% endif %} {% endif %}
</div> {% endif %}
</div> {% if object.status == object.STATUS.NOT_VALID %}
</div> <p class="alert alert-phoenix-danger">
{% endblock %} {% blocktrans %}
This order could not be processed as it is not valid. Please contact with customer service.
{% endblocktrans %}
</p>
{% endif %}
{% endblock %}

View File

@ -10,7 +10,7 @@
</style> </style>
{% endblock extraCSS %} {% endblock extraCSS %}
{% block content %} {% block content %}
<div class="row d-flex justify-content-center"> <div class="row">
<div class="booking-hero-header d-flex align-items-center"> <div class="booking-hero-header d-flex align-items-center">
<div class="bg-holder overlay bg-opacity-75" <div class="bg-holder overlay bg-opacity-75"
style="background-image:url({% static 'video/image-haikal-02.png' %})"> style="background-image:url({% static 'video/image-haikal-02.png' %})">
@ -36,10 +36,11 @@
</div> </div>
</div> </div>
<section class="pt-6 pt-md-10 pb-10" id="feature"> <section class="pt-6 pt-md-10 pb-10" id="feature">
<div class="bg-holder d-none d-xl-block" <div class="container-medium">
style="background-image:url({% static 'images/bg/bg-left-27.png' %}); <div class="bg-holder d-none d-xl-block"
background-size:auto; style="background-image:url({% static 'images/bg/bg-left-27.png' %});
background-position:left"></div> background-size:auto;
background-position:left"></div>
<div class="bg-holder d-none d-xl-block" <div class="bg-holder d-none d-xl-block"
style="background-image:url({% static 'images/bg/bg-right-27.png' %}); style="background-image:url({% static 'images/bg/bg-right-27.png' %});
background-size:auto; background-size:auto;
@ -127,7 +128,9 @@
<h2 class="mb-7">{{ _("Pricing") }}</h2> <h2 class="mb-7">{{ _("Pricing") }}</h2>
<div class="row g-3 mb-7 mb-lg-11"> <div class="row g-3 mb-7 mb-lg-11">
{% for plan in plan_list %} {% for plan in plan_list %}
<div class="col-lg-4" onclick="window.location='{% url "account_signup" %}';"> <div class="col-lg-4" onclick="window.location='{% url "account_signup" %}';">
<input type="radio" <input type="radio"
class="btn-check" class="btn-check"
name="selected_plan" name="selected_plan"
@ -155,7 +158,9 @@
</div> </div>
</div> </div>
</label> </label>
</div> </div>
{% endfor %} {% endfor %}
</div> </div>
</div> </div>
@ -233,6 +238,8 @@
</div> </div>
</div> </div>
</section> </section>
<section class="pt-lg-0 pt-xl-8">
{% include 'footer.html' %}
</section>
</div> </div>
{% endblock %} {% endblock %}

View File

@ -43,7 +43,9 @@
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""> <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&display=swap" <link href="https://fonts.googleapis.com/css2?family=Nunito+Sans:wght@300;400;600;700;800;900&display=swap"
rel="stylesheet"> rel="stylesheet">
{% comment %} <link href="{% static 'vendors/simplebar/simplebar.min.css' %}" rel="stylesheet"> {% endcomment %}
{% comment %} <link href="{% static 'css/sweetalert2.min.css' %}" rel="stylesheet"> {% endcomment %}
{% comment %} <link rel="stylesheet" href="https://unicons.iconscout.com/release/v4.0.8/css/line.css"> {% endcomment %}
{% if LANGUAGE_CODE == 'ar' %} {% if LANGUAGE_CODE == 'ar' %}
<link href="{% static 'css/theme-rtl.min.css' %}" <link href="{% static 'css/theme-rtl.min.css' %}"
type="text/css" type="text/css"
@ -65,22 +67,23 @@
{% endif %} {% endif %}
<script src="{% static 'vendors/simplebar/simplebar.min.js' %}"></script> <script src="{% static 'vendors/simplebar/simplebar.min.js' %}"></script>
<script src="{% static 'js/config.js' %}"></script> <script src="{% static 'js/config.js' %}"></script>
{% comment %} <script src="{% static 'js/sweetalert2.all.min.js' %}"></script> {% endcomment %}
<link href="{% static 'css/custom.css' %}" rel="stylesheet"> <link href="{% static 'css/custom.css' %}" rel="stylesheet">
{% block extraCSS %}
{% endblock extraCSS %}
</head> </head>
<body class="d-flex flex-column min-vh-100"> <body>
{% include 'welcome_header.html' %} {% include 'welcome_header.html' %}
<main class="flex-grow-1"> {% block content %}
{% block content %} {% endblock content %}
{% endblock content %} {% comment %}
</main> <script src="{% static 'vendors/anchorjs/anchor.min.js' %}"></script>
<script src="{% static 'vendors/is/is.min.js' %}"></script>
<div class="site-footer mt-auto"> <script src="{% static 'vendors/list.js/list.min.js' %}"></script>
{% include 'welcome_footer.html' %} <script src="{% static 'vendors/dayjs/dayjs.min.js' %}"></script>
</div> <script src="{% static 'vendors/echarts/echarts.min.js' %}"></script>
<script src="{% static 'js/travel-agency-dashboard.js' %}"></script>
<script src="{% static 'vendors/mapbox-gl/mapbox-gl.js' %}"></script>
<script src="https://unpkg.com/@turf/turf@6/turf.min.js"></script>
<script src="{% static 'vendors/swiper/swiper-bundle.min.js' %}"></script> {% endcomment %}
<script src="{% static 'vendors/popper/popper.min.js' %}"></script> <script src="{% static 'vendors/popper/popper.min.js' %}"></script>
<script src="{% static 'vendors/bootstrap/bootstrap.min.js' %}"></script> <script src="{% static 'vendors/bootstrap/bootstrap.min.js' %}"></script>
<script src="{% static 'vendors/fontawesome/all.min.js' %}"></script> <script src="{% static 'vendors/fontawesome/all.min.js' %}"></script>
@ -88,7 +91,22 @@
<script src="{% static 'vendors/feather-icons/feather.min.js' %}"></script> <script src="{% static 'vendors/feather-icons/feather.min.js' %}"></script>
<script src="{% static 'vendors/typed.js/typed.umd.js' %}"></script> <script src="{% static 'vendors/typed.js/typed.umd.js' %}"></script>
<script src="{% static 'js/phoenix.js' %}"></script> <script src="{% static 'js/phoenix.js' %}"></script>
{% comment %} <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 'js/phoenix.js' %}"></script>
<script src="{% static 'vendors/echarts/echarts.min.js' %}"></script>
<script src="{% static 'js/travel-agency-dashboard.js' %}"></script>
<script src="{% static 'vendors/mapbox-gl/mapbox-gl.js' %}"></script>
<script src="https://unpkg.com/@turf/turf@6/turf.min.js"></script>
<script src="{% static 'vendors/swiper/swiper-bundle.min.js' %}"></script>
<script src="{% static 'vendors/typed.js/typed.umd.js' %}"></script> {% endcomment %}
{% block customJS %} {% block customJS %}
{% endblock customJS %} {% endblock customJS %}
</body> </body>

View File

@ -1,5 +1,5 @@
<section class="footer pb-6 pb-md-11 pt-5"> <section class="footer pb-6 pb-md-11 pt-15">
<div class="container-medium mt-3"> <div class="container-medium">
<div class="row gy-3 justify-content-between"> <div class="row gy-3 justify-content-between">
<div class="row g-0 justify-content-between align-items-center h-100"> <div class="row g-0 justify-content-between align-items-center h-100">
<div class="col-12 col-sm-auto text-center"> <div class="col-12 col-sm-auto text-center">