from django.conf import settings
from django.utils.timesince import timesince
import django_tables2 as tables
from django.utils.translation import gettext_lazy as _
from .models import Car, CarFinance, ExteriorColors, InteriorColors, CarColors
from .utils import get_local_name
from django.utils.html import format_html
class CarTable(tables.Table):
stock_type = tables.Column(verbose_name=_("Stock Type"))
vin = tables.LinkColumn("car_detail", args=[tables.A("pk")], verbose_name=_("VIN"), attrs={"td": {"class": "fw-bold"}})
id_car_make = tables.Column(verbose_name=_("Make"))
id_car_model = tables.Column(verbose_name=_("Model"))
year = tables.Column(verbose_name=_("Year"))
id_car_serie = tables.Column(verbose_name=_("Series"))
id_car_trim = tables.Column(verbose_name=_("Trim"))
mileage = tables.Column(verbose_name=_("Mileage"))
selling_price = tables.Column(accessor="finances.selling_price", verbose_name=_("Price"))
exterior_color = tables.Column(accessor="colors.exterior.name", verbose_name=_("Exterior Color"))
interior_color = tables.Column(accessor="colors.interior.name", verbose_name=_("Interior Color"))
receiving_date = tables.Column(verbose_name=_("Age"))
status = tables.Column(verbose_name=_("Status"))
class Meta:
model = Car
template_name = settings.DJANGO_TABLES2_TEMPLATE
export_formats = ["xlsx"]
fields = (
"stock_type",
"vin",
"id_car_make",
"id_car_model",
"year",
"id_car_serie",
"id_car_trim",
"mileage",
"selling_price",
"exterior_color",
"interior_color",
"receiving_date",
"status",
)
attrs = {"class": "table table-hover fs-9 mb-0 p-1"}
def render_id_car_make(self, value):
return get_local_name(value)
def render_id_car_model(self, value):
return get_local_name(value)
def render_id_car_serie(self, value):
return get_local_name(value)
def render_id_car_trim(self, value):
return str(value)
def render_exterior_color(self, value):
return str(value)
def render_interior_color(self, value):
return str(value)
def render_receiving_date(self, value):
return timesince(value) if value else "-"
def render_status(self, value):
status_badges = {
"available": "badge-phoenix-success",
"reserved": "badge-phoenix-danger",
"sold": "badge-phoenix-info",
"transfer": "badge-phoenix-warning",
}
badge_class = status_badges.get(value.lower(), "badge-secondary")
return format_html('{}', badge_class, value)
def render_stock_type(self, value):
type_badges = {
"new": "badge-phoenix-success",
"used": "badge-phoenix-warning",
}
badge_class = type_badges.get(value.lower(), "badge-secondary")
return format_html('{}', badge_class, value)