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)