Merge pull request 'lead page ui fix and vat rate validation' (#247) from frontend into main
Reviewed-on: #247
This commit is contained in:
commit
ad35058720
@ -8,7 +8,7 @@ from django import forms
|
|||||||
from plans.models import PlanPricing
|
from plans.models import PlanPricing
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
|
|
||||||
from inventory.validators import SaudiPhoneNumberValidator
|
from inventory.validators import SaudiPhoneNumberValidator, vat_rate_validator
|
||||||
from .models import CustomGroup, Status, Stage
|
from .models import CustomGroup, Status, Stage
|
||||||
from .mixins import AddClassMixin
|
from .mixins import AddClassMixin
|
||||||
from django_ledger.forms.invoice import (
|
from django_ledger.forms.invoice import (
|
||||||
@ -2130,28 +2130,16 @@ class AdditionalFinancesForm(forms.Form):
|
|||||||
|
|
||||||
class VatRateForm(forms.ModelForm):
|
class VatRateForm(forms.ModelForm):
|
||||||
rate = forms.DecimalField(
|
rate = forms.DecimalField(
|
||||||
|
label="VAT Rate",
|
||||||
max_digits=5,
|
max_digits=5,
|
||||||
decimal_places=2,
|
decimal_places=2,
|
||||||
min_value=0,
|
validators=[vat_rate_validator]
|
||||||
max_value=100,
|
|
||||||
label=_("VAT Rate (%)"),
|
|
||||||
help_text=_("Enter VAT rate as percentage (e.g., 0.15 for 15%)")
|
|
||||||
)
|
)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = VatRate
|
model = VatRate
|
||||||
fields = ["rate"]
|
fields = ["rate"]
|
||||||
|
|
||||||
def clean_rate(self):
|
|
||||||
rate = self.cleaned_data['rate']
|
|
||||||
return rate / 100
|
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
|
||||||
super().__init__(*args, **kwargs)
|
|
||||||
if self.instance and self.instance.pk:
|
|
||||||
self.fields['rate'].initial = self.instance.rate * 100
|
|
||||||
|
|
||||||
|
|
||||||
class CustomSetPasswordForm(SetPasswordForm):
|
class CustomSetPasswordForm(SetPasswordForm):
|
||||||
new_password1 = forms.CharField(
|
new_password1 = forms.CharField(
|
||||||
label="New Password",
|
label="New Password",
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
from django.core.validators import RegexValidator
|
from django.core.validators import RegexValidator
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
from django.core.exceptions import ValidationError
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
|
||||||
@ -14,3 +15,10 @@ class SaudiPhoneNumberValidator(RegexValidator):
|
|||||||
# Remove any whitespace, dashes, or other separators
|
# Remove any whitespace, dashes, or other separators
|
||||||
cleaned_value = re.sub(r"[\s\-\(\)\.]", "", str(value))
|
cleaned_value = re.sub(r"[\s\-\(\)\.]", "", str(value))
|
||||||
super().__call__(cleaned_value)
|
super().__call__(cleaned_value)
|
||||||
|
|
||||||
|
def vat_rate_validator(value):
|
||||||
|
if value < 0 or value > 1:
|
||||||
|
raise ValidationError(
|
||||||
|
_('%(value)s is not a valid VAT rate. It must be between 0 and 1.'),
|
||||||
|
params={'value': value},
|
||||||
|
)
|
||||||
@ -2336,21 +2336,28 @@ class DealerDetailView(LoginRequiredMixin, PermissionRequiredMixin, DetailView):
|
|||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
from .forms import VatRateForm
|
||||||
|
@login_required
|
||||||
def dealer_vat_rate_update(request, slug):
|
def dealer_vat_rate_update(request, slug):
|
||||||
dealer = get_object_or_404(models.Dealer, slug=slug)
|
dealer = get_object_or_404(models.Dealer, slug=slug)
|
||||||
vat_rate, created = models.VatRate.objects.get_or_create(dealer=dealer)
|
|
||||||
|
vat_rate_instance, created = models.VatRate.objects.get_or_create(dealer=dealer)
|
||||||
|
|
||||||
form = forms.VatRateForm(request.POST, instance=vat_rate)
|
if request.method == "POST":
|
||||||
|
|
||||||
if form.is_valid():
|
form = VatRateForm(request.POST, instance=vat_rate_instance)
|
||||||
form.save()
|
|
||||||
messages.success(request, _("VAT rate updated successfully"))
|
if form.is_valid():
|
||||||
else:
|
form.save()
|
||||||
logger.error(form.errors)
|
messages.success(request, _("VAT rate updated successfully"))
|
||||||
messages.error(request, _("VAT rate update failed: %s") % form.errors.as_text())
|
return redirect("dealer_detail", slug=slug)
|
||||||
|
else:
|
||||||
return redirect("dealer_detail", slug=slug)
|
|
||||||
|
messages.error(request, _("Please enter valid vat rate between 0 and 1."))
|
||||||
|
redirect("dealer_detail", slug=slug)
|
||||||
|
|
||||||
|
return redirect("dealer_detail", slug=slug)
|
||||||
|
|
||||||
|
|
||||||
class DealerUpdateView(
|
class DealerUpdateView(
|
||||||
LoginRequiredMixin, PermissionRequiredMixin, SuccessMessageMixin, UpdateView
|
LoginRequiredMixin, PermissionRequiredMixin, SuccessMessageMixin, UpdateView
|
||||||
@ -2408,11 +2415,6 @@ class StaffDetailView(LoginRequiredMixin, DetailView):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
def dealer_vat_rate_update(request, slug):
|
|
||||||
dealer = get_object_or_404(models.Dealer, slug=slug)
|
|
||||||
models.VatRate.objects.filter(dealer=dealer).update(rate=request.POST.get("rate"))
|
|
||||||
messages.success(request, _("VAT rate updated successfully"))
|
|
||||||
return redirect("dealer_detail", slug=slug)
|
|
||||||
|
|
||||||
|
|
||||||
class CustomerListView(LoginRequiredMixin, PermissionRequiredMixin, ListView):
|
class CustomerListView(LoginRequiredMixin, PermissionRequiredMixin, ListView):
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 435 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 435 KiB |
@ -804,6 +804,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
{% include 'modal/delete_modal.html' %}
|
{% include 'modal/delete_modal.html' %}
|
||||||
<!-- add update Modal -->
|
<!-- add update Modal -->
|
||||||
{% include "components/email_modal.html" %}
|
{% include "components/email_modal.html" %}
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
{% load i18n static widget_tweaks custom_filters %}
|
{% load i18n static widget_tweaks custom_filters %}
|
||||||
{% block title %}
|
{% block title %}
|
||||||
{# Check if an 'object' exists in the context #}
|
|
||||||
{% if object %}
|
{% if object %}
|
||||||
{% trans 'Update Opportunity' %}
|
{% trans 'Update Opportunity' %}
|
||||||
{% else %}
|
{% else %}
|
||||||
@ -27,99 +26,112 @@
|
|||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row g-3">
|
<div class="row g-3">
|
||||||
<div class="col-lg-8">
|
<div class="col-lg-8">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-body p-4 p-sm-5">
|
<div class="card-body p-4 p-sm-5">
|
||||||
<form method="post" enctype="multipart/form-data">
|
<form method="post" enctype="multipart/form-data">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{% if form.non_field_errors %}<div class="alert alert-danger">{{ form.non_field_errors }}</div>{% endif %}
|
{% if form.non_field_errors %}
|
||||||
<!-- Lead Field -->
|
<div class="alert alert-danger">{{ form.non_field_errors }}</div>
|
||||||
<div class="mb-4">
|
{% endif %}
|
||||||
<label class="form-label" for="{{ form.lead.id_for_label }}">
|
|
||||||
{{ form.lead.label }}
|
<h5 class="mb-3 text-dark">{% trans "Main Information" %}</h5>
|
||||||
<span class="text-danger">*</span>
|
<div class="row g-3 mb-5">
|
||||||
</label>
|
<div class="col-md-6">
|
||||||
{{ form.lead|add_class:"form-control" }}
|
<label class="form-label" for="{{ form.lead.id_for_label }}">
|
||||||
{% if form.lead.errors %}<div class="invalid-feedback d-block">{{ form.lead.errors }}</div>{% endif %}
|
{{ form.lead.label }}
|
||||||
</div>
|
<span class="text-danger">*</span>
|
||||||
<!-- Car Field -->
|
</label>
|
||||||
<div class="mb-4">
|
{{ form.lead|add_class:"form-control form-select" }}
|
||||||
<label class="form-label" for="{{ form.car.id_for_label }}">
|
{% if form.lead.errors %}<div class="invalid-feedback d-block">{{ form.lead.errors }}</div>{% endif %}
|
||||||
{{ form.car.label }}
|
|
||||||
<span class="text-danger">*</span>
|
|
||||||
</label>
|
|
||||||
{{ form.car|add_class:"form-control" }}
|
|
||||||
{% if form.car.errors %}<div class="invalid-feedback d-block">{{ form.car.errors }}</div>{% endif %}
|
|
||||||
</div>
|
|
||||||
<!-- Stage Field -->
|
|
||||||
<div class="mb-4">
|
|
||||||
<label class="form-label" for="{{ form.stage.id_for_label }}">
|
|
||||||
{{ form.stage.label }}
|
|
||||||
<span class="text-danger">*</span>
|
|
||||||
</label>
|
|
||||||
{{ form.stage|add_class:"form-control" }}
|
|
||||||
{% if form.stage.errors %}<div class="invalid-feedback d-block">{{ form.stage.errors }}</div>{% endif %}
|
|
||||||
</div>
|
|
||||||
<!-- Amount Field -->
|
|
||||||
{% comment %} <div class="mb-4">
|
|
||||||
<label class="form-label" for="{{ form.amount.id_for_label }}">
|
|
||||||
{{ form.amount.label }}
|
|
||||||
<span class="text-danger">*</span>
|
|
||||||
</label>
|
|
||||||
<div class="input-group">
|
|
||||||
<span class="input-group-text"><span class="icon-saudi_riyal"></span></span>
|
|
||||||
{{ form.amount|add_class:"form-control" }}
|
|
||||||
</div>
|
</div>
|
||||||
{% if form.amount.errors %}<div class="invalid-feedback d-block">{{ form.amount.errors }}</div>{% endif %}
|
<div class="col-md-6">
|
||||||
</div> {% endcomment %}
|
<label class="form-label" for="{{ form.car.id_for_label }}">
|
||||||
<!-- Probability Field -->
|
{{ form.car.label }}
|
||||||
{% comment %} <div class="mb-4">
|
<span class="text-danger">*</span>
|
||||||
<label class="form-label" for="{{ form.probability.id_for_label }}">
|
</label>
|
||||||
{{ form.probability.label }}
|
{{ form.car|add_class:"form-control form-select" }}
|
||||||
<span class="text-danger">*</span>
|
{% if form.car.errors %}<div class="invalid-feedback d-block">{{ form.car.errors }}</div>{% endif %}
|
||||||
</label>
|
</div>
|
||||||
<div class="d-flex align-items-center gap-3">
|
<div class="col-md-6">
|
||||||
<input type="range"
|
<label class="form-label" for="{{ form.stage.id_for_label }}">
|
||||||
name="{{ form.probability.name }}"
|
{{ form.stage.label }}
|
||||||
id="{{ form.probability.id_for_label }}"
|
<span class="text-danger">*</span>
|
||||||
min="0"
|
</label>
|
||||||
max="100"
|
{{ form.stage|add_class:"form-control form-select" }}
|
||||||
step="1"
|
{% if form.stage.errors %}<div class="invalid-feedback d-block">{{ form.stage.errors }}</div>{% endif %}
|
||||||
value="{{ form.probability.value|default:'50' }}"
|
</div>
|
||||||
class="form-control form-range"
|
<div class="col-md-6">
|
||||||
oninput="updateProbabilityValue(this.value)">
|
<label class="form-label" for="{{ form.expected_close_date.id_for_label }}">
|
||||||
<span id="probability-value"
|
{{ form.expected_close_date.label }}
|
||||||
class="badge badge-phoenix fs-6 badge-phoenix-primary">
|
</label>
|
||||||
{{ form.probability.value|default:'50' }}%
|
<div class="input-group">
|
||||||
</span>
|
{{ form.expected_close_date|add_class:"form-control" }}
|
||||||
|
<span class="input-group-text"><span class="far fa-calendar"></span></span>
|
||||||
|
</div>
|
||||||
|
{% if form.expected_close_date.errors %}
|
||||||
|
<div class="invalid-feedback d-block">{{ form.expected_close_date.errors }}</div>
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
{% if form.probability.errors %}<div class="invalid-feedback d-block">{{ form.probability.errors }}</div>{% endif %}
|
|
||||||
</div>
|
</div>
|
||||||
<!-- Expected Revenue -->
|
{% comment %}
|
||||||
<div class="mb-4">
|
|
||||||
<label class="form-label" for="{{ form.expected_revenue.id_for_label }}">{{ form.expected_revenue.label }}</label>
|
|
||||||
<div class="input-group">
|
|
||||||
<span class="input-group-text"><span class="icon-saudi_riyal"></span></span>
|
|
||||||
{{ form.expected_revenue|add_class:"form-control" }}
|
|
||||||
</div>
|
|
||||||
{% if form.expected_revenue.errors %}
|
|
||||||
<div class="invalid-feedback d-block">{{ form.expected_revenue.errors }}</div>
|
|
||||||
{% endif %}
|
|
||||||
</div> {% endcomment %}
|
|
||||||
<!-- Closing Date -->
|
|
||||||
<div class="mb-5">
|
<div class="mb-5">
|
||||||
<label class="form-label" for="{{ form.expected_close_date.id_for_label }}">{{ form.expected_close_date.label }}</label>
|
<h5 class="mb-3 text-dark">{% trans "Financial Information" %}</h5>
|
||||||
<div class="input-group">
|
<div class="row g-3">
|
||||||
{{ form.expected_close_date|add_class:"form-control" }}
|
<div class="col-md-6">
|
||||||
<span class="input-group-text"><span class="far fa-calendar"></span></span>
|
<label class="form-label" for="{{ form.amount.id_for_label }}">
|
||||||
|
{{ form.amount.label }}
|
||||||
|
<span class="text-danger">*</span>
|
||||||
|
</label>
|
||||||
|
<div class="input-group input-group-lg">
|
||||||
|
<span class="input-group-text bg-light border-end-0 text-muted">SAR</span>
|
||||||
|
{{ form.amount|add_class:"form-control border-start-0" }}
|
||||||
|
</div>
|
||||||
|
{% if form.amount.errors %}
|
||||||
|
<div class="invalid-feedback d-block">{{ form.amount.errors }}</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6">
|
||||||
|
<label class="form-label" for="{{ form.probability.id_for_label }}">
|
||||||
|
{{ form.probability.label }}
|
||||||
|
<span class="text-danger">*</span>
|
||||||
|
</label>
|
||||||
|
<div class="d-flex align-items-center gap-3">
|
||||||
|
<input type="range"
|
||||||
|
name="{{ form.probability.name }}"
|
||||||
|
id="{{ form.probability.id_for_label }}"
|
||||||
|
min="0"
|
||||||
|
max="100"
|
||||||
|
step="1"
|
||||||
|
value="{{ form.probability.value|default:'50' }}"
|
||||||
|
class="form-control form-range"
|
||||||
|
oninput="updateProbabilityValue(this.value)">
|
||||||
|
<span id="probability-value" class="badge badge-phoenix fs-6 badge-phoenix-primary">
|
||||||
|
{{ form.probability.value|default:'50' }}%
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
{% if form.probability.errors %}
|
||||||
|
<div class="invalid-feedback d-block">{{ form.probability.errors }}</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div class="col-12">
|
||||||
|
<label class="form-label" for="{{ form.expected_revenue.id_for_label }}">
|
||||||
|
{{ form.expected_revenue.label }}
|
||||||
|
</label>
|
||||||
|
<div class="input-group">
|
||||||
|
<span class="input-group-text">SAR</span>
|
||||||
|
{{ form.expected_revenue|add_class:"form-control" }}
|
||||||
|
</div>
|
||||||
|
{% if form.expected_revenue.errors %}
|
||||||
|
<div class="invalid-feedback d-block">{{ form.expected_revenue.errors }}</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% if form.expected_close_date.errors %}
|
|
||||||
<div class="invalid-feedback d-block">{{ form.expected_close_date.errors }}</div>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
</div>
|
||||||
<!-- Form Actions -->
|
{% endcomment %}
|
||||||
<div class="d-flex justify-content-end gap-3">
|
<div class="d-flex justify-content-end gap-3 mt-4">
|
||||||
<button type="reset" class="btn btn-phoenix-danger px-4">
|
<button type="reset" class="btn btn-phoenix-danger px-4">
|
||||||
<span class="fas fa-redo me-1"></span>{% trans "Reset" %}
|
<span class="fas fa-redo me-1"></span>{% trans "Reset" %}
|
||||||
</button>
|
</button>
|
||||||
@ -135,17 +147,20 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-lg-4">
|
<div class="col-lg-4">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-body p-4">
|
<div class="card-body p-4">
|
||||||
<h4 class="mb-3">{% trans "Opportunity Guidelines" %}</h4>
|
<h4 class="mb-3">{% trans "Opportunity Guidelines" %}</h4>
|
||||||
<ul class="nav flex-column gap-2 nav-guide">
|
<ul class="nav flex-column gap-2 nav-guide">
|
||||||
|
{% comment %}
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<div class="d-flex align-items-center">
|
<div class="d-flex align-items-center">
|
||||||
<span class="fas fa-circle text-primary fs-11 me-2"></span>
|
<span class="fas fa-circle text-primary fs-11 me-2"></span>
|
||||||
<span class="text-body-highlight">{% trans "Probability indicates conversion chance" %}</span>
|
<span class="text-body-highlight">{% trans "Probability indicates conversion chance" %}</span>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
|
{% endcomment %}
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<div class="d-flex align-items-center">
|
<div class="d-flex align-items-center">
|
||||||
<span class="fas fa-circle text-warning fs-11 me-2"></span>
|
<span class="fas fa-circle text-warning fs-11 me-2"></span>
|
||||||
@ -164,29 +179,39 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
{% endblock %}
|
||||||
|
{% block customJS %}
|
||||||
|
<script>
|
||||||
function updateProbabilityValue(value) {
|
function updateProbabilityValue(value) {
|
||||||
const amount = document.getElementById('id_amount');
|
const amount = document.getElementById('id_amount');
|
||||||
const expectedRevenue = document.getElementById('id_expected_revenue');
|
const expectedRevenue = document.getElementById('id_expected_revenue');
|
||||||
expectedRevenue.value = (parseFloat(amount.value) * value / 100).toFixed(2);
|
|
||||||
|
// Check if amount and expectedRevenue fields exist before using them
|
||||||
|
if (amount && expectedRevenue) {
|
||||||
|
expectedRevenue.value = (parseFloat(amount.value) * value / 100).toFixed(2);
|
||||||
|
}
|
||||||
|
|
||||||
const badge = document.getElementById('probability-value');
|
const badge = document.getElementById('probability-value');
|
||||||
badge.textContent = value + '%';
|
if (badge) {
|
||||||
|
badge.textContent = value + '%';
|
||||||
// Update badge color based on value
|
// Update badge color based on value
|
||||||
if (value >= 75) {
|
if (value >= 75) {
|
||||||
badge.className = 'badge badge-phoenix fs-6 badge-phoenix-success';
|
badge.className = 'badge badge-phoenix fs-6 badge-phoenix-success';
|
||||||
} else if (value >= 50) {
|
} else if (value >= 50) {
|
||||||
badge.className = 'badge badge-phoenix fs-6 badge-phoenix-warning';
|
badge.className = 'badge badge-phoenix fs-6 badge-phoenix-warning';
|
||||||
} else {
|
} else {
|
||||||
badge.className = 'badge badge-phoenix fs-6 badge-phoenix-danger';
|
badge.className = 'badge badge-phoenix fs-6 badge-phoenix-danger';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize on load
|
// Initialize on load
|
||||||
document.addEventListener('DOMContentLoaded', function() {
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
const rangeInput = document.getElementById('{{ form.probability.id_for_label }}');
|
const rangeInput = document.getElementById('{{ form.probability.id_for_label }}');
|
||||||
updateProbabilityValue(rangeInput.value);
|
// Check if rangeInput exists before calling the function
|
||||||
|
if (rangeInput) {
|
||||||
|
updateProbabilityValue(rangeInput.value);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
@ -262,7 +262,11 @@
|
|||||||
{% if car.marked_price and request.is_accountant or request.is_dealer or request.is_manager %}
|
{% if car.marked_price and request.is_accountant or request.is_dealer or request.is_manager %}
|
||||||
<tr>
|
<tr>
|
||||||
<th>{% trans "Cost Price"|capfirst %}</th>
|
<th>{% trans "Cost Price"|capfirst %}</th>
|
||||||
|
{% if request.is_dealer or request.is_accountant or request.manager%}
|
||||||
<td>{{ car.cost_price|floatformat:2 }}</td>
|
<td>{{ car.cost_price|floatformat:2 }}</td>
|
||||||
|
{% else %}
|
||||||
|
<td class="d-none">{{ car.cost_price|floatformat:2 }}</td>
|
||||||
|
{% endif %}
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>{% trans "Marked Price"|capfirst %}</th>
|
<th>{% trans "Marked Price"|capfirst %}</th>
|
||||||
@ -270,7 +274,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
{% if perms.django_ledger.view_ledgermodel %}
|
{% if perms.django_ledger.change_ledgermodel %}
|
||||||
<td colspan="2">
|
<td colspan="2">
|
||||||
{% if not car.get_transfer %}
|
{% if not car.get_transfer %}
|
||||||
<a href="{% url 'car_finance_update' request.dealer.slug car.slug %}"
|
<a href="{% url 'car_finance_update' request.dealer.slug car.slug %}"
|
||||||
|
|||||||
@ -215,16 +215,16 @@
|
|||||||
name="add_another"
|
name="add_another"
|
||||||
value="true"
|
value="true"
|
||||||
class="btn btn-lg btn-phoenix-success md-me-2">
|
class="btn btn-lg btn-phoenix-success md-me-2">
|
||||||
{% trans "Save and Add Another" %}
|
{% trans "Add to Inventory" %}
|
||||||
</button>
|
</button>
|
||||||
<button type="submit"
|
{% comment %} <button type="submit"
|
||||||
hx-on-before-request="this.setAttribute('disabled','true')"
|
hx-on-before-request="this.setAttribute('disabled','true')"
|
||||||
hx-on-after-request="this.removeAttribute('disabled')"
|
hx-on-after-request="this.removeAttribute('disabled')"
|
||||||
name="go_to_stats"
|
name="go_to_stats"
|
||||||
value="true"
|
value="true"
|
||||||
class="btn btn-lg btn-phoenix-primary">
|
class="btn btn-lg btn-phoenix-primary">
|
||||||
{% trans "Save" %}
|
{% trans "Save and Go to Inventory" %}
|
||||||
</button>
|
</button> {% endcomment %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user