This commit is contained in:
Marwan Alwali 2025-01-03 15:41:35 +03:00
parent 7cfd98528e
commit 761cd2e338
37 changed files with 1557 additions and 1860 deletions

BIN
.DS_Store vendored

Binary file not shown.

BIN
db.sqlite

Binary file not shown.

View File

@ -232,7 +232,7 @@ wmi_manufacturer_mapping = {
"LJS": "Yaxing Coach", "LJS": "Yaxing Coach",
"LJU": "Lotus Geely", "LJU": "Lotus Geely",
"LJX": "JMC Ford", "LJX": "JMC Ford",
"LJ1": "Nio", "LJ1": "JAC",
"LJ8": "Zotye", "LJ8": "Zotye",
"LKC": "Changhe", "LKC": "Changhe",
"LKL": "Higer Bus", "LKL": "Higer Bus",
@ -317,6 +317,7 @@ wmi_manufacturer_mapping = {
"LZ4": "Shangyang", "LZ4": "Shangyang",
"L1N": "XPeng", "L1N": "XPeng",
"L2C": "Chery", "L2C": "Chery",
"L3H": "Victory",
"L4F": "Suzhou Eagle", "L4F": "Suzhou Eagle",
"L5C": "KangDi", "L5C": "KangDi",
"L5K": "Yongkang", "L5K": "Yongkang",
@ -1524,6 +1525,7 @@ def decode_vin_haikalna(vin):
'modelYear': year, 'modelYear': year,
} }
print(data)
return data return data
@ -1533,4 +1535,5 @@ def decode_vin_haikalna(vin):
# Example usage # Example usage
# vin_number = 'LMXA14AF7PZ356070' # vin_number = 'LMXA14AF7PZ356070'
# decoded_vin = decode_vin_haikalna(vin_number) # decoded_vin = decode_vin_haikalna(vin_number)
# print(decoded_vin) # print(decoded_vin)
# LJ11PCBC2P1317660

View File

@ -0,0 +1,101 @@
# Generated by Django 5.1.4 on 2025-01-02 23:56
import django.db.models.deletion
import django.utils.timezone
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('inventory', '0001_initial'),
]
operations = [
migrations.AlterModelOptions(
name='subscriptionplan',
options={'verbose_name': 'Subscription Plan', 'verbose_name_plural': 'Subscription Plans'},
),
migrations.RemoveField(
model_name='subscription',
name='max_users',
),
migrations.AddField(
model_name='opportunity',
name='assigned_at',
field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now, verbose_name='Assigned At'),
preserve_default=False,
),
migrations.AddField(
model_name='opportunity',
name='assigned_to',
field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='deals_assigned', to='inventory.staff'),
preserve_default=False,
),
migrations.AddField(
model_name='subscription',
name='billing_cycle',
field=models.CharField(choices=[('monthly', 'Monthly'), ('annual', 'Annual')], default='monthly', help_text='Billing cycle for the subscription', max_length=10),
),
migrations.AddField(
model_name='subscription',
name='last_payment_date',
field=models.DateField(blank=True, help_text='Date of the last payment made', null=True),
),
migrations.AddField(
model_name='subscription',
name='next_payment_date',
field=models.DateField(blank=True, help_text='Date of the next payment due', null=True),
),
migrations.AddField(
model_name='subscriptionplan',
name='created_at',
field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now),
preserve_default=False,
),
migrations.AddField(
model_name='subscriptionplan',
name='custom_features',
field=models.JSONField(blank=True, help_text='Additional features specific to this plan', null=True),
),
migrations.AddField(
model_name='subscriptionplan',
name='max_inventory_size',
field=models.PositiveIntegerField(default=50, help_text='Maximum number of cars in inventory'),
),
migrations.AddField(
model_name='subscriptionplan',
name='support_level',
field=models.CharField(choices=[('basic', 'Basic Support'), ('priority', 'Priority Support'), ('dedicated', 'Dedicated Support')], default='basic', help_text='Level of support provided', max_length=50),
),
migrations.AddField(
model_name='subscriptionplan',
name='updated_at',
field=models.DateTimeField(auto_now=True),
),
migrations.AlterField(
model_name='subscription',
name='end_date',
field=models.DateField(help_text='Date when the subscription ends'),
),
migrations.AlterField(
model_name='subscription',
name='plan',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='subscriptions', to='inventory.subscriptionplan'),
),
migrations.AlterField(
model_name='subscription',
name='start_date',
field=models.DateField(help_text='Date when the subscription starts'),
),
migrations.AlterField(
model_name='subscriptionplan',
name='max_users',
field=models.PositiveIntegerField(default=1, help_text='Maximum number of users allowed'),
),
migrations.AlterField(
model_name='subscriptionplan',
name='name',
field=models.CharField(help_text='Name of the subscription plan', max_length=100, unique=True),
),
]

View File

@ -1,34 +0,0 @@
# Generated by Django 5.1.4 on 2025-01-01 16:25
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('django_ledger', '0017_alter_accountmodel_unique_together_and_more'),
('inventory', '0021_opportunitylog'),
]
operations = [
migrations.RemoveField(
model_name='opportunitylog',
name='user',
),
migrations.AddField(
model_name='opportunitylog',
name='staff',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='inventory.staff', verbose_name='Staff'),
),
migrations.AlterField(
model_name='carfinance',
name='additional_services',
field=models.ManyToManyField(blank=True, related_name='additional_finances', to='django_ledger.itemmodel'),
),
migrations.AlterField(
model_name='customer',
name='is_lead',
field=models.BooleanField(default=False, verbose_name='Is Lead'),
),
]

View File

@ -502,28 +502,64 @@ class TimestampedModel(models.Model):
class Subscription(models.Model): class Subscription(models.Model):
plan = models.CharField(max_length=255) # e.g. "basic", "premium" plan = models.ForeignKey("SubscriptionPlan", on_delete=models.CASCADE, related_name="subscriptions")
start_date = models.DateField() start_date = models.DateField(help_text="Date when the subscription starts")
end_date = models.DateField() end_date = models.DateField(help_text="Date when the subscription ends")
max_users = models.IntegerField() # maximum number of users per account
users = models.ManyToManyField(User, through='SubscriptionUser') # many-to-many relationship with User model users = models.ManyToManyField(User, through='SubscriptionUser') # many-to-many relationship with User model
is_active = models.BooleanField(default=True) is_active = models.BooleanField(default=True)
billing_cycle = models.CharField(
max_length=10,
choices=[('monthly', 'Monthly'), ('annual', 'Annual')],
default='monthly',
help_text="Billing cycle for the subscription"
)
last_payment_date = models.DateField(null=True, blank=True, help_text="Date of the last payment made")
next_payment_date = models.DateField(null=True, blank=True, help_text="Date of the next payment due")
class Meta:
verbose_name = _("Subscription")
verbose_name_plural = _("Subscriptions")
def __str__(self): def __str__(self):
return self.plan return self.plan.name
@property
def total_subscribers(self):
return self.users.count()
class SubscriptionUser(models.Model): class SubscriptionUser(models.Model):
subscription = models.ForeignKey(Subscription, on_delete=models.CASCADE) subscription = models.ForeignKey(Subscription, on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete=models.CASCADE) user = models.ForeignKey(User, on_delete=models.CASCADE)
class Meta:
verbose_name = _("Subscription User")
verbose_name_plural = _("Subscription Users")
def __str__(self): def __str__(self):
return f"{self.subscription} - {self.user}" return f"{self.subscription} - {self.user}"
class SubscriptionPlan(models.Model): class SubscriptionPlan(models.Model):
name = models.CharField(max_length=255) name = models.CharField(max_length=100, unique=True, help_text=_("Name of the subscription plan"))
description = models.TextField() description = models.TextField()
price = models.DecimalField(max_digits=10, decimal_places=2) price = models.DecimalField(max_digits=10, decimal_places=2)
max_users = models.IntegerField() # maximum number of users per account max_users = models.PositiveIntegerField(help_text=_("Maximum number of users allowed"), default=1)
max_inventory_size = models.PositiveIntegerField(help_text=_("Maximum number of cars in inventory"), default=50)
support_level = models.CharField(
max_length=50,
choices=[('basic', 'Basic Support'), ('priority', 'Priority Support'), ('dedicated', 'Dedicated Support')],
default='basic',
help_text="Level of support provided"
)
custom_features = models.JSONField(blank=True, null=True, help_text=_("Additional features specific to this plan"))
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
verbose_name = _("Subscription Plan")
verbose_name_plural = _("Subscription Plans")
def __str__(self): def __str__(self):
return f"{self.name} - {self.price}" return f"{self.name} - {self.price}"
@ -731,6 +767,8 @@ class Opportunity(models.Model):
created_by = models.ForeignKey(Staff, on_delete=models.SET_NULL, null=True, related_name="deals_created") created_by = models.ForeignKey(Staff, on_delete=models.SET_NULL, null=True, related_name="deals_created")
created_at = models.DateTimeField(auto_now_add=True, verbose_name=_("Created At")) created_at = models.DateTimeField(auto_now_add=True, verbose_name=_("Created At"))
updated_at = models.DateTimeField(auto_now=True, verbose_name=_("Updated At")) updated_at = models.DateTimeField(auto_now=True, verbose_name=_("Updated At"))
assigned_to = models.ForeignKey(Staff, on_delete=models.CASCADE, related_name="deals_assigned")
assigned_at = models.DateTimeField(auto_now_add=True, verbose_name=_("Assigned At"))
class Meta: class Meta:
verbose_name = _("Opportunity") verbose_name = _("Opportunity")
@ -746,6 +784,7 @@ class Notes(models.Model):
created_by = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name="notes_created") created_by = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name="notes_created")
created_at = models.DateTimeField(auto_now_add=True, verbose_name=_("Created At")) created_at = models.DateTimeField(auto_now_add=True, verbose_name=_("Created At"))
updated_at = models.DateTimeField(auto_now=True, verbose_name=_("Updated At")) updated_at = models.DateTimeField(auto_now=True, verbose_name=_("Updated At"))
class Meta: class Meta:
verbose_name = _("Notes") verbose_name = _("Notes")
verbose_name_plural = _("Notes") verbose_name_plural = _("Notes")
@ -1052,4 +1091,6 @@ class UserActivityLog(models.Model):
ordering = ['-timestamp'] ordering = ['-timestamp']
def __str__(self): def __str__(self):
return f"{self.user.email} - {self.action} - {self.timestamp}" return f"{self.user.email} - {self.action} - {self.timestamp}"

View File

@ -53,7 +53,7 @@ def decode_vin(vin):
"model": v.Model, "model": v.Model,
"modelYear": v.ModelYear, "modelYear": v.ModelYear,
} }
print(data)
return data if all([x for x in data.values()]) else None return data if all([x for x in data.values()]) else None
@ -78,7 +78,7 @@ def elm(vin):
"model": response["data"]["model"], "model": response["data"]["model"],
"modelYear": response["data"]["modelYear"], "modelYear": response["data"]["modelYear"],
} }
print(data)
return data if all([x for x in data.values()]) else None return data if all([x for x in data.values()]) else None

View File

@ -105,7 +105,7 @@ def create_ledger_entity(sender, instance, created, **kwargs):
# Create Cash Account # Create Cash Account
entity.create_account( entity.create_account(
coa_model=coa, coa_model=coa,
code="101", code="1101",
role=roles.ASSET_CA_CASH, role=roles.ASSET_CA_CASH,
name=_("Cash"), name=_("Cash"),
balance_type="debit", balance_type="debit",
@ -115,7 +115,7 @@ def create_ledger_entity(sender, instance, created, **kwargs):
# Create Accounts Receivable Account # Create Accounts Receivable Account
entity.create_account( entity.create_account(
coa_model=coa, coa_model=coa,
code="102", code="1102",
role=roles.ASSET_CA_RECEIVABLES, role=roles.ASSET_CA_RECEIVABLES,
name=_("Accounts Receivable"), name=_("Accounts Receivable"),
balance_type="debit", balance_type="debit",
@ -125,7 +125,7 @@ def create_ledger_entity(sender, instance, created, **kwargs):
# Create Inventory Account # Create Inventory Account
entity.create_account( entity.create_account(
coa_model=coa, coa_model=coa,
code="103", code="1103",
role=roles.ASSET_CA_INVENTORY, role=roles.ASSET_CA_INVENTORY,
name=_("Inventory"), name=_("Inventory"),
balance_type="debit", balance_type="debit",
@ -135,7 +135,7 @@ def create_ledger_entity(sender, instance, created, **kwargs):
# Create Accounts Payable Account # Create Accounts Payable Account
entity.create_account( entity.create_account(
coa_model=coa, coa_model=coa,
code="101", code="2101",
role=roles.LIABILITY_CL_ACC_PAYABLE, role=roles.LIABILITY_CL_ACC_PAYABLE,
name=_("Accounts Payable"), name=_("Accounts Payable"),
balance_type="credit", balance_type="credit",
@ -144,7 +144,7 @@ def create_ledger_entity(sender, instance, created, **kwargs):
# Create Equity Account # Create Equity Account
entity.create_account( entity.create_account(
coa_model=coa, coa_model=coa,
code="101", code="3101",
role=roles.EQUITY_CAPITAL, role=roles.EQUITY_CAPITAL,
name=_("Partners Current"), name=_("Partners Current"),
balance_type="credit", balance_type="credit",
@ -154,7 +154,7 @@ def create_ledger_entity(sender, instance, created, **kwargs):
# Create Sales Revenue Account # Create Sales Revenue Account
entity.create_account( entity.create_account(
coa_model=coa, coa_model=coa,
code="101", code="4101",
role=roles.INCOME_OPERATIONAL, role=roles.INCOME_OPERATIONAL,
name=_("Sales Revenue"), name=_("Sales Revenue"),
balance_type="credit", balance_type="credit",
@ -164,7 +164,7 @@ def create_ledger_entity(sender, instance, created, **kwargs):
# Create Cost of Goods Sold Account # Create Cost of Goods Sold Account
entity.create_account( entity.create_account(
coa_model=coa, coa_model=coa,
code="101", code="5101",
role=roles.COGS, role=roles.COGS,
name=_("Cost of Goods Sold"), name=_("Cost of Goods Sold"),
balance_type="debit", balance_type="debit",
@ -174,7 +174,7 @@ def create_ledger_entity(sender, instance, created, **kwargs):
# Create Rent Expense Account # Create Rent Expense Account
entity.create_account( entity.create_account(
coa_model=coa, coa_model=coa,
code="101", code="6101",
role=roles.EXPENSE_OPERATIONAL, role=roles.EXPENSE_OPERATIONAL,
name=_("Rent Expense"), name=_("Rent Expense"),
balance_type="debit", balance_type="debit",

View File

@ -90,7 +90,7 @@ urlpatterns = [
path('sales/quotations/<int:pk>/mark_quotation/', views.mark_quotation, name='mark_quotation'), path('sales/quotations/<int:pk>/mark_quotation/', views.mark_quotation, name='mark_quotation'),
path('sales/quotations/<int:pk>/post_quotation/', views.post_quotation, name='post_quotation'), path('sales/quotations/<int:pk>/post_quotation/', views.post_quotation, name='post_quotation'),
path('sales/quotations/<int:pk>/invoice_detail/', views.invoice_detail, name='invoice_detail'), path('sales/quotations/<int:pk>/invoice_detail/', views.invoice_detail, name='invoice_detail'),
path('subscriptions', views.SubscriptionPlans.as_view(), name='subscriptions'),
#Payment URLs #Payment URLs
# path('sales/quotations/<int:pk>/payment/', views.PaymentCreateView.as_view(), name='payment_create'), # path('sales/quotations/<int:pk>/payment/', views.PaymentCreateView.as_view(), name='payment_create'),
path('sales/quotations/<int:pk>/payment/', views.payment_create, name='payment_create'), path('sales/quotations/<int:pk>/payment/', views.payment_create, name='payment_create'),

View File

@ -1468,14 +1468,14 @@ def payment_invoice(request, pk):
def payment_create(request, pk): def payment_create(request, pk):
quotation = get_object_or_404(models.SaleQuotation, pk=pk) quotation = get_object_or_404(models.SaleQuotation, pk=pk)
dealer = request.user.dealer dealer = get_user_type(request)
if request.method == "POST": if request.method == "POST":
form = forms.PaymentForm(request.POST) form = forms.PaymentForm(request.POST)
if form.is_valid(): if form.is_valid():
form.instance.quotation = quotation form.instance.quotation = quotation
insatnce = form.save() insatnce = form.save()
dealer = request.user.dealer dealer = dealer
entity = dealer.entity entity = dealer.entity
customer = ( customer = (
entity.get_customers() entity.get_customers()
@ -2359,3 +2359,9 @@ class ItemServiceListView(ListView):
def get_queryset(self): def get_queryset(self):
return self.request.entity.get_items_services() return self.request.entity.get_items_services()
class SubscriptionPlans(ListView):
model = models.SubscriptionPlan
template_name = 'subscriptions/subscription_plan.html'
context_object_name = 'plans'

BIN
static/.DS_Store vendored

Binary file not shown.

View File

@ -1,8 +1,9 @@
.color-div { .color-div {
width: 22px; width: 64px;
height: 22px; height: 16px;
border-radius: 50%; padding: 2px 4px;
border: 1px solid #ccc; border-radius: 1px;
border: 1px outset #CBD0DDFd;
text-align: center; text-align: center;
vertical-align: middle; vertical-align: middle;
line-height: 22px; line-height: 22px;

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View File

@ -30,6 +30,7 @@
<link href="https://fonts.googleapis.com/css2?family=Nunito+Sans:wght@300;400;600;700;800;900&amp;display=swap" rel="stylesheet"> <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 href="{% static 'vendors/simplebar/simplebar.min.css' %}" rel="stylesheet">
<link href="{% static 'css/sweetalert2.min.css' %}" rel="stylesheet"> <link href="{% static 'css/sweetalert2.min.css' %}" rel="stylesheet">
<link href="{% static 'vendors/flatpickr/flatpickr.min.css' %}" rel="stylesheet">
<link rel="stylesheet" href="https://unicons.iconscout.com/release/v4.0.8/css/line.css"> <link rel="stylesheet" href="https://unicons.iconscout.com/release/v4.0.8/css/line.css">
<link href="{% static 'css/custom.css' %}" rel="stylesheet"> <link href="{% static 'css/custom.css' %}" rel="stylesheet">
{% if LANGUAGE_CODE == 'en' %} {% if LANGUAGE_CODE == 'en' %}
@ -80,6 +81,7 @@
<script src="{% static 'vendors/mapbox-gl/mapbox-gl.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="https://unpkg.com/@turf/turf@6/turf.min.js"></script>
<script src="{% static 'vendors/swiper/swiper-bundle.min.js' %}"></script> <script src="{% static 'vendors/swiper/swiper-bundle.min.js' %}"></script>
<script src="{% static 'vendors/flatpickr/flatpickr.min.js' %}"></script>
<script> <script>
@ -104,7 +106,7 @@
{% endfor %} {% endfor %}
{% endif %} {% endif %}
const Toast = Swal.mixin({ /*const Toast = Swal.mixin({
toast: true, toast: true,
position: "top-end", position: "top-end",
showConfirmButton: false, showConfirmButton: false,
@ -114,7 +116,7 @@ const Toast = Swal.mixin({
toast.onmouseenter = Swal.stopTimer; toast.onmouseenter = Swal.stopTimer;
toast.onmouseleave = Swal.resumeTimer; toast.onmouseleave = Swal.resumeTimer;
} }
}); });*/
function notify(tag,msg){ function notify(tag,msg){
Toast.fire({ Toast.fire({
icon: tag, icon: tag,

View File

@ -5,7 +5,6 @@
{% block vendors %}<a class="nav-link active">{{ _("Customers")|capfirst }}</a>{% endblock %} {% block vendors %}<a class="nav-link active">{{ _("Customers")|capfirst }}</a>{% endblock %}
{% block content %} {% block content %}
<section class="pt-5 pb-9">
<div class="container"> <div class="container">
<h2 class="mb-4">{{ _("Customers")|capfirst }}</h2> <h2 class="mb-4">{{ _("Customers")|capfirst }}</h2>
<div class="row g-3 justify-content-between mb-4"> <div class="row g-3 justify-content-between mb-4">
@ -186,6 +185,6 @@
{% endif %} {% endif %}
</div> </div>
</div> </div>
</section>
{% endblock %} {% endblock %}

Binary file not shown.

View File

@ -56,7 +56,7 @@
</div> </div>
<div class="text-end"> <div class="text-end">
<h6 class="mb-2 text-body-secondary">{% trans 'Total users'|capfirst %}</h6> <h6 class="mb-2 text-body-secondary">{% trans 'Total users'|capfirst %}</h6>
<h4 class="fs-7 text-body-highlight mb-0">{{ dealer.total_count }} / {{ dealer.get_active_plan.max_users }}</h4> <h4 class="fs-7 text-body-highlight mb-0">{{ dealer.total_count }} / {{ dealer.get_active_plan.plan.max_users }}</h4>
</div> </div>
<div class="text-end"> <div class="text-end">
<h6 class="mb-2 text-body-secondary">{% trans 'Subscription' %}</h6> <h6 class="mb-2 text-body-secondary">{% trans 'Subscription' %}</h6>
@ -123,11 +123,11 @@
<div class="d-flex justify-content-between"> <div class="d-flex justify-content-between">
<div class="mb-5 mb-md-0 mb-lg-5 me-3"> <div class="mb-5 mb-md-0 mb-lg-5 me-3">
<div class="d-sm-flex d-md-block d-lg-flex align-items-center mb-3"> <div class="d-sm-flex d-md-block d-lg-flex align-items-center mb-3">
<h3 class="mb-0">{{ dealer.get_active_plan.plan|capfirst }}</h3><span class="badge ms-sm-3 ms-md-0 ms-lg-3 fs-10 text-bg-warning">{% trans 'most valuable'|upper %}</span> <h3 class="mb-0">{{ dealer.get_active_plan.plan.name|capfirst }}</h3><span class="badge ms-sm-3 ms-md-0 ms-lg-3 fs-10 text-bg-warning">{% trans 'most valuable'|upper %}</span>
</div> </div>
<p class="fs-9 text-body-tertiary">{% trans 'Active until' %}: {{ dealer.get_active_plan.end_date|date}}</p> <p class="fs-9 text-body-tertiary">{% trans 'Active until' %}: {{ dealer.get_active_plan.end_date|date}}</p>
<div class="d-flex align-items-end mb-md-5 mb-lg-0"> <div class="d-flex align-items-end mb-md-5 mb-lg-0">
<h4 class="fw-bolder me-1">{{ dealer.get_plan.price }} {% trans 'SAR' %}</h4> <h4 class="fw-bolder me-1">{{ dealer.get_active_plan.plan.price|floatformat }} {% trans 'SAR' %}</h4>
<h5 class="fs-9 fw-normal text-body-tertiary ms-1">Per month</h5> <h5 class="fs-9 fw-normal text-body-tertiary ms-1">Per month</h5>
</div> </div>
</div><img class="d-dark-none" src="{% static 'images/spot-illustrations/star.png' %}" width="54" height="54" alt="" /><img class="d-light-none" src="{% static 'images/spot-illustrations/star-dark.png' %}" width="54" height="54" alt="" /> </div><img class="d-dark-none" src="{% static 'images/spot-illustrations/star.png' %}" width="54" height="54" alt="" /><img class="d-light-none" src="{% static 'images/spot-illustrations/star-dark.png' %}" width="54" height="54" alt="" />
@ -136,7 +136,7 @@
<div class="col-sm-8 col-md-12"> <div class="col-sm-8 col-md-12">
<div class="d-sm-flex d-md-block d-lg-flex justify-content-end align-items-end h-100"> <div class="d-sm-flex d-md-block d-lg-flex justify-content-end align-items-end h-100">
<div class="list-unstyled mb-0 border-start-sm border-start-md-0 border-start-lg ps-sm-5 ps-md-0 ps-lg-5 border-warning-subtle"> <div class="list-unstyled mb-0 border-start-sm border-start-md-0 border-start-lg ps-sm-5 ps-md-0 ps-lg-5 border-warning-subtle">
<div class="d-flex align-items-center"><span class="uil uil-check-circle text-success me-2"></span><span class="text-body-tertiary fw-semibold">{{ dealer.get_plan.description}}</span></div> <div class="d-flex align-items-center"><span class="uil uil-check-circle text-success me-2"></span><span class="text-body-tertiary fw-semibold">{{ dealer.get_active_plan.plan.description}}</span></div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -4,15 +4,7 @@
{% block content %} {% block content %}
<style>
.color-circle {
width: 32px;
height: 32px;
border-radius: 50px;
border-style: solid;
border-color: #fff;
}
</style>
<!-- Main Container --> <!-- Main Container -->
<div class="container-fluid"> <div class="container-fluid">
@ -196,7 +188,7 @@
<span>{{ color.exterior.get_local_name }}</span> <span>{{ color.exterior.get_local_name }}</span>
</td> </td>
<td class="align-middle"> <td class="align-middle">
<div class="text-end color-circle" style="background-color: rgb({{ color.exterior.rgb }});"></div> <div class="text-end color-div" style="background-color: rgb({{ color.exterior.rgb }});"></div>
</td> </td>
</tr> </tr>
<tr> <tr>
@ -205,10 +197,11 @@
<span>{{ color.interior.get_local_name }}</span> <span>{{ color.interior.get_local_name }}</span>
</td> </td>
<td class="align-middle"> <td class="align-middle">
<div class="text-end color-circle" style="background-color: rgb({{ color.interior.rgb }});"></div> <div class="text-end color-div" style="background-color: rgb({{ color.interior.rgb }});"></div>
</td> </td>
</tr> </tr>
{% endfor %} {% else %} {% endfor %}
{% else %}
<tr> <tr>
<td colspan="2"> <td colspan="2">
{% trans "No colors available for this car." %} {% trans "No colors available for this car." %}

File diff suppressed because it is too large Load Diff

View File

@ -25,8 +25,18 @@
</div> </div>
</div> </div>
<div class="card-body px-lg-5 position-relative"> <div class="card-body px-lg-5 position-relative">
<br><br><h3 class="mb-2">{{ cars.first.id_car_make.get_local_name }}<span class="ms-2 text-body-tertiary fw-semibold">{{ cars.first.id_car_model.get_local_name }}</span></h3> <br>
<div class="row align-items-center g-3 g-sm-5 text-start text-sm-start">
<div class="col-12 col-sm-auto ">
<div class="avatar avatar-3xl avatar-bordered mb-3">
<img class="rounded-circle" src="{{ cars.first.id_car_make.logo.url }}" alt="">
</div>
</div>
<div class="col-12 col-sm-auto flex-1">
<h3 class="mb-2">{{ cars.first.id_car_make.get_local_name }}<span class="ms-2 text-body-tertiary fw-semibold">{{ cars.first.id_car_model.get_local_name }}</span></h3>
<p class="text-body-tertiary fw-semibold">{{ cars.first.id_car_serie.name }}, <span class="fs-10">{{ cars.first.id_car_trim.name }}</span></p> <p class="text-body-tertiary fw-semibold">{{ cars.first.id_car_serie.name }}, <span class="fs-10">{{ cars.first.id_car_trim.name }}</span></p>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
@ -54,9 +64,9 @@
<tr> <tr>
<td class="align-middle white-space-nowrap text-center fw-bold text-body-tertiary"> <td class="align-middle white-space-nowrap text-center fw-bold text-body-tertiary">
{% if car.stock_type == "new" %} {% if car.stock_type == "new" %}
<span class="badge badge-phoenix fs-10 badge-phoenix-success"><span class="badge-label">{{_("New")}}</span><span class="ms-1" data-feather="plus" style="height:13px;width:13px;"></span></span> <span class="badge badge-phoenix badge-phoenix-success"><span class="badge-label">{{_("New")}}</span></span>
{% elif car.status == "used" %} {% elif car.status == "used" %}
<span class="badge badge-phoenix fs-10 badge-phoenix-info"><span class="badge-label">{{_("Used")}}</span><span class="ms-1" data-feather="plus" style="height:13px;width:13px;"></span></span> <span class="badge badge-phoenix badge-phoenix-info"><span class="badge-label">{{_("Used")}}</span></span>
{% endif %} {% endif %}
</td> </td>
<td class="align-middle white-space-nowrap text-start fw-bold">{{ car.vin }}</td> <td class="align-middle white-space-nowrap text-start fw-bold">{{ car.vin }}</td>
@ -64,12 +74,12 @@
{% if car.colors.exists %} {% if car.colors.exists %}
<td class="align-middle white-space-nowrap text-body fs-9 text-start"> <td class="align-middle white-space-nowrap text-body fs-9 text-start">
<div class="d-flex flex-column align-items-center"> <div class="d-flex flex-column align-items-center">
<span class="color-div" style="background-color: rgb({{ car.colors.first.exterior.rgb }});" title="{{ car.colors.first.exterior.get_local_name }}"></span><span>{{ car.colors.first.exterior.get_local_name }}</span> <span class="color-div" style="background: linear-gradient(90deg, rgba({{ car.colors.first.exterior.rgb }},1) 40%, rgba({{ car.colors.first.exterior.rgb }},0.35) 100%);" title="{{ car.colors.first.exterior.get_local_name }}"></span><span>{{ car.colors.first.exterior.get_local_name }}</span>
</div> </div>
</td> </td>
<td class="align-middle white-space-nowrap text-body fs-9 text-start"> <td class="align-middle white-space-nowrap text-body fs-9 text-start">
<div class="d-flex flex-column align-items-center"> <div class="d-flex flex-column align-items-center">
<span class="color-div" style="background-color: rgb({{ car.colors.first.interior.rgb }});" title="{{ car.colors.first.interior.get_local_name }}"></span><span>{{ car.colors.first.interior.get_local_name }}</span> <span class="color-div" style="background: linear-gradient(90deg, rgba({{ car.colors.first.interior.rgb }},1) 40%, rgba({{ car.colors.first.interior.rgb }},0.35) 100%);" title="{{ car.colors.first.interior.get_local_name }}"></span><span>{{ car.colors.first.interior.get_local_name }}</span>
</div> </div>
</td> </td>
{% else %} {% else %}

View File

@ -1 +0,0 @@
{% load static %}

View File

@ -0,0 +1,146 @@
{% extends 'base.html' %}
{% load i18n %}
{% load static %}
{% block content %}
<div class="container">
<h2 class="mb-7">Pricing</h2>
<div class="row">
<div class="col-xl-12 col-xxl-9 mb-1">
<div class="tabs mb-7">
<div class="tab-content" id="pills-tabContent">
<div class="tab-pane fade show active" id="pills-month" role="tabpanel" aria-labelledby="pills-month-tab">
<div class="row g-3">
{% for plan in plans %}
<div class="col-12 col-md-6 col-lg-12 col-xl-6">
<div class="h-100">
<input class="card-form-check-input d-none"
type="radio"
name="pricingMonthly"
id="subscription_{{ plan.id }}"
checked="checked" />
<div class="position-relative h-100">
<label class="stretched-link" for="subscription_{{ plan.id }}"></label>
<div class="card h-100 overflow-hidden cursor-pointer">
<div class="bg-holder d-dark-none"
style="background-image:url({% static 'images/bg/8.png' %});background-position:left bottom;background-size:auto;bottom:-1px;">
</div>
<div class="bg-holder d-light-none"
style="background-image:url({% static 'images/bg/8-dark.png' %});background-position:left bottom;background-size:auto;bottom:-1px;">
</div>
<div class="card-body d-flex flex-column justify-content-between position-relative">
<div class="d-flex justify-content-between">
<div class="mb-5 mb-md-0 mb-lg-5 me-3">
<div class="d-sm-flex align-items-center mb-3">
<h3 class="mb-0">{{ plan.name }}</h3>
</div>
<p class="fs-9 text-body-tertiary">For individuals who are interested
<br> in giving it a shot first.
</p>
<div class="d-flex align-items-end mb-md-5 mb-lg-0">
<h4 class="fw-bolder me-1">{{ plan.price|floatformat }} {% trans 'SAR' %}</h4>
<h5 class="fs-9 fw-normal text-body-tertiary ms-1">{{ _("Per month")}}</h5>
</div>
</div>
<img class="d-dark-none opacity-50"
src="{% static 'images/spot-illustrations/dark_21.png' %}"
width="auto"
height="120"
alt="" />
<img class="d-light-none opacity-50"
src="{% static 'images/spot-illustrations/21.png' %}"
width="auto"
height="120"
alt="" />
</div>
<div class="row flex-1 justify-content-end">
<div class="col-sm-8 col-md-12">
<div class="d-sm-flex d-md-block d-lg-flex justify-content-end align-items-end h-100">
<ul class="list-unstyled mb-0 border-start-sm border-start-md-0 border-start-lg ps-sm-5 ps-md-0 ps-lg-5 border-translucent">
<li class="d-flex align-items-center">
<span class="uil uil-check-circle text-success me-2"></span>
<span class="text-body-tertiary fw-semibold">{{ _("Max Users")}}: {{ plan.max_users }}</span>
</li>
<li class="d-flex align-items-center">
<span class="uil uil-check-circle text-success me-2"></span>
<span class="text-body-tertiary fw-semibold">{{ _("Inventory Size")}}: {{ plan.max_inventory_size }}</span>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
</div>
</div>
<div>
<div class="d-grid d-sm-flex">
<button class="btn btn-lg btn-phoenix-primary d-sm-flex align-items-center mb-3 mb-sm-0 me-sm-3 px-sm-8">{{ _("Subscribe") }}
{{ _("Now") }}<span class="fas fa-angle-right ms-1"></span>
</button>
</div>
</div>
</div>
<div class="col col-xxl-3 mt-8">
<h3 class="fw-semibold mb-3">Included in our all packages</h3>
<div class="row">
<div class="col-md-6 col-xxl-12">
<div class="rounded-3 py-2 px-3 bg-body-emphasis d-flex align-items-center mb-3"><span class="fas fa-check text-primary me-3 fs-9"></span>
<p class="mb-0 text-body-secondary">Timeline</p>
</div>
</div>
<div class="col-md-6 col-xxl-12">
<div class="rounded-3 py-2 px-3 bg-body-emphasis d-flex align-items-center mb-3">
<span class="fas fa-check text-primary me-3 fs-9"></span>
<p class="mb-0 text-body-secondary">Advanced Search</p>
</div>
</div>
<div class="col-md-6 col-xxl-12">
<div class="rounded-3 py-2 px-3 bg-body-emphasis d-flex align-items-center mb-3">
<span class="fas fa-check text-primary me-3 fs-9"></span>
<p class="mb-0 text-body-secondary">Custom fields</p>
<span class="badge badge-phoenix badge-phoenix-primary ms-2">New</span>
</div>
</div>
<div class="col-md-6 col-xxl-12">
<div class="rounded-3 py-2 px-3 bg-body-emphasis d-flex align-items-center mb-3">
<span class="fas fa-check text-primary me-3 fs-9"></span>
<p class="mb-0 text-body-secondary">Task dependencies</p>
</div>
</div>
<div class="col-md-6 col-xxl-12">
<div class="rounded-3 py-2 px-3 bg-body-emphasis d-flex align-items-center mb-3">
<span class="fas fa-check text-primary me-3 fs-9"></span>
<p class="mb-0 text-body-secondary">20TB of additional space </p>
</div>
</div>
<div class="col-md-6 col-xxl-12">
<div class="rounded-3 py-2 px-3 bg-body-emphasis d-flex align-items-center mb-3">
<span class="fas fa-check text-primary me-3 fs-9"></span>
<p class="mb-0 text-body-secondary">Bandwidth of Upto 1 Gbps</p>
</div>
</div>
<div class="col-md-6 col-xxl-12">
<div class="rounded-3 py-2 px-3 bg-body-emphasis d-flex align-items-center mb-3">
<span class="fas fa-check text-primary me-3 fs-9"></span>
<p class="mb-0 text-body-secondary">Private teams & projects</p>
</div>
</div>
<div class="col-md-6 col-xxl-12">
<div class="rounded-3 py-2 px-3 bg-body-emphasis d-flex align-items-center mb-3">
<span class="fas fa-check text-primary me-3 fs-9"></span>
<p class="mb-0 text-body-secondary">Customer Support and Training</p>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock content %}

View File

@ -1,137 +1,538 @@
<!DOCTYPE html> <div class="brand-container">
<html lang="en"> <div class="brand-title"><h1>All Brands</h1></div>
<head> <div class="brand-list-box">
<meta charset="UTF-8"> <div class="brand-grid-box">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <a href="/en-sa/changan/" class="ka" point-cid="6" point-crgn="pinpaiquyu" point-cpos="1" point-dtype="brand">
<title>Car Inventory</title> <div class="brand-item">
<!-- Bootstrap CSS --> <div>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"> <img
<!-- Font Awesome for Icons --> class="brand-logo lazyload"
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css" rel="stylesheet"> alt="Changan"
<!-- Custom CSS --> src=""
<style> data-original=""
.color-circle { data-webp="https://global-img.bitauto.com/usercenter/car/20240703/107/w360_yichecar_997687110728096.png.webp"
width: 22px; data-errimg="https://global-img.bitauto.com/yc-static/yc-pc/haiwai-pc/assets/images/loaded_error_icon.png"
height: 22px; onerror="loadImageError(this)"
border-radius: 50%; />
border: 1px solid #ccc; <div class="brand-name">Changan</div>
display: inline-block; </div>
}
.table-hover tbody tr:hover {
background-color: #f8f9fa;
}
.badge {
font-size: 0.9rem;
}
.table-responsive {
overflow-x: auto;
}
.table thead th {
background-color: #007bff;
color: white;
}
.table tbody td {
vertical-align: middle;
}
</style>
</head>
<body>
<div class="container my-5">
<h1 class="text-center mb-4">Car Inventory</h1>
<!-- Search and Filter Section -->
<div class="row mb-4 g-3">
<div class="col-md-6">
<div class="input-group">
<span class="input-group-text"><i class="fas fa-search"></i></span>
<input type="text" class="form-control" placeholder="Search by VIN, Make, or Model">
</div>
</div>
<div class="col-md-3">
<select class="form-select">
<option>All Years</option>
<option>2023</option>
<option>2022</option>
<option>2021</option>
</select>
</div>
<div class="col-md-3">
<button class="btn btn-primary w-100"><i class="fas fa-filter"></i> Filter</button>
</div>
</div> </div>
</a>
<!-- Car Listing Table --> <a href="/en-sa/haval/" class="ka" point-cid="20" point-crgn="pinpaiquyu" point-cpos="2" point-dtype="brand">
<div class="table-responsive"> <div class="brand-item">
<table class="table table-hover table-bordered"> <div>
<thead> <img
<tr> class="brand-logo lazyload"
<th>#</th> alt="Haval"
<th>Image</th> src="https://global-img.bitauto.com/usercenter/car/20240703/44/w360_yichecar_997687404468507.png.webp"
<th>Make & Model</th> data-original="https://global-img.bitauto.com/usercenter/car/20240703/44/w360_yichecar_997687404468507.png"
<th>Year</th> data-webp="https://global-img.bitauto.com/usercenter/car/20240703/44/w360_yichecar_997687404468507.png.webp"
<th>VIN</th> data-errimg="https://global-img.bitauto.com/yc-static/yc-pc/haiwai-pc/assets/images/loaded_error_icon.png"
<th>Exterior Color</th> onerror="loadImageError(this)"
<th>Interior Color</th> />
<th>Location</th> <div class="brand-name">Haval</div>
<th>Status</th> </div>
<th>Actions</th>
</tr>
</thead>
<tbody>
<!-- Example Row -->
<tr>
<td>1</td>
<td><img src="https://via.placeholder.com/100" alt="Car Image" class="img-thumbnail" style="width: 100px;"></td>
<td>Toyota Camry</td>
<td>2023</td>
<td>1HGCM82633A123456</td>
<td><span class="color-circle" style="background-color: #0000ff;"></span> Blue</td>
<td><span class="color-circle" style="background-color: #ffffff;"></span> White</td>
<td>Main Showroom</td>
<td><span class="badge bg-success">Available</span></td>
<td>
<a href="#" class="btn btn-sm btn-outline-primary"><i class="fas fa-eye"></i> View</a>
<a href="#" class="btn btn-sm btn-outline-warning"><i class="fas fa-edit"></i> Edit</a>
</td>
</tr>
<!-- Add more rows here -->
<tr>
<td>2</td>
<td><img src="https://via.placeholder.com/100" alt="Car Image" class="img-thumbnail" style="width: 100px;"></td>
<td>Honda Accord</td>
<td>2022</td>
<td>1HGCM82633A654321</td>
<td><span class="color-circle" style="background-color: #ff0000;"></span> Red</td>
<td><span class="color-circle" style="background-color: #000000;"></span> Black</td>
<td>Downtown Showroom</td>
<td><span class="badge bg-warning">Reserved</span></td>
<td>
<a href="#" class="btn btn-sm btn-outline-primary"><i class="fas fa-eye"></i> View</a>
<a href="#" class="btn btn-sm btn-outline-warning"><i class="fas fa-edit"></i> Edit</a>
</td>
</tr>
</tbody>
</table>
</div> </div>
</a>
<!-- Pagination --> <a href="/en-sa/geely/" class="ka" point-cid="8" point-crgn="pinpaiquyu" point-cpos="3" point-dtype="brand">
<nav aria-label="Page navigation" class="mt-4"> <div class="brand-item">
<ul class="pagination justify-content-center"> <div>
<li class="page-item disabled"> <img
<a class="page-link" href="#" tabindex="-1" aria-disabled="true"><i class="fas fa-chevron-left"></i></a> class="brand-logo lazyload"
</li> alt="Geely"
<li class="page-item active"><a class="page-link" href="#">1</a></li> src="https://global-img.bitauto.com/usercenter/car/20240703/924/w360_yichecar_997687792422555.png.webp"
<li class="page-item"><a class="page-link" href="#">2</a></li> data-original="https://global-img.bitauto.com/usercenter/car/20240703/924/w360_yichecar_997687792422555.png"
<li class="page-item"><a class="page-link" href="#">3</a></li> data-webp="https://global-img.bitauto.com/usercenter/car/20240703/924/w360_yichecar_997687792422555.png.webp"
<li class="page-item"> data-errimg="https://global-img.bitauto.com/yc-static/yc-pc/haiwai-pc/assets/images/loaded_error_icon.png"
<a class="page-link" href="#"><i class="fas fa-chevron-right"></i></a> onerror="loadImageError(this)"
</li> />
</ul> <div class="brand-name">Geely</div>
</nav> </div>
</div>
</a>
<a href="/en-sa/mg/" class="ka" point-cid="11" point-crgn="pinpaiquyu" point-cpos="4" point-dtype="brand">
<div class="brand-item">
<div>
<img
class="brand-logo lazyload"
alt="MG"
src="https://global-img.bitauto.com/usercenter/car/20240703/688/w360_yichecar_997688268839543.png.webp"
data-original="https://global-img.bitauto.com/usercenter/car/20240703/688/w360_yichecar_997688268839543.png"
data-webp="https://global-img.bitauto.com/usercenter/car/20240703/688/w360_yichecar_997688268839543.png.webp"
data-errimg="https://global-img.bitauto.com/yc-static/yc-pc/haiwai-pc/assets/images/loaded_error_icon.png"
onerror="loadImageError(this)"
/>
<div class="brand-name">MG</div>
</div>
</div>
</a>
<a href="/en-sa/jetour/" class="ka" point-cid="13" point-crgn="pinpaiquyu" point-cpos="5" point-dtype="brand">
<div class="brand-item">
<div>
<img
class="brand-logo lazyload"
alt="Jetour"
src="https://global-img.bitauto.com/usercenter/car/20240703/194/w360_yichecar_997687619404924.png.webp"
data-original="https://global-img.bitauto.com/usercenter/car/20240703/194/w360_yichecar_997687619404924.png"
data-webp="https://global-img.bitauto.com/usercenter/car/20240703/194/w360_yichecar_997687619404924.png.webp"
data-errimg="https://global-img.bitauto.com/yc-static/yc-pc/haiwai-pc/assets/images/loaded_error_icon.png"
onerror="loadImageError(this)"
/>
<div class="brand-name">Jetour</div>
</div>
</div>
</a>
<a href="/en-sa/gac/" class="ka" point-cid="7" point-crgn="pinpaiquyu" point-cpos="6" point-dtype="brand">
<div class="brand-item">
<div>
<img
class="brand-logo lazyload"
alt="GAC"
src="https://global-img.bitauto.com/usercenter/car/20240703/162/w360_yichecar_997687216275363.png.webp"
data-original="https://global-img.bitauto.com/usercenter/car/20240703/162/w360_yichecar_997687216275363.png"
data-webp="https://global-img.bitauto.com/usercenter/car/20240703/162/w360_yichecar_997687216275363.png.webp"
data-errimg="https://global-img.bitauto.com/yc-static/yc-pc/haiwai-pc/assets/images/loaded_error_icon.png"
onerror="loadImageError(this)"
/>
<div class="brand-name">GAC</div>
</div>
</div>
</a>
<a href="/en-sa/yusheng/" class="ka" point-cid="33" point-crgn="pinpaiquyu" point-cpos="7" point-dtype="brand">
<div class="brand-item">
<div>
<img
class="brand-logo lazyload"
alt="Yusheng"
src="https://global-img.bitauto.com/usercenter/car/20240807/299/w360_yichecar_299640729984747.png.webp"
data-original="https://global-img.bitauto.com/usercenter/car/20240807/299/w360_yichecar_299640729984747.png"
data-webp="https://global-img.bitauto.com/usercenter/car/20240807/299/w360_yichecar_299640729984747.png.webp"
data-errimg="https://global-img.bitauto.com/yc-static/yc-pc/haiwai-pc/assets/images/loaded_error_icon.png"
onerror="loadImageError(this)"
/>
<div class="brand-name">Yusheng</div>
</div>
</div>
</a>
<a href="/en-sa/forthing/" class="ka" point-cid="4" point-crgn="pinpaiquyu" point-cpos="8" point-dtype="brand">
<div class="brand-item">
<div>
<img
class="brand-logo lazyload"
alt="Forthing"
src="https://global-img.bitauto.com/usercenter/car/20240703/409/w360_yichecar_997687040947420.png.webp"
data-original="https://global-img.bitauto.com/usercenter/car/20240703/409/w360_yichecar_997687040947420.png"
data-webp="https://global-img.bitauto.com/usercenter/car/20240703/409/w360_yichecar_997687040947420.png.webp"
data-errimg="https://global-img.bitauto.com/yc-static/yc-pc/haiwai-pc/assets/images/loaded_error_icon.png"
onerror="loadImageError(this)"
/>
<div class="brand-name">Forthing</div>
</div>
</div>
</a>
<a href="/en-sa/baic/" class="ka" point-cid="1" point-crgn="pinpaiquyu" point-cpos="9" point-dtype="brand">
<div class="brand-item">
<div>
<img
class="brand-logo lazyload"
alt="BAIC"
src="https://global-img.bitauto.com/usercenter/car/20241030/63/w360_yichecar_024988706367037.png.webp"
data-original="https://global-img.bitauto.com/usercenter/car/20241030/63/w360_yichecar_024988706367037.png"
data-webp="https://global-img.bitauto.com/usercenter/car/20241030/63/w360_yichecar_024988706367037.png.webp"
data-errimg="https://global-img.bitauto.com/yc-static/yc-pc/haiwai-pc/assets/images/loaded_error_icon.png"
onerror="loadImageError(this)"
/>
<div class="brand-name">BAIC</div>
</div>
</div>
</a>
<a href="/en-sa/chery/" class="ka" point-cid="12" point-crgn="pinpaiquyu" point-cpos="10" point-dtype="brand">
<div class="brand-item">
<div>
<img
class="brand-logo lazyload"
alt="Chery"
src="https://global-img.bitauto.com/usercenter/car/20240703/868/w360_yichecar_997687986893381.png.webp"
data-original="https://global-img.bitauto.com/usercenter/car/20240703/868/w360_yichecar_997687986893381.png"
data-webp="https://global-img.bitauto.com/usercenter/car/20240703/868/w360_yichecar_997687986893381.png.webp"
data-errimg="https://global-img.bitauto.com/yc-static/yc-pc/haiwai-pc/assets/images/loaded_error_icon.png"
onerror="loadImageError(this)"
/>
<div class="brand-name">Chery</div>
</div>
</div>
</a>
<a href="/en-sa/byd/" class="ka" point-cid="2" point-crgn="pinpaiquyu" point-cpos="11" point-dtype="brand">
<div class="brand-item">
<div>
<img
class="brand-logo lazyload"
alt="BYD"
src="https://global-img.bitauto.com/usercenter/car/20240703/505/w360_yichecar_997687250517674.png.webp"
data-original="https://global-img.bitauto.com/usercenter/car/20240703/505/w360_yichecar_997687250517674.png"
data-webp="https://global-img.bitauto.com/usercenter/car/20240703/505/w360_yichecar_997687250517674.png.webp"
data-errimg="https://global-img.bitauto.com/yc-static/yc-pc/haiwai-pc/assets/images/loaded_error_icon.png"
onerror="loadImageError(this)"
/>
<div class="brand-name">BYD</div>
</div>
</div>
</a>
<a href="/en-sa/dongfeng/" class="ka" point-cid="3" point-crgn="pinpaiquyu" point-cpos="12" point-dtype="brand">
<div class="brand-item">
<div>
<img
class="brand-logo lazyload"
alt="Dongfeng"
src="https://global-img.bitauto.com/usercenter/car/20240703/681/w360_yichecar_997687168186887.png.webp"
data-original="https://global-img.bitauto.com/usercenter/car/20240703/681/w360_yichecar_997687168186887.png"
data-webp="https://global-img.bitauto.com/usercenter/car/20240703/681/w360_yichecar_997687168186887.png.webp"
data-errimg="https://global-img.bitauto.com/yc-static/yc-pc/haiwai-pc/assets/images/loaded_error_icon.png"
onerror="loadImageError(this)"
/>
<div class="brand-name">Dongfeng</div>
</div>
</div>
</a>
<a href="/en-sa/bestune/" class="ka" point-cid="17" point-crgn="pinpaiquyu" point-cpos="13" point-dtype="brand">
<div class="brand-item">
<div>
<img
class="brand-logo lazyload"
alt="Bestune"
src="https://global-img.bitauto.com/usercenter/car/20240703/546/w360_yichecar_997688154683139.png.webp"
data-original="https://global-img.bitauto.com/usercenter/car/20240703/546/w360_yichecar_997688154683139.png"
data-webp="https://global-img.bitauto.com/usercenter/car/20240703/546/w360_yichecar_997688154683139.png.webp"
data-errimg="https://global-img.bitauto.com/yc-static/yc-pc/haiwai-pc/assets/images/loaded_error_icon.png"
onerror="loadImageError(this)"
/>
<div class="brand-name">Bestune</div>
</div>
</div>
</a>
<a href="/en-sa/maxus/" class="ka" point-cid="14" point-crgn="pinpaiquyu" point-cpos="14" point-dtype="brand">
<div class="brand-item">
<div>
<img
class="brand-logo lazyload"
alt="Maxus"
src="https://global-img.bitauto.com/usercenter/car/20240710/201/w360_yichecar_057920920137249.png.webp"
data-original="https://global-img.bitauto.com/usercenter/car/20240710/201/w360_yichecar_057920920137249.png"
data-webp="https://global-img.bitauto.com/usercenter/car/20240710/201/w360_yichecar_057920920137249.png.webp"
data-errimg="https://global-img.bitauto.com/yc-static/yc-pc/haiwai-pc/assets/images/loaded_error_icon.png"
onerror="loadImageError(this)"
/>
<div class="brand-name">Maxus</div>
</div>
</div>
</a>
<a href="/en-sa/baojun/" class="ka" point-cid="32" point-crgn="pinpaiquyu" point-cpos="15" point-dtype="brand">
<div class="brand-item">
<div>
<img
class="brand-logo lazyload"
alt="Baojun"
src="https://global-img.bitauto.com/usercenter/car/20240703/818/w360_yichecar_997687281803661.png.webp"
data-original="https://global-img.bitauto.com/usercenter/car/20240703/818/w360_yichecar_997687281803661.png"
data-webp="https://global-img.bitauto.com/usercenter/car/20240703/818/w360_yichecar_997687281803661.png.webp"
data-errimg="https://global-img.bitauto.com/yc-static/yc-pc/haiwai-pc/assets/images/loaded_error_icon.png"
onerror="loadImageError(this)"
/>
<div class="brand-name">Baojun</div>
</div>
</div>
</a>
<a href="/en-sa/neta/" class="ka" point-cid="24" point-crgn="pinpaiquyu" point-cpos="16" point-dtype="brand">
<div class="brand-item">
<div>
<img
class="brand-logo lazyload"
alt="Neta"
src="https://global-img.bitauto.com/usercenter/car/20240703/529/w360_yichecar_997687752999461.png.webp"
data-original="https://global-img.bitauto.com/usercenter/car/20240703/529/w360_yichecar_997687752999461.png"
data-webp="https://global-img.bitauto.com/usercenter/car/20240703/529/w360_yichecar_997687752999461.png.webp"
data-errimg="https://global-img.bitauto.com/yc-static/yc-pc/haiwai-pc/assets/images/loaded_error_icon.png"
onerror="loadImageError(this)"
/>
<div class="brand-name">Neta</div>
</div>
</div>
</a>
<a href="/en-sa/tank/" class="ka" point-cid="22" point-crgn="pinpaiquyu" point-cpos="17" point-dtype="brand">
<div class="brand-item">
<div>
<img
class="brand-logo lazyload"
alt="Tank"
src="https://global-img.bitauto.com/usercenter/car/20240722/823/w360_yichecar_163707482354378.png.webp"
data-original="https://global-img.bitauto.com/usercenter/car/20240722/823/w360_yichecar_163707482354378.png"
data-webp="https://global-img.bitauto.com/usercenter/car/20240722/823/w360_yichecar_163707482354378.png.webp"
data-errimg="https://global-img.bitauto.com/yc-static/yc-pc/haiwai-pc/assets/images/loaded_error_icon.png"
onerror="loadImageError(this)"
/>
<div class="brand-name">Tank</div>
</div>
</div>
</a>
<a href="/en-sa/xpeng/" class="ka" point-cid="30" point-crgn="pinpaiquyu" point-cpos="18" point-dtype="brand">
<div class="brand-item">
<div>
<img
class="brand-logo lazyload"
alt="XPeng"
src="https://global-img.bitauto.com/usercenter/car/20240703/485/w360_yichecar_997687648521261.png.webp"
data-original="https://global-img.bitauto.com/usercenter/car/20240703/485/w360_yichecar_997687648521261.png"
data-webp="https://global-img.bitauto.com/usercenter/car/20240703/485/w360_yichecar_997687648521261.png.webp"
data-errimg="https://global-img.bitauto.com/yc-static/yc-pc/haiwai-pc/assets/images/loaded_error_icon.png"
onerror="loadImageError(this)"
/>
<div class="brand-name">XPeng</div>
</div>
</div>
</a>
<a href="/en-sa/hongqi/" class="ka" point-cid="19" point-crgn="pinpaiquyu" point-cpos="19" point-dtype="brand">
<div class="brand-item">
<div>
<img
class="brand-logo lazyload"
alt="Hongqi"
src="https://global-img.bitauto.com/usercenter/car/20240703/92/w360_yichecar_997688109274189.png.webp"
data-original="https://global-img.bitauto.com/usercenter/car/20240703/92/w360_yichecar_997688109274189.png"
data-webp="https://global-img.bitauto.com/usercenter/car/20240703/92/w360_yichecar_997688109274189.png.webp"
data-errimg="https://global-img.bitauto.com/yc-static/yc-pc/haiwai-pc/assets/images/loaded_error_icon.png"
onerror="loadImageError(this)"
/>
<div class="brand-name">Hongqi</div>
</div>
</div>
</a>
<a href="/en-sa/gwm/" class="ka" point-cid="5" point-crgn="pinpaiquyu" point-cpos="20" point-dtype="brand">
<div class="brand-item">
<div>
<img
class="brand-logo lazyload"
alt="GWM"
src="https://global-img.bitauto.com/usercenter/car/20240703/420/w360_yichecar_997687442036944.png.webp"
data-original="https://global-img.bitauto.com/usercenter/car/20240703/420/w360_yichecar_997687442036944.png"
data-webp="https://global-img.bitauto.com/usercenter/car/20240703/420/w360_yichecar_997687442036944.png.webp"
data-errimg="https://global-img.bitauto.com/yc-static/yc-pc/haiwai-pc/assets/images/loaded_error_icon.png"
onerror="loadImageError(this)"
/>
<div class="brand-name">GWM</div>
</div>
</div>
</a>
<a href="/en-sa/lynk-co/" class="ka" point-cid="9" point-crgn="pinpaiquyu" point-cpos="21" point-dtype="brand">
<div class="brand-item">
<div>
<img
class="brand-logo lazyload"
alt="Lynk &amp; Co"
src="https://global-img.bitauto.com/usercenter/car/20240704/973/w360_yichecar_005902597375718.png.webp"
data-original="https://global-img.bitauto.com/usercenter/car/20240704/973/w360_yichecar_005902597375718.png"
data-webp="https://global-img.bitauto.com/usercenter/car/20240704/973/w360_yichecar_005902597375718.png.webp"
data-errimg="https://global-img.bitauto.com/yc-static/yc-pc/haiwai-pc/assets/images/loaded_error_icon.png"
onerror="loadImageError(this)"
/>
<div class="brand-name">Lynk &amp; Co</div>
</div>
</div>
</a>
<a href="/en-sa/jac/" class="ka" point-cid="10" point-crgn="pinpaiquyu" point-cpos="22" point-dtype="brand">
<div class="brand-item">
<div>
<img
class="brand-logo lazyload"
alt="JAC"
src="https://global-img.bitauto.com/usercenter/car/20240703/316/w360_yichecar_997688231624563.png.webp"
data-original="https://global-img.bitauto.com/usercenter/car/20240703/316/w360_yichecar_997688231624563.png"
data-webp="https://global-img.bitauto.com/usercenter/car/20240703/316/w360_yichecar_997688231624563.png.webp"
data-errimg="https://global-img.bitauto.com/yc-static/yc-pc/haiwai-pc/assets/images/loaded_error_icon.png"
onerror="loadImageError(this)"
/>
<div class="brand-name">JAC</div>
</div>
</div>
</a>
<a href="/en-sa/seres/" class="ka" point-cid="15" point-crgn="pinpaiquyu" point-cpos="23" point-dtype="brand">
<div class="brand-item">
<div>
<img
class="brand-logo lazyload"
alt="Seres"
src="https://global-img.bitauto.com/usercenter/car/20240703/836/w360_yichecar_997687683665359.png.webp"
data-original="https://global-img.bitauto.com/usercenter/car/20240703/836/w360_yichecar_997687683665359.png"
data-webp="https://global-img.bitauto.com/usercenter/car/20240703/836/w360_yichecar_997687683665359.png.webp"
data-errimg="https://global-img.bitauto.com/yc-static/yc-pc/haiwai-pc/assets/images/loaded_error_icon.png"
onerror="loadImageError(this)"
/>
<div class="brand-name">Seres</div>
</div>
</div>
</a>
<a href="/en-sa/jmc/" class="ka" point-cid="16" point-crgn="pinpaiquyu" point-cpos="24" point-dtype="brand">
<div class="brand-item">
<div>
<img
class="brand-logo lazyload"
alt="JMC"
src="https://global-img.bitauto.com/usercenter/car/20240703/647/w360_yichecar_000268964703865.png.webp"
data-original="https://global-img.bitauto.com/usercenter/car/20240703/647/w360_yichecar_000268964703865.png"
data-webp="https://global-img.bitauto.com/usercenter/car/20240703/647/w360_yichecar_000268964703865.png.webp"
data-errimg="https://global-img.bitauto.com/yc-static/yc-pc/haiwai-pc/assets/images/loaded_error_icon.png"
onerror="loadImageError(this)"
/>
<div class="brand-name">JMC</div>
</div>
</div>
</a>
<a href="/en-sa/vgv/" class="ka" point-cid="18" point-crgn="pinpaiquyu" point-cpos="25" point-dtype="brand">
<div class="brand-item">
<div>
<img
class="brand-logo lazyload"
alt="VGV"
src="https://global-img.bitauto.com/usercenter/car/20240703/216/w360_yichecar_997687821602652.png.webp"
data-original="https://global-img.bitauto.com/usercenter/car/20240703/216/w360_yichecar_997687821602652.png"
data-webp="https://global-img.bitauto.com/usercenter/car/20240703/216/w360_yichecar_997687821602652.png.webp"
data-errimg="https://global-img.bitauto.com/yc-static/yc-pc/haiwai-pc/assets/images/loaded_error_icon.png"
onerror="loadImageError(this)"
/>
<div class="brand-name">VGV</div>
</div>
</div>
</a>
<a href="/en-sa/skywell/" class="ka" point-cid="21" point-crgn="pinpaiquyu" point-cpos="26" point-dtype="brand">
<div class="brand-item">
<div>
<img
class="brand-logo lazyload"
alt="Skywell"
src="https://global-img.bitauto.com/usercenter/car/20240703/195/w360_yichecar_997687919565147.png.webp"
data-original="https://global-img.bitauto.com/usercenter/car/20240703/195/w360_yichecar_997687919565147.png"
data-webp="https://global-img.bitauto.com/usercenter/car/20240703/195/w360_yichecar_997687919565147.png.webp"
data-errimg="https://global-img.bitauto.com/yc-static/yc-pc/haiwai-pc/assets/images/loaded_error_icon.png"
onerror="loadImageError(this)"
/>
<div class="brand-name">Skywell</div>
</div>
</div>
</a>
<a href="/en-sa/dayun/" class="ka" point-cid="23" point-crgn="pinpaiquyu" point-cpos="27" point-dtype="brand">
<div class="brand-item">
<div>
<img
class="brand-logo lazyload"
alt="Dayun"
src="https://global-img.bitauto.com/usercenter/car/20241105/147/w360_yichecar_078641814765350.png.webp"
data-original="https://global-img.bitauto.com/usercenter/car/20241105/147/w360_yichecar_078641814765350.png"
data-webp="https://global-img.bitauto.com/usercenter/car/20241105/147/w360_yichecar_078641814765350.png.webp"
data-errimg="https://global-img.bitauto.com/yc-static/yc-pc/haiwai-pc/assets/images/loaded_error_icon.png"
onerror="loadImageError(this)"
/>
<div class="brand-name">Dayun</div>
</div>
</div>
</a>
<a href="/en-sa/soueast/" class="ka" point-cid="25" point-crgn="pinpaiquyu" point-cpos="28" point-dtype="brand">
<div class="brand-item">
<div>
<img
class="brand-logo lazyload"
alt="Soueast"
src="https://global-img.bitauto.com/usercenter/car/20240703/759/w360_yichecar_997687575999642.png.webp"
data-original="https://global-img.bitauto.com/usercenter/car/20240703/759/w360_yichecar_997687575999642.png"
data-webp="https://global-img.bitauto.com/usercenter/car/20240703/759/w360_yichecar_997687575999642.png.webp"
data-errimg="https://global-img.bitauto.com/yc-static/yc-pc/haiwai-pc/assets/images/loaded_error_icon.png"
onerror="loadImageError(this)"
/>
<div class="brand-name">Soueast</div>
</div>
</div>
</a>
<a href="/en-sa/landian/" class="ka" point-cid="26" point-crgn="pinpaiquyu" point-cpos="29" point-dtype="brand">
<div class="brand-item">
<div>
<img
class="brand-logo lazyload"
alt="Landian"
src="https://global-img.bitauto.com/usercenter/car/20240703/967/w360_yichecar_997688196701500.png.webp"
data-original="https://global-img.bitauto.com/usercenter/car/20240703/967/w360_yichecar_997688196701500.png"
data-webp="https://global-img.bitauto.com/usercenter/car/20240703/967/w360_yichecar_997688196701500.png.webp"
data-errimg="https://global-img.bitauto.com/yc-static/yc-pc/haiwai-pc/assets/images/loaded_error_icon.png"
onerror="loadImageError(this)"
/>
<div class="brand-name">Landian</div>
</div>
</div>
</a>
<a href="/en-sa/haima/" class="ka" point-cid="27" point-crgn="pinpaiquyu" point-cpos="30" point-dtype="brand">
<div class="brand-item">
<div>
<img
class="brand-logo lazyload"
alt="Haima"
src="https://global-img.bitauto.com/usercenter/car/20240703/178/w360_yichecar_000219417844615.png.webp"
data-original="https://global-img.bitauto.com/usercenter/car/20240703/178/w360_yichecar_000219417844615.png"
data-webp="https://global-img.bitauto.com/usercenter/car/20240703/178/w360_yichecar_000219417844615.png.webp"
data-errimg="https://global-img.bitauto.com/yc-static/yc-pc/haiwai-pc/assets/images/loaded_error_icon.png"
onerror="loadImageError(this)"
/>
<div class="brand-name">Haima</div>
</div>
</div>
</a>
<a href="/en-sa/jmev/" class="ka" point-cid="28" point-crgn="pinpaiquyu" point-cpos="31" point-dtype="brand">
<div class="brand-item">
<div>
<img
class="brand-logo lazyload"
alt="JMEV"
src="https://global-img.bitauto.com/usercenter/car/20240703/748/w360_yichecar_997688074818713.png.webp"
data-original="https://global-img.bitauto.com/usercenter/car/20240703/748/w360_yichecar_997688074818713.png"
data-webp="https://global-img.bitauto.com/usercenter/car/20240703/748/w360_yichecar_997688074818713.png.webp"
data-errimg="https://global-img.bitauto.com/yc-static/yc-pc/haiwai-pc/assets/images/loaded_error_icon.png"
onerror="loadImageError(this)"
/>
<div class="brand-name">JMEV</div>
</div>
</div>
</a>
<a href="/en-sa/voyah/" class="ka" point-cid="29" point-crgn="pinpaiquyu" point-cpos="32" point-dtype="brand">
<div class="brand-item">
<div>
<img
class="brand-logo lazyload"
alt="Voyah"
src="https://global-img.bitauto.com/usercenter/car/20240703/500/w360_yichecar_997687950085351.png.webp"
data-original="https://global-img.bitauto.com/usercenter/car/20240703/500/w360_yichecar_997687950085351.png"
data-webp="https://global-img.bitauto.com/usercenter/car/20240703/500/w360_yichecar_997687950085351.png.webp"
data-errimg="https://global-img.bitauto.com/yc-static/yc-pc/haiwai-pc/assets/images/loaded_error_icon.png"
onerror="loadImageError(this)"
/>
<div class="brand-name">Voyah</div>
</div>
</div>
</a>
<a href="/en-sa/swm/" class="ka" point-cid="31" point-crgn="pinpaiquyu" point-cpos="33" point-dtype="brand">
<div class="brand-item">
<div>
<img
class="brand-logo lazyload"
alt="SWM"
src="https://global-img.bitauto.com/usercenter/car/20240703/205/w360_yichecar_997687520525767.png.webp"
data-original="https://global-img.bitauto.com/usercenter/car/20240703/205/w360_yichecar_997687520525767.png"
data-webp="https://global-img.bitauto.com/usercenter/car/20240703/205/w360_yichecar_997687520525767.png.webp"
data-errimg="https://global-img.bitauto.com/yc-static/yc-pc/haiwai-pc/assets/images/loaded_error_icon.png"
onerror="loadImageError(this)"
/>
<div class="brand-name">SWM</div>
</div>
</div>
</a>
</div> </div>
<div class="show-more-warp" style="display: none;">
<!-- Bootstrap JS --> <div class="view-more ka" point-ctitle="chakangengduo" point-crgn="pinpaiquyu">Show All Brands <em class="yc-icon-index yc-i-down_arrow_icon arrow-icon"></em></div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script> </div>
</body> </div>
</html> </div>

File diff suppressed because it is too large Load Diff