coa account fixes #229
@ -1129,7 +1129,6 @@ class ChartOfAccountModelCreateView(ChartOfAccountModelModelBaseViewMixIn, Creat
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class ChartOfAccountModelUpdateView(ChartOfAccountModelModelBaseViewMixIn, UpdateView):
|
||||
context_object_name = "coa_model"
|
||||
slug_url_kwarg = "coa_slug"
|
||||
|
||||
@ -4360,7 +4360,8 @@ class AccountListView(LoginRequiredMixin, PermissionRequiredMixin, ListView):
|
||||
def get_queryset(self):
|
||||
query = self.request.GET.get("q")
|
||||
dealer = get_user_type(self.request)
|
||||
accounts = dealer.entity.get_all_accounts()
|
||||
coa = ChartOfAccountModel.objects.get(entity=dealer.entity,pk=self.kwargs["coa_pk"]) or self.request.entity.get_default_coa()
|
||||
accounts = coa.get_coa_accounts()
|
||||
return apply_search_filters(accounts, query)
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
@ -4410,9 +4411,20 @@ class AccountCreateView(
|
||||
permission_required = ["django_ledger.add_accountmodel"]
|
||||
|
||||
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.coa_model = dealer.entity.get_default_coa()
|
||||
form.instance.coa_model = coa
|
||||
form.instance.depth = 0
|
||||
form.instance.path = form.instance.code
|
||||
return super().form_valid(form)
|
||||
@ -4420,13 +4432,15 @@ class AccountCreateView(
|
||||
def get_form_kwargs(self):
|
||||
dealer = get_user_type(self.request)
|
||||
kwargs = super().get_form_kwargs()
|
||||
kwargs["coa_model"] = dealer.entity.get_default_coa()
|
||||
coa = ChartOfAccountModel.objects.get(entity=dealer.entity,pk=self.kwargs["coa_pk"]) or self.request.entity.get_default_coa()
|
||||
kwargs["coa_model"] = coa
|
||||
return kwargs
|
||||
|
||||
def get_form(self, form_class=None):
|
||||
form = super().get_form(form_class)
|
||||
entity = get_user_type(self.request).entity
|
||||
form.initial["coa_model"] = entity.get_default_coa()
|
||||
coa = ChartOfAccountModel.objects.get(entity=entity,pk=self.kwargs["coa_pk"]) or self.request.entity.get_default_coa()
|
||||
form.initial["coa_model"] = coa
|
||||
return form
|
||||
|
||||
def get_success_url(self):
|
||||
@ -4436,12 +4450,13 @@ class AccountCreateView(
|
||||
def get_context_data(self,**kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context["url_kwargs"] = self.kwargs
|
||||
coa_pk = context["url_kwargs"]["coa_pk"]
|
||||
coa_pk = context["url_kwargs"]["coa_pk"]
|
||||
try:
|
||||
kwargs["coa_model"] = ChartOfAccountModel.objects.get(pk=coa_pk) or self.request.entity.get_default_coa()
|
||||
context["coa_model"] = ChartOfAccountModel.objects.get(entity=self.request.entity,pk=coa_pk)
|
||||
except Exception:
|
||||
kwargs["coa_model"] = self.request.entity.get_default_coa()
|
||||
context["coa_model"] = self.request.entity.get_default_coa()
|
||||
return context
|
||||
|
||||
class AccountDetailView(LoginRequiredMixin, PermissionRequiredMixin, DetailView):
|
||||
"""
|
||||
Represents the detailed view for an account with additional context data related to account
|
||||
@ -4540,7 +4555,11 @@ class AccountUpdateView(
|
||||
form.fields["_ref_node_id"].widget = HiddenInput()
|
||||
form.fields["_position"].widget = HiddenInput()
|
||||
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):
|
||||
return reverse_lazy(
|
||||
"account_list", kwargs={"dealer_slug": self.kwargs["dealer_slug"],"coa_pk":self.kwargs["coa_pk"]}
|
||||
@ -4551,9 +4570,9 @@ class AccountUpdateView(
|
||||
context["url_kwargs"] = self.kwargs
|
||||
coa_pk = context["url_kwargs"]["coa_pk"]
|
||||
try:
|
||||
kwargs["coa_model"] = ChartOfAccountModel.objects.get(pk=coa_pk) or self.request.entity.get_default_coa()
|
||||
context["coa_model"] = ChartOfAccountModel.objects.get(pk=coa_pk) or self.request.entity.get_default_coa()
|
||||
except Exception:
|
||||
kwargs["coa_model"] = self.request.entity.get_default_coa()
|
||||
context["coa_model"] = self.request.entity.get_default_coa()
|
||||
return context
|
||||
@login_required
|
||||
@permission_required("django_ledger.delete_accountmodel")
|
||||
@ -11435,7 +11454,10 @@ def staff_password_reset_view(request, dealer_slug, user_pk):
|
||||
|
||||
if request.method == 'POST':
|
||||
form = forms.CustomSetPasswordForm(staff.user, request.POST)
|
||||
|
||||
if form.is_valid():
|
||||
print(form.cleaned_data['new_password1'])
|
||||
print(form.cleaned_data['new_password2'])
|
||||
form.save()
|
||||
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)
|
||||
@ -11676,12 +11698,12 @@ def ticket_update(request, ticket_id):
|
||||
})
|
||||
|
||||
|
||||
class ChartOfAccountModelListView(ChartOfAccountModelListViewBase):
|
||||
template_name = 'chart_of_accounts/coa_list.html'
|
||||
permission_required = 'django_ledger.view_chartofaccountmodel'
|
||||
# class ChartOfAccountModelListView(ChartOfAccountModelListViewBase):
|
||||
# template_name = 'chart_of_accounts/coa_list.html'
|
||||
# permission_required = 'django_ledger.view_chartofaccountmodel'
|
||||
class ChartOfAccountModelCreateView(ChartOfAccountModelCreateViewBase):
|
||||
template_name = 'chart_of_accounts/coa_create.html'
|
||||
permission_required = 'django_ledger.add_chartofaccountmodel'
|
||||
permission_required = 'django_ledger.add_chartofaccountmodel'
|
||||
class ChartOfAccountModelListView(ChartOfAccountModelListViewBase):
|
||||
template_name = 'chart_of_accounts/coa_list.html'
|
||||
permission_required = 'django_ledger.view_chartofaccountmodel'
|
||||
|
||||
@ -77,7 +77,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{% include 'footer.html' %}
|
||||
|
||||
{% if LOGIN_BY_CODE_ENABLED or PASSKEY_LOGIN_ENABLED %}
|
||||
<hr>
|
||||
{% element button_group vertical=True %}
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
{% load i18n static %}
|
||||
|
||||
{% block content %}
|
||||
<section class="main my-2">
|
||||
<section class="main my-4">
|
||||
<div class="container" style="max-width:60rem;">
|
||||
<div class="row form-container" id="form-container">
|
||||
<div class="col-12 ">
|
||||
@ -35,26 +35,135 @@
|
||||
<button class="btn btn-primary" type="submit">{% trans 'Sign Up' %}</button>
|
||||
</div>
|
||||
</form>
|
||||
<a href="#" class="float-start mt-4" data-bs-toggle="modal" data-bs-target="#contentModal">
|
||||
Our Refund Policy
|
||||
</a>
|
||||
</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>
|
||||
</section>
|
||||
|
||||
<div class="modal fade" id="contentModal" tabindex="-1" aria-labelledby="contentModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog modal-xl modal-dialog-centered">
|
||||
<div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog modal-xl">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="contentModalLabel">Refund Policy</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body modal-dialog-scrollable">
|
||||
{% include "haikal_policy/refund_policy.html" %}
|
||||
</div>
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="exampleModalLabel">{% trans "Our Refund Policy" %}</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
{% include 'haikal_policy/refund_policy.html' %}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% include 'footer.html' %}
|
||||
{% endblock content %}
|
||||
</div>
|
||||
|
||||
|
||||
{% 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 %}
|
||||
@ -12,7 +12,7 @@
|
||||
<div class="card-header bg-gradient py-4 border-0 rounded-top-4">
|
||||
<h3 class="mb-0 fs-4 fw-bold text-center">
|
||||
{% trans 'Create Chart of Accounts' %}
|
||||
<i class="fa-solid fa-chart-pie ms-2"></i>
|
||||
<i class="fa-solid fa-chart-pie ms-2"></i>
|
||||
</h3>
|
||||
</div>
|
||||
<div class="card-body p-4 p-md-5">
|
||||
|
||||
@ -56,7 +56,7 @@
|
||||
/* Kept `position-absolute` and adjusted padding */
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
width: 90%;
|
||||
width: 96%;
|
||||
padding: 1.5rem;
|
||||
|
||||
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
{% load i18n %}
|
||||
|
||||
<div class="policy-container m-4">
|
||||
<div class="policy-header">
|
||||
<h1>{% trans "Haikal Refund Policy" %}</h1>
|
||||
|
||||
@ -483,7 +483,7 @@
|
||||
{% if request.user.is_authenticated %}
|
||||
<div class="navbar-logo">
|
||||
<div class="d-flex align-items-center">
|
||||
{% with name_to_display=request.user.staff.first_name|default:request.dealer.name %}
|
||||
{% with name_to_display=request.user.first_name|default:request.dealer.name %}
|
||||
<h6 class="text-gray-600 ms-2 d-none d-sm-block fs-8"
|
||||
data-bs-toggle="tooltip"
|
||||
data-bs-placement="bottom"
|
||||
@ -660,19 +660,19 @@
|
||||
</hr>
|
||||
<div class="px-3">
|
||||
<a class="btn btn-sm btn-phoenix-danger d-flex flex-center w-100"
|
||||
href="{% url 'account_logout' %}"> <i class="fa-solid fa-right-from-bracket me-2"></i></span>{% trans 'Sign Out' %}</a>
|
||||
href="{% url 'account_logout' %}"> <span class="fas fa-power-off me-2"></span>{% trans 'Sign Out' %}</a>
|
||||
</div>
|
||||
<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>•<a class="text-body-quaternary mx-1" href="">{% trans 'Terms' %}</a>•<a class="text-body-quaternary ms-1" href="">{% trans "Cookies" %}</a>
|
||||
<a class="text-body-quaternary me-1" href="">{% trans 'Privacy policy' %}</a>•<a class="text-body-quaternary mx-1" href="">{% trans 'Terms' %}</a>•<a class="text-body-quaternary ms-1" href="">Cookies</a>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="px-3">
|
||||
<a class="btn btn-phoenix-succes d-flex flex-center w-100"
|
||||
href="{% url 'account_login' %}"> <i class="fa-solid fa-right-to-bracket me-2"></i>{% trans 'Sign In' %}</a>
|
||||
href="{% url 'account_login' %}"> <span class="me-2" data-feather="log-in"></span>{% trans 'Sign In' %}</a>
|
||||
</div>
|
||||
<div class="px-3">
|
||||
<a class="btn btn-phoenix-primary d-flex flex-center w-100"
|
||||
href="{% url 'account_signup' %}"> <i class="fa-solid fa-user-plus"></i>{% trans 'Sign Up' %}</a>
|
||||
href="{% url 'account_signup' %}"> <span class="me-2" data-feather="user-plus"></span>{% trans 'Sign Up' %}</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
@ -20,7 +20,7 @@
|
||||
{% else %}
|
||||
{% trans "Add New Account" %}
|
||||
<i class="fa-solid fa-book ms-2"></i>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</h3>
|
||||
</div>
|
||||
<div class="card-body p-4 p-md-5">
|
||||
|
||||
@ -1,79 +1,108 @@
|
||||
{% extends "base.html" %}
|
||||
{% load i18n %}
|
||||
{% block title %}
|
||||
{% trans 'Order Details' %}
|
||||
{% endblock %}
|
||||
{% block title %}{% trans 'Order Details' %}{% endblock %}
|
||||
{% block head %}
|
||||
<script>
|
||||
$(function () {
|
||||
$('a.invoice').click(function () {
|
||||
$('a.invoice-link').on('click', function (event) {
|
||||
event.preventDefault();
|
||||
window.open($(this).attr('href'), 'plans_invoice_{{ invoice.id }}', 'width=860,resizable=1,location=0,status=0,titlebar=1');
|
||||
window.open($(this).attr('href'), 'invoice_' + $(this).data('invoice-id'), 'width=860,resizable=1,location=0,status=0,titlebar=1');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
{% block body %}
|
||||
<h1 class="mt-4">
|
||||
{% blocktrans with object.id as order_id and object.get_status_display as order_status %}Order #{{ order_id }}
|
||||
(status: {{ order_status }}){% endblocktrans %}
|
||||
</h1>
|
||||
{# You should provide displaying django messages in this template #}
|
||||
{% with object as order %}
|
||||
{% include "plans/order_detail_table.html" %}
|
||||
{% endwith %}
|
||||
<div class="max-w-4xl mx-auto">
|
||||
<div class="flex items-center justify-between mb-6">
|
||||
<h1 class="text-3xl font-bold text-gray-800">
|
||||
{% blocktrans with object.id as order_id %}Order #{{ order_id }}{% endblocktrans %}
|
||||
</h1>
|
||||
<span class="inline-flex items-center px-3 py-1 rounded-full text-sm font-medium
|
||||
{% 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 %}">
|
||||
<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>
|
||||
{{ 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 %}
|
||||
<h2 class="mt-4">{% trans "Printable documents" %}</h2>
|
||||
<ul id="order_printable_documents">
|
||||
{% for invoice in object.get_all_invoices %}
|
||||
<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">
|
||||
<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>
|
||||
<a href="{{ invoice.get_absolute_url }}" class="invoice">{{ invoice.get_type_display }} {{ invoice }}</a>
|
||||
<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">
|
||||
{{ invoice.get_type_display }} {{ invoice }}
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
<h2 class="mt-4">{% trans "Payment" %}</h2>
|
||||
{% if object.completed %}
|
||||
<p class="alert alert-phoenix-success mt-2">
|
||||
{% blocktrans with object.completed as completed %}
|
||||
Payment completed on: {{ completed }}
|
||||
{% endblocktrans %}
|
||||
</p>
|
||||
{% else %}
|
||||
{% if object.is_ready_for_payment %}
|
||||
{% block payment_method %}
|
||||
<p class="mt-2">
|
||||
Here should go bindings to your payment. We recommend using <a href="https://github.com/cypreess/django-getpaid">django-getpaid</a> for payment processing.
|
||||
Use a fake payment below to simulate paying for an order:
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{# Payment Section #}
|
||||
<div class="rounded-xl overflow-hidden mb-6">
|
||||
<div class="px-6 py-4">
|
||||
<h2 class="text-xl font-semibold text-gray-800 mb-4">
|
||||
<i class="fas fa-credit-card text-gray-400 mr-2"></i> {% trans "Payment" %}
|
||||
</h2>
|
||||
{% if object.completed %}
|
||||
<div class="bg-green-50 text-green-700 px-4 py-3 rounded-lg flex items-center">
|
||||
<i class="fas fa-check-circle mr-3 text-lg"></i>
|
||||
<p class="text-sm font-medium">
|
||||
{% blocktrans with object.completed as completed %}
|
||||
Payment completed on: {{ completed|date:"F j, Y" }}
|
||||
{% endblocktrans %}
|
||||
</p>
|
||||
<a class="btn btn-phoenix-success"
|
||||
role="button"
|
||||
href="{% url "fake_payments" pk=object.id %}">Pay using
|
||||
FakePayments™ ;</a>
|
||||
{# An example code snippet for accepting payments using django-getpaid #}
|
||||
{# <form action="{% url "getpaid-new-payment" currency=object.currency %}" method="post"#}
|
||||
{# class="standard_form payment_form">#}
|
||||
{# {% csrf_token %}#}
|
||||
{# <ul>{{ payment_form.as_ul }}</ul>#}
|
||||
{# <p><label> </label><input type="submit"
|
||||
value="{% trans "Pay the order" %}"
|
||||
class="submit_button">#}
|
||||
{# </p>#}
|
||||
{# </form>#}
|
||||
{% endblock %}
|
||||
</div>
|
||||
{% else %}
|
||||
<p class="alert alert-phoenix-warning mt-2">
|
||||
{% blocktrans %}
|
||||
This order is expired. It will accept an incoming payment made earlier, but new payment cannot be
|
||||
initialized. Please make a new order if necessary.
|
||||
{% endblocktrans %}
|
||||
</p>
|
||||
{% 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"
|
||||
href="{% url "fake_payments" pk=object.id %}">
|
||||
<i class="fas fa-money-bill-wave mr-2"></i>
|
||||
Pay using FakePayments™
|
||||
</a>
|
||||
{% else %}
|
||||
<div class="bg-yellow-50 text-yellow-700 px-4 py-3 rounded-lg flex items-center">
|
||||
<i class="fas fa-exclamation-triangle mr-3 text-lg"></i>
|
||||
<p class="text-sm font-medium">
|
||||
{% blocktrans %}
|
||||
This order is expired. New payments cannot be initialized. Please make a new order if necessary.
|
||||
{% endblocktrans %}
|
||||
</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if object.status == object.STATUS.NOT_VALID %}
|
||||
<p class="alert alert-phoenix-danger">
|
||||
{% blocktrans %}
|
||||
This order could not be processed as it is not valid. Please contact with customer service.
|
||||
{% endblocktrans %}
|
||||
</p>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% 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 %}
|
||||
This order could not be processed as it is not valid. Please contact customer service.
|
||||
{% endblocktrans %}
|
||||
</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
@ -10,7 +10,7 @@
|
||||
</style>
|
||||
{% endblock extraCSS %}
|
||||
{% block content %}
|
||||
<div class="row">
|
||||
<div class="row d-flex justify-content-center">
|
||||
<div class="booking-hero-header d-flex align-items-center">
|
||||
<div class="bg-holder overlay bg-opacity-75"
|
||||
style="background-image:url({% static 'video/image-haikal-02.png' %})">
|
||||
@ -36,11 +36,10 @@
|
||||
</div>
|
||||
</div>
|
||||
<section class="pt-6 pt-md-10 pb-10" id="feature">
|
||||
<div class="container-medium">
|
||||
<div class="bg-holder d-none d-xl-block"
|
||||
style="background-image:url({% static 'images/bg/bg-left-27.png' %});
|
||||
background-size:auto;
|
||||
background-position:left"></div>
|
||||
<div class="bg-holder d-none d-xl-block"
|
||||
style="background-image:url({% static 'images/bg/bg-left-27.png' %});
|
||||
background-size:auto;
|
||||
background-position:left"></div>
|
||||
<div class="bg-holder d-none d-xl-block"
|
||||
style="background-image:url({% static 'images/bg/bg-right-27.png' %});
|
||||
background-size:auto;
|
||||
@ -128,9 +127,7 @@
|
||||
<h2 class="mb-7">{{ _("Pricing") }}</h2>
|
||||
<div class="row g-3 mb-7 mb-lg-11">
|
||||
{% for plan in plan_list %}
|
||||
|
||||
<div class="col-lg-4" onclick="window.location='{% url "account_signup" %}';">
|
||||
|
||||
<input type="radio"
|
||||
class="btn-check"
|
||||
name="selected_plan"
|
||||
@ -158,9 +155,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</label>
|
||||
|
||||
</div>
|
||||
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
@ -238,8 +233,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="pt-lg-0 pt-xl-8">
|
||||
{% include 'footer.html' %}
|
||||
</section>
|
||||
|
||||
</div>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
@ -43,9 +43,7 @@
|
||||
<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"
|
||||
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' %}
|
||||
<link href="{% static 'css/theme-rtl.min.css' %}"
|
||||
type="text/css"
|
||||
@ -67,23 +65,22 @@
|
||||
{% endif %}
|
||||
<script src="{% static 'vendors/simplebar/simplebar.min.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">
|
||||
|
||||
{% block extraCSS %}
|
||||
{% endblock extraCSS %}
|
||||
</head>
|
||||
<body>
|
||||
<body class="d-flex flex-column min-vh-100">
|
||||
{% include 'welcome_header.html' %}
|
||||
{% block content %}
|
||||
{% endblock content %}
|
||||
{% comment %}
|
||||
<script src="{% static 'vendors/anchorjs/anchor.min.js' %}"></script>
|
||||
<script src="{% static 'vendors/is/is.min.js' %}"></script>
|
||||
<script src="{% static 'vendors/list.js/list.min.js' %}"></script>
|
||||
<script src="{% static 'vendors/dayjs/dayjs.min.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> {% endcomment %}
|
||||
<main class="flex-grow-1">
|
||||
{% block content %}
|
||||
{% endblock content %}
|
||||
</main>
|
||||
|
||||
<div class="site-footer mt-auto">
|
||||
{% include 'welcome_footer.html' %}
|
||||
</div>
|
||||
|
||||
<script src="{% static 'vendors/popper/popper.min.js' %}"></script>
|
||||
<script src="{% static 'vendors/bootstrap/bootstrap.min.js' %}"></script>
|
||||
<script src="{% static 'vendors/fontawesome/all.min.js' %}"></script>
|
||||
@ -91,23 +88,8 @@
|
||||
<script src="{% static 'vendors/feather-icons/feather.min.js' %}"></script>
|
||||
<script src="{% static 'vendors/typed.js/typed.umd.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 %}
|
||||
{% endblock customJS %}
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
@ -1,5 +1,5 @@
|
||||
<section class="footer pb-6 pb-md-11 pt-15">
|
||||
<div class="container-medium">
|
||||
<section class="footer pb-6 pb-md-11 pt-5">
|
||||
<div class="container-medium mt-3">
|
||||
<div class="row gy-3 justify-content-between">
|
||||
<div class="row g-0 justify-content-between align-items-center h-100">
|
||||
<div class="col-12 col-sm-auto text-center">
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user