From 9b282154b07b016affe0641f388c83ca013f752e Mon Sep 17 00:00:00 2001 From: Marwan Alwali Date: Mon, 17 Feb 2025 21:46:27 +0300 Subject: [PATCH] update --- .../__pycache__/settings.cpython-311.pyc | Bin 8830 -> 8824 bytes inventory/__pycache__/admin.cpython-311.pyc | Bin 7644 -> 7975 bytes inventory/__pycache__/models.cpython-311.pyc | Bin 92943 -> 93049 bytes inventory/__pycache__/tables.cpython-311.pyc | Bin 1556 -> 6431 bytes inventory/__pycache__/urls.cpython-311.pyc | Bin 28440 -> 28728 bytes inventory/__pycache__/views.cpython-311.pyc | Bin 204088 -> 204894 bytes inventory/admin.py | 8 +- ...er_alter_activity_content_type_and_more.py | 33 +++++++ .../migrations/0032_alter_carcolors_car.py | 19 ++++ inventory/models.py | 7 +- inventory/tables.py | 87 +++++++++++++++++- inventory/urls.py | 3 + inventory/views.py | 13 ++- requirements.txt | 78 ++++++++-------- templates/inventory/car_list_table.html | 15 +++ .../organizations/organization_list.html | 4 +- 16 files changed, 219 insertions(+), 48 deletions(-) create mode 100644 inventory/migrations/0031_activity_dealer_alter_activity_content_type_and_more.py create mode 100644 inventory/migrations/0032_alter_carcolors_car.py create mode 100644 templates/inventory/car_list_table.html diff --git a/car_inventory/__pycache__/settings.cpython-311.pyc b/car_inventory/__pycache__/settings.cpython-311.pyc index 979c4811abc238997ea907e88ef478ab764cfb8a..76807e6704b220ecb3e74b00eb4b7a32bdb394f6 100644 GIT binary patch delta 118 zcmez8^23F9IWI340}!}2ZBEyk$ScYCYomHMBU1+B=1q(SA}qI<3{5w`5Y1o`6LoZU z_7C+7iTCk$_w{5y|I4>}W UZtj&o$i(W>>D%KwIao;>044n*`2YX_ delta 123 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 E03e_}mjD0& delta 2352 zcmaJ>O>7%g5Z+ze>;Ls{?AUQlejLIQQbJP*ZGM0hwTVO=q?jJugSF0XBB$#gp52IC zN)8}y2pA!dxNxhYss|KqT#z_%0dZX+)JqRl1u9og%)BKIvA4U{j^3N^o7wqh-t)cH z-Y{C#@f%fA$Utn`2@qWABK0OT+|thxL{EiOmV?tE?C?JOSoW37cAw1 zrJXSk_66e7*l<@kQg%XkFSE}1I5z5n3F`MhtK?DLElG$E+aAn@xXNIg&~&8 zS$<>%`m7g+ShJiJL{_NJdTEF?$5~-yMf$9ZL#&rMD~c@TKb9IhU->JX5kp4&G>`w1 zod>=S%mfpNBu|mZWj(bmsOiTf8w#PHWf>RD4^KkX5Z!x5W)`->Gjf7&;m>#uz6>8E zM`)Wtqe?7G>k+sRd2fT<}`G_E?-4Jadw0 z-c6&Yu^cWJ;fKh?ha4&5wycJRQkso!uckM;9aB4G3WbNcYqw$c4909F=w>l8lx5&^ zEKNQ#^Z0geqB-jS9;U7y!L8_qtvk(i{}ertZQbyOvT(ZmK$%ERVXW$5{id)fxUa0p zSz*%A>o?#t1y$3%lT11lHl#*u<6pwIV#w3icd@ zQwP{M8Y|pwvz}HrjavN>KdHvYi%#k%DS*r}?8T34os+0@cl=DoG{UOaiZt}vj>c+T zoSK1??k03`0Uo3-K`2?8J3nhypuA3EUPGV)w~~d8Gcm`0cQKB0qj51ZoA6`urd|0w zR$hTlDp%@PZw0aJj>e2u?^v>Dvw}gY$X2lSdU27`I2HOP0w&C*3+h>+?1}?>iF{;s zfu$>UAxr$IJWAj2E+YWnY{hXkG+koJCx^jGG`xD0`x)l&3*t+m&_xYKU+SfkE7=(hysgN5vB zu%Gtio9wIze~i9Up+67He@$bX+HHehG%G;6wr-gGdL zqut`owSws0>hS#<+|A|Zd6DM}|0l5AZ0mPSW0k#+sYHCcL7yNz^@ySfR<3+g9Sww{bi!HjerP9Ji8{l3V2oJkFlBOCV z5N$;x*^!*q(iTlD5!zS+={5dnL}SuaQ^9NqL5bQw##dt1G|^wqT-xZ5PBLHSob%23 z&N(x0tto%6DUMl(LzVcN7+gF)v*4%+vjZ-bwT9DKW2qH3HX6=>oy~_+Y^oMLF15xi zei6=Sdm!LRIS%{Iy<8J&JJC(E^WJcbVY4mRhuJf^GMBlTsk{H zmA*(*JEpPDma|h?{GIJ=By6|p(Rx(3o%PkEu)uFt_Q{f+?7IgRHhXon%(pk-^!?S^HWr}Ws56Gx<`mSu(a4K z^5rN=n&*3KwI-ST&_W(EDjt!gdPz$dm$byoGEc|%{dB3Clh4bm zxtgRLcj!7F(T3XAG1xWSHQ1#Og#MuZB9wXD|GAEJg!HyST|3r(l5P~?eXGoCKcz75 zk6H9)F@C`-bg~3{k;bZj%CUL4OlVc2%@Wj7M-Co~7ZRpUk0MC}LC|C-TszMWU-K;a zZuYD=f~$^T#1S0vuRF6QOC!##nczqMNaeFD&cLcO5OD^`w+oNbd@0({NY$xuk+%@l zMtd1DW!UJ|JvgGMyrv1dvj?-7q}MAj7H{L8kbp5E`=!KAeCVN~$8kfpS=hziWFw{$ zb5Yhr&iFu~nf>swxE)WBrwVbnO4(Joj<=1?DlAx(bdiNv9j?GjRes*^hV1mABz^`(yg%zwN z8$UdQAt)u>{~iSc_!hHN-UuzWOwh+g&hoAMMZzKA0^M%Jv|O|`r11ktl#xty2 zg-!4&b)5C7akvSmfC^eUj8S}U9C{8e;43=bj5GL}?lyz4MrV%TPi)Z3N3nqKsh|bV zySED=(Zfb`M}Kdx-ZwZ9+DGrUAP)!Wb_;xJgCU4*x_~_V#N-J^GU&%~*T^_tat+PT+Ux;dpxZjhF74vA_P$$Tv2- Hup9pZ@WnS& delta 1003 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 VBF(bWb;uEF zUcelUJYUT*%nOkt)x3y#F>;iemk{e>k#!2oaojG&c7d;r=XM#k(Y`i;PmqXhjMDnw zdlGL-Mqa3}tmjQB*e+69|EA^42IR$RPUV?t$V(KKSMa8EY-5$yKQn_jWg^EZEN5|> zjqOrjYvgt%w(-7p6}PLgUFK`oaJv@U1Yf(3+x6Hc`r6C5-GFV9uieP)rmwV{x!rT}#mMOj%O%{FVw>S>_wuMRY%`VCKdPMBikzk93Z7Ys zoUO22#ha?JH7c!tW(~6qd8L|bd1f8*Duv~G-qe8YYNhqhY-DZ<%*{Nr1$m9KTekBi z8QZl=>z~=m+=jeP&Fwt119`o|awl)PHBS-i4kGVVSU$wiv=1tci=P4{-%k6d8?)J6U^Qa@(nv~W*>IUW;k@MAj z6VJRExjKoXWDXsrZ-(>z4a=Dtn&HMneRm~4F zKZIPN=7*UdL9SHuqs%9ftJM4$^LLP|)%-Z~6Ua4cevALGxkq97H@xXQw!KR0-}GDN-y!#@ z`S(2YP2_%s20Uf5mp#*IwlI zU2I2u?ccclJGP^~_C0DN-^X@LY5gzy17ZJoIY{;r3H_D;`;*!A=tl#13j1>OV*%X2o{D}vfTyvqK!*UH&YppOYXHw=&qBW~ zfM>HC(QgmnE7@0}-x0u9v#&v)4&ZCq*P-7Tz}K^1hJIH7-@v{R{cg3FZ#o(JKyXmd zqxgq@j%jT7;OAwt?Or@?v7Nx3R%f#%_ki&%I< z$Y^Kl*bqdf^_@DM_Ibj>`_G5VUCn*%{l<~Oo}od{IR-<)X-bFqd<*pDKc!g&DFu2> zESL(GhkE{3J-7@83f6@udwxyv9G1i51^J=ro?kQIQbAm(=f7ry*${7jT(kMq%jT3| zO*6QQiZyMp!?H!w4HK5l@t(ga20ecV zNjOnFt+@&|lvqMNpS{5&r;e1Q1cxocx8r$7Luv4I+4f*}Xd#4^r)dgdO?d_$>&p}I zI90wDk586oh8BiJ&T&_Q-kK_^G~Q4RrB^rD7B3w&H*5OxYO=qs}_S}AlX^W&#mT?s3n=ygbWPAShN<+;0QMGuTu zW{F-3gK)AkP7F~PhF39+P#6Vw<Y6EZh45=j zfeTf!qMO=LNUlv2V-&`rwAPrppF&P3KRt;v3th=u9699<$?BA>F3IZ7rH3~U9^9SiLP)Di6?-TYd4kSDp_ulb6Pd88 zF$QMpbfSc$8lI`c&j*DT_@EA-OA0c?*BeADg*GtPXNh(SJup>o)b>&s4TX2>?aA}}=>GAtB|!}#8K zFYks~{Nxomr6QM9l#+1mXS4u-?4E!nz5lnUnYlbDEK zI`}EE>$K*1-V>G0gM)Z~uo30d)Iq;pFX}0Dz@2u3=%mmEFW8Nuo5C<$vS*7C3I|}d zY|NaXkQc$1D*d7LuFM?{Q>8MRs0 z=krC*gflXJaZuX?pSI~mGlecNwBr?|FbuWrM(qfNgY)5ddv?YlO2v_U3FD@ByW&^R z&UZ-pPAT6d<-1EFy)UB_F1F)WDup_T?!a3{p$)cm=(X(>CL^JvBTGzC%7J@2jN05N z?}VZ#zVi#_Qc(?}6Q5ZMEwH`QsIyb(iSoTOeta5wNybU8OPF5hip@M5yY}_iwa(b} zuGsandmK`MQz~#t1@8T{_y8?-XcJ~aTuG~EBOH>+DVbc7$vr_UCiz6iyJD7}i->d2 zl|n*448p@lo`ZXeR+(UBSDeV#@uRf2%P7ng%HUcIPqzP_V+H9;2wB&;Ugk8Y#$d1%_4%T`-HG zo5BFRk6|B$QCQxKAAJft!G>X1wD+VYIEo>kLJ_=x!9t-7E@3FAPz`JP@NQ9Pfes9I z3LS8wF9&=>8!bxy4r&h*3p^y@@F$uNZV8^s8P1F#dr1ce+J#gH4r*We@uGlgP! XyWbdA;thwxKeR#IK%5kV{{s60%;)pB diff --git a/inventory/__pycache__/views.cpython-311.pyc b/inventory/__pycache__/views.cpython-311.pyc index 7a5c78e5b38cdc54d7922671ee4bc7070598a578..d8666eb9881accf6f929539cd3c605d6efbc530c 100644 GIT binary patch delta 45982 zcmb__2Yggj7I*GTGD%1ykU&C7A+*qY@4Y7UG6-SF3=o(}!kdH=(LqJUwE@rds@O$V zgcaC`!A7-!1z~kXM?t{u+7ML4vfufi_h#PA+aNbI(2Z-17E4 zmvrV}Qp(?wlN&_Q-{h*AC1Y1^O34)6Hnl5B6j9D7XS_Sj)5yN*uLb%1Gs)e|)7;+N z)56}u)6(A3lWouD_sQ-YPp*B_xt4MKv!PoPqI0>YhrNfVr@be?OLO<~^tSi*^s)Eh z-;LaTJ^k$c__;Ai#52@B)HBRJjDI&FoZ

}C9-y}R5~VXyG4 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 a9hVV(E-wEd!jlM*SZt4c{05 delta 45428 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 YUYa0|*E(87AB}HvJgTwi&wy$CKOTWGEdT%j diff --git a/inventory/admin.py b/inventory/admin.py index cfbe9a25..031cd50a 100644 --- a/inventory/admin.py +++ b/inventory/admin.py @@ -1,7 +1,9 @@ +from appointment.models import Appointment from django.contrib import admin from . import models from django_ledger import models as ledger_models from django_pdf_actions.actions import export_to_pdf_landscape, export_to_pdf_portrait +from appointment import models as appointment_models admin.site.register(models.Dealer) @@ -32,12 +34,15 @@ admin.site.register(models.AdditionalServices) admin.site.register(models.Payment) admin.site.register(models.VatRate) admin.site.register(ledger_models.CustomerModel) +admin.site.register(ledger_models.VendorModel) +admin.site.register(ledger_models.ItemModel) admin.site.register(models.Opportunity) admin.site.register(models.Notification) admin.site.register(models.Lead) admin.site.register(models.Activity) admin.site.register(models.Schedule) admin.site.register(models.Notes) +# admin.site.register(appointment_models.Client) @admin.register(models.Car) @@ -126,4 +131,5 @@ class CarOptionAdmin(admin.ModelAdmin): @admin.register(ledger_models.ItemTransactionModel) class ItemTransactionModelAdmin(admin.ModelAdmin): - actions = [export_to_pdf_landscape, export_to_pdf_portrait] \ No newline at end of file + actions = [export_to_pdf_landscape, export_to_pdf_portrait] + diff --git a/inventory/migrations/0031_activity_dealer_alter_activity_content_type_and_more.py b/inventory/migrations/0031_activity_dealer_alter_activity_content_type_and_more.py new file mode 100644 index 00000000..9e7cd356 --- /dev/null +++ b/inventory/migrations/0031_activity_dealer_alter_activity_content_type_and_more.py @@ -0,0 +1,33 @@ +# Generated by Django 5.1.5 on 2025-02-17 14:05 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('contenttypes', '0002_remove_content_type_name'), + ('inventory', '0030_alter_activity_activity_type_delete_carhistory'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AddField( + model_name='activity', + name='dealer', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='activities', to='inventory.dealer'), + preserve_default=False, + ), + migrations.AlterField( + model_name='activity', + name='content_type', + field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='contenttypes.contenttype'), + ), + migrations.AlterField( + model_name='activity', + name='created_by', + field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='activities_created_by', to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/inventory/migrations/0032_alter_carcolors_car.py b/inventory/migrations/0032_alter_carcolors_car.py new file mode 100644 index 00000000..d7d0d5a9 --- /dev/null +++ b/inventory/migrations/0032_alter_carcolors_car.py @@ -0,0 +1,19 @@ +# Generated by Django 5.1.6 on 2025-02-17 17:40 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('inventory', '0031_activity_dealer_alter_activity_content_type_and_more'), + ] + + operations = [ + migrations.AlterField( + model_name='carcolors', + name='car', + field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='colors', to='inventory.car'), + ), + ] diff --git a/inventory/models.py b/inventory/models.py index c0665c5f..e7780b34 100644 --- a/inventory/models.py +++ b/inventory/models.py @@ -644,7 +644,7 @@ class InteriorColors(models.Model, LocalizedNameMixin): class CarColors(models.Model): - car = models.ForeignKey("Car", on_delete=models.CASCADE, related_name="colors") + car = models.OneToOneField("Car", on_delete=models.CASCADE, related_name="colors") exterior = models.ForeignKey( "ExteriorColors", on_delete=models.CASCADE, related_name="colors" ) @@ -1386,7 +1386,8 @@ class Email(models.Model): class Activity(models.Model): - content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) + dealer = models.ForeignKey(Dealer, on_delete=models.CASCADE, related_name="activities") + content_type = models.ForeignKey(ContentType, on_delete=models.DO_NOTHING) object_id = models.PositiveIntegerField() content_object = GenericForeignKey("content_type", "object_id") activity_type = models.CharField( @@ -1394,7 +1395,7 @@ class Activity(models.Model): ) notes = models.TextField(blank=True, null=True, verbose_name=_("Notes")) created_by = models.ForeignKey( - User, on_delete=models.DO_NOTHING, related_name="activities_created" + User, on_delete=models.DO_NOTHING, related_name="activities_created_by" ) created = models.DateTimeField(auto_now_add=True, verbose_name=_("Created")) updated = models.DateTimeField(auto_now=True, verbose_name=_("Updated")) diff --git a/inventory/tables.py b/inventory/tables.py index 8987794c..e0fcf33a 100644 --- a/inventory/tables.py +++ b/inventory/tables.py @@ -5,7 +5,7 @@ from . import models from django_tables2.utils import A import django_tables2 as tables from django import forms -from inventory.models import Car, SaleQuotation, SaleQuotationCar + class ImageColumn(tables.Column): @@ -19,3 +19,88 @@ class CustomerTable(tables.Table): first_name = tables.Column() +import django_tables2 as tables +from django.utils.translation import gettext_lazy as _ +from .models import Car, CarFinance, ExteriorColors, InteriorColors, CarColors + +class CarTable(tables.Table): + # Car fields + vin = tables.Column(verbose_name=_("VIN")) + dealer = tables.Column(verbose_name=_("Dealer")) + vendor = tables.Column(verbose_name=_("Vendor")) + 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")) + status = tables.Column(verbose_name=_("Status")) + stock_type = tables.Column(verbose_name=_("Stock Type")) + remarks = tables.Column(verbose_name=_("Remarks")) + mileage = tables.Column(verbose_name=_("Mileage")) + receiving_date = tables.Column(verbose_name=_("Receiving Date")) + hash = tables.Column(verbose_name=_("Hash")) + + # CarFinance fields + cost_price = tables.Column(accessor="finances.cost_price", verbose_name=_("Cost Price")) + selling_price = tables.Column(accessor="finances.selling_price", verbose_name=_("Selling Price")) + discount_amount = tables.Column(accessor="finances.discount_amount", verbose_name=_("Discount Amount")) + + # ExteriorColors fields (accessed through CarColors) + exterior_color = tables.Column(accessor="colors.exterior.name", verbose_name=_("Exterior Color")) + exterior_color_rgb = tables.Column(accessor="colors.exterior.rgb", verbose_name=_("Exterior Color RGB")) + + # InteriorColors fields (accessed through CarColors) + interior_color = tables.Column(accessor="colors.interior.name", verbose_name=_("Interior Color")) + interior_color_rgb = tables.Column(accessor="colors.interior.rgb", verbose_name=_("Interior Color RGB")) + + class Meta: + model = Car + template_name = "django_tables2/bootstrap.html" + fields = ( + "vin", + "dealer", + "vendor", + "id_car_make", + "id_car_model", + "year", + "id_car_serie", + "id_car_trim", + "status", + "stock_type", + "remarks", + "mileage", + "receiving_date", + "hash", + "cost_price", + "selling_price", + "discount_amount", + "exterior_color", + "exterior_color_rgb", + "interior_color", + "interior_color_rgb", + ) + attrs = {"class": "table table-striped table-bordered"} + + def render_dealer(self, value): + return str(value) + + def render_vendor(self, value): + return str(value) + + def render_id_car_make(self, value): + return str(value) + + def render_id_car_model(self, value): + return str(value) + + def render_id_car_serie(self, value): + return str(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) \ No newline at end of file diff --git a/inventory/urls.py b/inventory/urls.py index bf0e59d7..49abe150 100644 --- a/inventory/urls.py +++ b/inventory/urls.py @@ -1,6 +1,7 @@ from django.urls import path from . import views from allauth.account import views as allauth_views +from django_tables2.export.views import TableExport urlpatterns = [ @@ -45,6 +46,8 @@ urlpatterns = [ "dashboards/accounting/", views.AccountingDashboard.as_view(), name="accounting" ), path("test/", views.TestView.as_view(), name="test"), + path('cars/inventory/table/', views.car_list, name="car_table"), + path('export//', TableExport, name='export'), # Dealer URLs path("dealers//", views.DealerDetailView.as_view(), name="dealer_detail"), path( diff --git a/inventory/views.py b/inventory/views.py index 6defc1ce..f86dba16 100644 --- a/inventory/views.py +++ b/inventory/views.py @@ -3,7 +3,7 @@ from appointment.models import Appointment,AppointmentRequest,Service,StaffMembe from datetime import timedelta from calendar import month_name from random import randint - +from django_tables2 import RequestConfig from django_pdf_actions.actions import export_to_pdf_landscape from reportlab.lib.pagesizes import landscape, A4 from rich import print @@ -90,7 +90,7 @@ from .services import ( get_make, get_model, ) -from . import models, forms +from . import models, forms, tables from django.contrib.auth.mixins import PermissionRequiredMixin from django.contrib.messages.views import SuccessMessageMixin from django.contrib.auth.models import Group @@ -145,6 +145,7 @@ from django_ledger.views.mixins import ( from django_pdf_actions import actions + logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) @@ -4386,3 +4387,11 @@ def apply_search_filters(queryset, query): return queryset.filter(search_filters).distinct() +def car_list(request): + dealer = get_user_type(request) + queryset = models.Car.objects.select_related( + "finances", "colors__exterior", "colors__interior" + ).filter(dealer=dealer) + table = tables.CarTable(queryset) + RequestConfig(request).configure(table) + return render(request, 'inventory/car_list_table.html', {'table': table}) \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 22a137d2..ad22e107 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,24 +1,24 @@ -aiohappyeyeballs==2.4.4 -aiohttp==3.11.11 +aiohappyeyeballs==2.4.6 +aiohttp==3.11.12 aiohttp-retry==2.9.1 aiosignal==1.3.2 alabaster==1.0.0 albucore==0.0.23 -albumentations==2.0.2 +albumentations==2.0.4 annotated-types==0.7.0 anyio==4.8.0 arabic-reshaper==3.0.0 asgiref==3.8.1 astor==0.8.1 astroid==3.3.8 -attrs==23.2.0 +attrs==25.1.0 autopep8==2.3.2 Babel==2.15.0 -beautifulsoup4==4.12.3 +beautifulsoup4==4.13.3 bleach==6.2.0 blinker==1.9.0 Brotli==1.1.0 -certifi==2024.12.14 +certifi==2025.1.31 cffi==1.17.1 chardet==5.2.0 charset-normalizer==3.4.1 @@ -27,7 +27,7 @@ colorama==0.4.6 commonmark==0.9.1 contourpy==1.3.1 crispy-bootstrap5==2024.10 -cryptography==44.0.0 +cryptography==44.0.1 cssselect2==0.7.0 ctranslate2==4.5.0 cycler==0.12.1 @@ -39,18 +39,18 @@ dill==0.3.9 distro==1.9.0 dj-rest-auth==7.0.1 dj-shop-cart==8.0.0a2 -Django==5.1.5 -django-allauth==65.3.1 +Django==5.1.6 +django-allauth==65.4.1 django-appointment==3.8.0 django-autoslug==1.9.9 django-bootstrap5==24.3 django-classy-tags==4.1.0 -django-cors-headers==4.6.0 +django-cors-headers==4.7.0 django-countries==7.6.1 django-crispy-forms==2.3 django-debug-toolbar==5.0.1 django-extensions==3.2.3 -django-filter==24.3 +django-filter==25.1 django-formtools==2.5.1 django-ledger==0.7.4.1 django-model-utils==5.0.0 @@ -59,7 +59,7 @@ django-next-url-mixin==0.4.0 django-nine==0.2.7 django-nonefield==0.4 django-ordered-model==3.7.4 -django-pdf-actions==0.1.38 +django-pdf-actions==0.1.39 django-phonenumber-field==8.0.0 django-picklefield==3.2 django-plans==1.2.0 @@ -82,19 +82,19 @@ docutils==0.21.2 easy-thumbnails==2.10 emoji==2.14.1 et_xmlfile==2.0.0 -Faker==35.0.0 +Faker==36.1.1 filelock==3.17.0 fire==0.7.0 Flask==3.1.0 -fonttools==4.55.7 +fonttools==4.56.0 fpdf2==2.8.2 frozenlist==1.5.0 -fsspec==2024.12.0 +fsspec==2025.2.0 gprof2dot==2024.6.6 graphqlclient==0.2.4 greenlet==3.1.1 h11==0.14.0 -h2==4.1.0 +h2==4.2.0 hpack==4.1.0 hstspreload==2025.1.1 httpcore==1.0.7 @@ -117,11 +117,11 @@ lazy_loader==0.4 ledger==1.0.1 libretranslatepy==2.1.4 lmdb==1.6.2 -lxml==5.3.0 +lxml==5.3.1 Markdown==3.7 markdown-it-py==3.0.0 MarkupSafe==3.0.2 -marshmallow==3.26.0 +marshmallow==3.26.1 matplotlib==3.10.0 mccabe==0.7.0 mdurl==0.1.2 @@ -130,13 +130,13 @@ mpmath==1.3.0 multidict==6.1.0 mypy-extensions==1.0.0 networkx==3.4.2 -newrelic==10.4.0 +newrelic==10.6.0 nltk==3.9.1 num2words==0.5.14 -numpy==2.2.2 +libquadmath==2.2.3 oauthlib==3.2.2 ofxtools==0.9.5 -openai==1.60.2 +openai==1.63.1 opencv-contrib-python==4.11.0.86 opencv-python==4.11.0.86 opencv-python-headless==4.11.0.86 @@ -147,8 +147,8 @@ packaging==24.2 pandas==2.2.3 pango==0.0.1 pdfkit==1.0.0 -phonenumbers==8.13.42 -pillow==10.4.0 +phonenumbers==8.13.55 +pillow==11.1.0 platformdirs==4.3.6 prometheus_client==0.21.1 propcache==0.2.1 @@ -162,7 +162,7 @@ pyclipper==1.3.0.post6 pycodestyle==2.12.1 pycparser==2.22 pydantic==2.10.6 -pydantic_core==2.27.2 +pydantic_core==2.29.0 pydotplus==2.0.2 pydyf==0.11.0 PyGetWindow==0.0.9 @@ -190,41 +190,41 @@ python-openid==2.2.5 python-stdnum==1.20 python3-saml==1.16.0 pytweening==1.2.0 -pytz==2024.2 +pytz==2025.1 pyvin==0.0.2 pywa==2.7.0 pywhat==5.1.0 pywhatkit==5.4 PyYAML==6.0.2 pyzbar==0.1.9 -qrcode==7.4.2 -RapidFuzz==3.11.0 +qrcode==8.0 +RapidFuzz==3.12.1 regex==2024.11.6 -reportlab==4.2.5 +reportlab==4.3.1 requests==2.32.3 requests-oauthlib==2.0.0 rfc3986==2.0.0 -rich==10.16.2 +rich==13.9.4 rubicon-objc==0.5.0 sacremoses==0.1.1 scikit-image==0.25.1 -scikit-learn==1.6.1 -scipy==1.15.1 +libomp runtime library==1.6.1 +libquadmath==1.15.2 selenium==4.28.1 sentencepiece==0.2.0 -shapely==2.0.6 +shapely==2.0.7 simsimd==6.2.1 six==1.17.0 sniffio==1.3.1 snowballstemmer==2.2.0 sortedcontainers==2.4.0 soupsieve==2.6 -SQLAlchemy==2.0.37 +SQLAlchemy==2.0.38 sqlparse==0.5.3 stanza==1.10.1 stringzilla==3.11.3 suds==1.2.0 -swapper==1.3.0 +swapper==1.4.0 sympy==1.13.1 tablib==3.8.0 termcolor==2.5.0 @@ -234,11 +234,11 @@ tinycss2==1.4.0 tinyhtml5==2.0.0 tomli==2.2.1 tomlkit==0.13.2 -torch==2.5.1 +torch==2.6.0 tqdm==4.67.1 -trio==0.28.0 -trio-websocket==0.11.1 -twilio==9.4.4 +trio==0.29.0 +trio-websocket==0.12.0 +twilio==9.4.5 typing-inspect==0.9.0 typing_extensions==4.12.2 tzdata==2025.1 @@ -249,7 +249,7 @@ vin==0.6.2 vininfo==1.8.0 vishap==0.1.5 vpic-api==0.7.4 -weasyprint==63.1 +weasyprint==64.0 webencodings==0.5.1 websocket-client==1.8.0 Werkzeug==3.1.3 diff --git a/templates/inventory/car_list_table.html b/templates/inventory/car_list_table.html new file mode 100644 index 00000000..6fd3d636 --- /dev/null +++ b/templates/inventory/car_list_table.html @@ -0,0 +1,15 @@ +{% extends 'base.html' %} +{% load static i18n django_tables2%} + + +{% block content %} + +{% load export_url from django_tables2 %} + + +{% render_table table %} + + +Export to Excel +Export to PDF +{% endblock %} \ No newline at end of file diff --git a/templates/organizations/organization_list.html b/templates/organizations/organization_list.html index 8026722f..6fc20b4b 100644 --- a/templates/organizations/organization_list.html +++ b/templates/organizations/organization_list.html @@ -115,8 +115,8 @@ - {{ org.additional_info.organization_info.crn }} - {{ org.additional_info.organization_info.vrn }} + {{ org.additional_info.info.crn }} + {{ org.additional_info.info.vrn }} {{ org.phone }} {{ org.address_1 }}