From 231c9b563855fee50eb51949b12006130da066bd Mon Sep 17 00:00:00 2001 From: Marwan Alwali Date: Sun, 22 Dec 2024 15:51:35 +0300 Subject: [PATCH] update --- .../__pycache__/settings.cpython-311.pyc | Bin 6051 -> 6051 bytes .../__pycache__/urls.cpython-311.pyc | Bin 1998 -> 1974 bytes car_inventory/settings.py | 2 +- car_inventory/urls.py | 2 +- haikalbot/chatbot_logic.py | 120 ++++++------------ haikalbot/views.py | 21 +-- inventory/__pycache__/admin.cpython-311.pyc | Bin 5476 -> 5678 bytes inventory/__pycache__/forms.cpython-311.pyc | Bin 15938 -> 17223 bytes inventory/__pycache__/models.cpython-311.pyc | Bin 48083 -> 43591 bytes .../__pycache__/services.cpython-311.pyc | Bin 4313 -> 4323 bytes inventory/__pycache__/urls.cpython-311.pyc | Bin 10969 -> 11133 bytes inventory/__pycache__/utils.cpython-311.pyc | Bin 1461 -> 3838 bytes inventory/__pycache__/views.cpython-311.pyc | Bin 67897 -> 59039 bytes .../__pycache__/translate.cpython-311.pyc | Bin 2613 -> 2786 bytes inventory/management/commands/translate.py | 25 ++-- inventory/urls.py | 3 + inventory/views.py | 15 +-- static/.DS_Store | Bin 8196 -> 10244 bytes static/images/.DS_Store | Bin 8196 -> 8196 bytes static/images/car_make/.DS_Store | Bin 6148 -> 6148 bytes static/images/car_make/Ford2.webp | Bin 11574 -> 0 bytes static/images/car_make/Lincoln.webp | Bin 5164 -> 0 bytes static/images/logos/.DS_Store | Bin 10244 -> 10244 bytes templates/haikalbot/chatbot.html | 1 - templates/inventory/car_form.html | 34 ++--- templates/inventory/inventory_stats.html | 1 + 26 files changed, 90 insertions(+), 134 deletions(-) delete mode 100644 static/images/car_make/Ford2.webp delete mode 100644 static/images/car_make/Lincoln.webp diff --git a/car_inventory/__pycache__/settings.cpython-311.pyc b/car_inventory/__pycache__/settings.cpython-311.pyc index 572eb5dcf13cf061176abb67fe817a85f6790116..825dd1b5c377ffda4ab7a3070d081f70fe79a82e 100644 GIT binary patch delta 28 icmZ3izgVApIWI340}zC6N!iH#fQ8Axa`Ri3Z9)KW4G3QV delta 28 icmZ3izgVApIWI340}zP)NZQE#fQ8A}bn{!5Z9)KV_XuGC diff --git a/car_inventory/__pycache__/urls.cpython-311.pyc b/car_inventory/__pycache__/urls.cpython-311.pyc index 3189c91a24adba1f71a5b24568168a2fc47b263b..924bb9fccbf610b1c921e982c84e75fbd68960ed 100644 GIT binary patch delta 380 zcmX@dzm1=FIWI340}$-nl9J9okyny&&O~+j07ixsh7{%;)?BtIHZYqdhdq}giUZ7M z&Ed@DisAyZ*>bpZd7^m0Z1x=9C|)LpROS>8Ajy)-o5cq*83ZQ2Q=GVaku-lQKTw7X ztVTGMF-rg<%fOJuH*tY9t4JzOmf++Wj6cO83fWRQvV>qtfNbH(E0|=}_*2+}88nq& zf+RE?#h#g$oKu>Ty7>#!L`FuD$!#n;k+;NCvJ&&s^YxPR z^V0N6i*kzfic1npGLwtgfM(p{Mv^UJ2Z@Lxi9pn68d~HPae(AFGxN$)^GfoIDvLNL q3$W@i@=Ug6E#*=G$}s|QG0WsVtTJM%7Z|Xh&0korF|x=3l>q=#_g>Qg delta 417 zcmZ{d!Aiq09LAHaS=QEU)oqAuFw}z#N5z{D;munQN^Rn7Ni)ehVLpUV>H~OEP;UcY zLJ&_Lig)qmRS#m)BJAQv{(ruFzc1vm`P?M8gjhgn=lgi%q+|_Vr(6B~7_Rrt=RVL!q@mxOgvI}%o|>#0$7#S)izioYNnS@U57d9Y8RlzV6?2i z)Kd7fi`tAtE7=wN3d$m8X4EPR04U%7^A8(06#(wll)4}Qcn-w}V6ge2qXEp3PvcMw zs=0CIC#N|MMZl+&G H`l|d3y~k%N diff --git a/car_inventory/settings.py b/car_inventory/settings.py index 221842b5..545ad623 100644 --- a/car_inventory/settings.py +++ b/car_inventory/settings.py @@ -26,7 +26,7 @@ SECRET_KEY = 'django-insecure-gc9bh4*3=b6hihdnaom0edjsbxh$5t)aap@e8p&340r7)*)qb8 # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True -ALLOWED_HOSTS = ['10.10.1.109', 'localhost', '127.0.0.1', '192.168.1.135', '172.20.10.4'] +ALLOWED_HOSTS = ['10.10.1.109', 'localhost', '127.0.0.1', '192.168.1.109', '172.20.10.4'] # Application definition diff --git a/car_inventory/urls.py b/car_inventory/urls.py index af9c4925..5aa86968 100644 --- a/car_inventory/urls.py +++ b/car_inventory/urls.py @@ -1,5 +1,5 @@ from django.contrib import admin -from django.urls import path, include, re_path +from django.urls import path, include from django.conf.urls.static import static from django.conf import settings from django.conf.urls.i18n import i18n_patterns diff --git a/haikalbot/chatbot_logic.py b/haikalbot/chatbot_logic.py index 2aa03e14..6b9cd7aa 100644 --- a/haikalbot/chatbot_logic.py +++ b/haikalbot/chatbot_logic.py @@ -1,83 +1,45 @@ -import re -from nltk.tokenize import word_tokenize -from django.db.models import Q -from inventory.models import Car # Import your car-related models -import nltk -# Download required NLTK resources -try: +from openai import OpenAI +from inventory import models +from car_inventory import settings - nltk.download("punkt") -except ImportError: - raise ImportError("Ensure nltk is installed by running 'pip install nltk'.") +def fetch_data(dealer): + try: + # Annotate total cars by make, model, and trim + cars = models.Car.objects.filter(dealer=dealer).count() + print(cars) + if cars: + return f"إجمالي عدد السيارات في المخزون الخاص بـ {dealer.get_local_name}) هو {cars}" + # return f"The total cars in {dealer} inventory is ( {cars} )." + else: + return "No cars found in the inventory." + except Exception as e: + return f"An error occurred while fetching car data: {str(e)}" -# Static responses for predefined intents -RESPONSES = { - "greet": ["Hello! How can I assist you today with Haikal Car Inventory?"], - "inventory_check": ["You can check the car inventory in the Cars section. Do you want to search for a specific car?"], - "car_status": ["If a car is sold, it will either be marked as SOLD or removed from the inventory, as per your preferences."], - "sell_process": ["To sell a car, the process involves creating a Sell Order, adding the customer, confirming payment, generating an invoice, and finally delivering the car."], - "transfer_process": ["Dealers can transfer cars to other branches or dealers for display or sale. This is handled through Sell Orders as well."], - "bye": ["Goodbye! If you need further assistance, just ask!"], -} -def clean_input(user_input): - """ - Clean and tokenize user input. - """ - user_input = user_input.lower() - user_input = re.sub(r"[^\w\s]", "", user_input) # Remove punctuation - return word_tokenize(user_input) +def get_gpt4_response(user_input, dealer): + dealer = dealer + client = OpenAI(api_key=settings.OPENAI_API_KEY) -def classify_input(tokens): - """ - Classify user intent based on tokens. - """ - if any(word in tokens for word in ["hello", "hi", "hey"]): - return "greet" - elif any(word in tokens for word in ["inventory", "cars", "check"]): - return "inventory_check" - elif any(word in tokens for word in ["sell", "sold", "process"]): - return "sell_process" - elif any(word in tokens for word in ["transfer", "branch", "display"]): - return "transfer_process" - elif any(word in tokens for word in ["bye", "goodbye", "exit"]): - return "bye" - elif any(word in tokens for word in ["price", "cost", "value"]): - return "car_price" - else: - return "unknown" - -def get_dynamic_response(intent, tokens): - """ - Generate dynamic responses by querying the database. - """ - if intent == "car_price": - # Extract car name from tokens - car_name = " ".join([word.capitalize() for word in tokens]) - try: - car = Car.objects.filter(Q(make__icontains=car_name) | Q(model__icontains=car_name)).first() - if car: - return f"The price of {car_name} is {car.finance.selling_price}." - return f"Sorry, no car matching '{car_name}' was found in the inventory." - except Exception as e: - return f"An error occurred while retrieving the car price: {str(e)}" - return None - -def get_response(user_input): - """ - Generate a response based on the user's input. - """ - tokens = clean_input(user_input) - intent = classify_input(tokens) - - # Check for a dynamic response - dynamic_response = get_dynamic_response(intent, tokens) - if dynamic_response: - return dynamic_response - - # Return a static response if available - if intent in RESPONSES: - return RESPONSES[intent][0] - - # Default response for unknown intents - return "I'm sorry, I didn't understand that. Could you rephrase your question about the Haikal system?" \ No newline at end of file + if "سيارة في المخزون" in user_input.lower(): + # cars = user_input.split("how many cars")[-1].strip() + car_data = fetch_data(dealer) + user_input += f" Relevant car data: {car_data}" + try: + completion = client.chat.completions.create( + model="gpt-4o", + messages=[ + { + "role": "system", + "content": ( + "You are an assistant specialized in car inventory management for the Haikal system. " + "You can answer questions about the inventory, sales process, car transfers, invoices, " + "and other application-specific functionalities. Always provide responses aligned " + "with the Haikal system's structure and features." + ) + }, + {"role": "user", "content": user_input}, + ], + ) + return completion.choices[0].message.content.strip() + except Exception as e: + return f"An error occurred while generating the response: {str(e)}" diff --git a/haikalbot/views.py b/haikalbot/views.py index 0328a328..7a0af10a 100644 --- a/haikalbot/views.py +++ b/haikalbot/views.py @@ -1,34 +1,25 @@ +from django.contrib.auth.mixins import LoginRequiredMixin from django.views import View from django.shortcuts import render from django.http import JsonResponse -from .chatbot_logic import get_response +from .chatbot_logic import get_gpt4_response import json -class ChatbotView(View): - """ - Class-based view to handle chatbot template rendering (GET) - and GPT-4-based chatbot API responses (POST). - """ +class ChatbotView(LoginRequiredMixin, View): def get(self, request): - """ - Render the chatbot interface template. - """ return render(request, "haikalbot/chatbot.html") def post(self, request): - """ - Handle chatbot API requests and return responses as JSON. - """ + dealer = request.user.dealer + try: - # Parse JSON payload from the request body data = json.loads(request.body) user_message = data.get("message", "").strip() if not user_message: return JsonResponse({"error": "Message cannot be empty."}, status=400) - # Get GPT-4 response - chatbot_response = get_response(user_message) + chatbot_response = get_gpt4_response(user_message, dealer) return JsonResponse({"response": chatbot_response}, status=200) except json.JSONDecodeError: diff --git a/inventory/__pycache__/admin.cpython-311.pyc b/inventory/__pycache__/admin.cpython-311.pyc index 8464c5503c21f7a12f166e784c504367a05eb5fb..a4f2bd4d78979a4a63447657a52efbd5fbf5d279 100644 GIT binary patch delta 292 zcmaE&wN8h3IWI340}xmQrKJCx$ScXDz`jw#h;`xt)ydhc;u9Ox8D%CfV3e2~#VW`s zJGp^Pnv9QHIDes%}2Twvv%id2$Iy3#07jpB$$c8TBV0;hM*2GC7%hI-|zs-`p=58674+ z<#l1S+^ofy!^jvhc{;xfW6NK9Wnkynyw3EM^uBi6~+SOpoSCof===45GMNMTK7%#xX` zz^*DR%ftX=vx2mMKq_;V97xsVcs343u!_lsY{?0Ke=vApigX diff --git a/inventory/__pycache__/forms.cpython-311.pyc b/inventory/__pycache__/forms.cpython-311.pyc index 1580ed63bd003dfdba47b5aa1453b3d5ed481aa6..6ff0a66dbdc1643ffc51926cf2cb2bfe5712876a 100644 GIT binary patch delta 5375 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 ACjbBd delta 4070 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 PYyr&+3@B(aufQ1q^5QbC delta 179 zcmaE?cvF#gIWI340}w2j8=5w^FG11-2yG?eI5Zg^#$-YuguKlA zC0g1L!Ul4XSi%C)R_&rF5-RE@Y}#Fw6r)0^#DYatb>m8~0Y&QZIie%Y(f^%u=iZUW z&wCd41iuaj11`L7|2#N&>1J?+xc9(X-vTDhEUFy~(GYaQ?m#cBG+ zuL*|UDm;bav(W2l;FrZlQ*(5hzO5q4Hn=Ov~!5Un!AT5_>U6YJncRi{`_ z_6If5La8gLfga4jY3yu-AA<$}N)2gZGtGN2ZJ~50q``P71Ak*@D|J?fHL(qLhdV_p z`4@B>rJ8CDUWGHTw|WWu;PLrB$G2{;Oj2Kb@4xSHxxT}jubaZ|aIV;j^Q9edzOtn= zY5Se4-L8hI*~#jc9zEP&m?$-;c5iPT|D<2DW z8n+dA7h@{?Rd-(4&>yw1UXLcRK8!YhV2iN39D=%7${n^L5^Ki(C$SA!C#lX+eH%;i z$|Std4R^|huKEN%b)fyx*ek z?y^#B(|lX^yf?St&6T{la-NqQgn#0uEHDni3d5BB42LklI1DEZOAa!Qz&*rK#t=L) z40(((JYyR2IOh>ao2DFPjKN;hlH-gCm^Q6sk#XkzI~sRSmaHvvpU!);3*KzWn=PN^ z73biE8Iky@Dj((oESi>bk8gC(a&%Q1B@Z~6(`3S!?1`r&KQBlq$Nig_zNP&850!*iiFE*`5gR|jCiN;Z~Y%8 C^h}Zf delta 1052 zcmXBSNlX(_7zc1(DfUfETZ}{mCWbCE(*;H<0-}b+LShw_B~U1vXrZhsi*gVJML`b6 zI3w`Qslx|USj=~3$*fki zj;vjKVs-KBF)4l{W{uCqc>HF}62H})=AU0(&-$9ax{>`tV&$ugd)Jt45g&@-Z(_>| zEd^It6p{rR=C6VPrq>nP5oJzO$^my=L6b8Iw_PEezj0My{uHUZjXvNG(3t^r18eF{H8sE04O!AZg?u=-Vgn$Q3T{Ys#b&}2%> zkY;PwCD-H9O;7o&(RFiu(pXWuI)sUK}C*Z*_KF3jy@d8DJ%ISav`WvQcD5^`h0h!NuPN1 z-qDg7vbYBWl?$bCffO!~1kgj^x^RAgA6g(rU;4-sE)a2mfB;2-_Mrd^w}9ckboTfm zld%Cmba^*BJ2SgCyYsQb-v@&}1Z{jlO8?i5&|k@*+2{uHY#xvYNJ0{&pcT^73bjVB z&=kQLg;`@)Tn^4E?lsSf$H83+x8_~(0`9(xR(z5NpkLwu1|(_`4S4@SmY*A-Y)+GP zJ(EjofCtim%Nu%95sG(U>|RqPSs|P-aFVG^PRNNFK}p^gl!7caG;}%_KnC7te+K~S zQe{w7VkGuUx=cwf$t`&RqrFI{9C-(1TX+eTs1p4R_Yl^2OxAH)nJF>b&4XwXo&F)f z$1MtlN=&vjYZ3J$y~RT)%QgpDqNUT0BivhN^G~&g67f zO7igF#HchrC`%I)<8n+I9*K!|WL%8LM}}i#<8k5r>*J}jsgdEa>!TARWAbQfeE4h} z*7t%wNnO1u=WHKAHCe>64h+u?S&(F`*(}kd*nI(G6-U(TI%o+mx&kLq$k?F%$hn0~Mod0$vw#g0e0sndtl-@rHoc=CPWU zMO`CjpUmWL!`Z3$PIMnD=ov*D%HOer#DBBvdi@yi+ps(buSR^xKvmzMG5!6)W7VUl zYA%L%*AM{XQq6}BPgW0)11&&k0k<(zMPRiW2?p{$y9VGvThK{V zyNj3Gxg7yerd|$MiRqY2ldu?I=WLHw04LTo+a(hxDuynqIIZfDc|p_GRV;l7NrXxc zFt`U4!o2`&H+T-1MI(BGrSV&Y7*bY|@tbl8L7MEe5!1Gk zrzyLi?q0JJ^G%06-z3?V*-cN1lGwXkiT%NzTqRct()}c;Ah`kav@ouPc?m|Oh{5Y^ z2CWX29r+D&p9RD^UbG9ulW&;3Bw|7zK-sD7aNCFjeYeYtjj?vUeNCs%~! zUC7gOb^9uYC|Kg z)QE-`zDXsc>7u%pKVLjfQW(UBSWukXLmQfOVnsU-NK@(rOx8$tGf>5UuKwH?HWOPH zT0`6iZ1}2&Bu&VgfF2PfDMJ!ATTnS80r$?Oj=MUjBV{^iq z?A&dlZ2NUphm(Yh4hF8BgY7q{bIk3Bi?$0Og4niC&=w{W$x zv}`RU&4p{$!nKN+HW$+0Wz|alwwYbGvg_u;`hO6*LeJB%+|TF*`ro8mqW?vR%Vb14 z5LuB!ofG;}LuxxwO>rN2@_gO~KWo#czw4!OTsY#qH%-P=7!VrF> z*n@J3bw0s0;|`AyMGlj%P&e@~^ctyD;DRLW$Mst>)R_zLG|2Q5;S|Il7`@sRGA>nv zhpphdyTQ{t!P91N&B01$v;60bnLYkT79X+r zle>I$hmSsCD}2=Cr!0QTxcoQ5J8AK;U4CqbAFIqSRroQJU$*$=U4C_kUp4up#V3u+ zHTo4!S2x!j^Yex`f^C5Wh6ZTNRNp>kT-uy9*(24SUci28vTs$pdjPv)vPY|tKI2j) z&||W_)!?D~D^@T<>ZsEW*rci)e?L&+df~CS-t7b1Q&wNxJV5pg-QCik2Wav8dS$ZPOB$wO#YAHV?@T=Dpl)#b*wcWBGVuz z%i2)uZi!Qw4VVG| delta 295 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 delta 22158 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 diff --git a/inventory/management/commands/__pycache__/translate.cpython-311.pyc b/inventory/management/commands/__pycache__/translate.cpython-311.pyc index 58dc434a8e20b114758834ab5a5a9d87810a38ee..29351a100ad3e1cca38ea7a105d112a42b89abc4 100644 GIT binary patch delta 991 zcmZ`%O-vI(6yBZfZhtIg3rm4Yamr6K3Tg8F0~RNzso8fz~erKgFzB^?5Mtw+VK^ zAskx;f-_~AcH$b?Ff#>&vNf0f3HV5${{pug%To-}v&AazgQpQ&k+LDI)Spn@ZthU7 zO8-uES9?Z+WZufp#U^INqykWr*f)wG^fpUiiJ6+y+PmaDqb5~NjNf>7RZc)&5g{)@ zUR7hN#!DL1uJam<#w0;Sp$PjGeliw;BYa#`VN_ONgjZl(7Q|V#BP>HnMhb!$CZGbNq)9WiUX#GU63uNpEvKF?nlyzu3~pz=$Mh2ZCi4VQ ze_@wk>nrv!EIZ5weZdNs0%w-(2HT8>bFH{?EHqe{WnqD>%6i7`HzPp)_|N(>xxQFp z-ebDtIdFI3i<1c_!oh{a+9nc=mOtY-lE#(Zhbv4fWkb};*o?;|rQTm}ax z|2~Uai+<_bz5y=Gflbaa1nA9rZ#YD6hUg)nU$aGy`)J(zNPPX-Rzvnf5+67k(=)rp M%-((^b delta 858 zcmZ{hO=uHA6vy`?lWfv#vgszVjZL$mUkTC(+R)G_C20y3Q9%&YB6UrcH0G=9Zox`w z^&qAPC3Xre*n}{bBkDe6_vC@n>)im!OXrHW4N84oi{n0pTYN8vwo_uKA5AQ;JHN*NBv* zWO!`V&+4W}(nP9l!wUZpUYv$z@>P$mWJKrf%__{v-6-lPQHbqulMFl9Q#mI*BEz)n zW)QEN_?gU9R+xk1hQI8Gkht+eI+u~AIl0KiME+4G84410gILT7byKofkcEO=H_S?cn7-V!pQAyt z4)Vp6kgHR90g8YHB7trTUxK^13H}0~%v6#Wr}BJOfNzXj3oAH=J;xf3a~~;{8&({V zsw1L0B4uNP^(>F>vHiPjf0YfWY@kfln2r_OlC8>cD#MjQgQ6AN;OZTOma0@pr9ui7 zYWM={9or7Y7p?lDsxPWxF7p`P;^M9HcqO6{PI?Tld2jcuO{(6ZJ#Tc^8?AZ#ni1<8 ztPNx}Kz4dGOos*QyHFdr_+kD;tj*l*)|{BXSL?*Ouk2%Vcl&{kibd;!eu`TdxKyE3 zrdOYsUZUUHm+cjMgK;VD`>TBjNbisRmnU2Et;mn-Est1bCRJuqY3i`Sc4-)n#y!bq zvDo^=#tp?CL)zwBzRJW^CO)As@l!fPrjdFXeG&ZkAW|p#pYOwQXTnPCSS^VWu;cb5 q!eA#15+kt9oILLVdhav2xoGadV_sa}a5l@?{buIiKY8&gYX28giv?Ez diff --git a/inventory/management/commands/translate.py b/inventory/management/commands/translate.py index 38aa5e62..e2c2c3de 100644 --- a/inventory/management/commands/translate.py +++ b/inventory/management/commands/translate.py @@ -9,28 +9,31 @@ class Command(BaseCommand): def handle(self, *args, **kwargs): client = OpenAI(api_key=settings.OPENAI_API_KEY) - car_make = CarMake.objects.all() - total = car_make.count() + car_model = CarModel.objects.all()[0:1000] + total = car_model.count() print(f'Translating {total} names...') - for index, car_make in enumerate(car_make, start=1): + for index, car_model in enumerate(car_model, start=1): try: completion = client.chat.completions.create( - model="gpt-4", + model="gpt-4o", messages=[ { "role": "system", - "content": "You are a translation assistant that translates English to Arabic." + "content": "You are an assistant that finds the Arabic Names for car models." + "Do not translate just write the arabic names." + "If the name is a number just write it as is." + "If you can't find the arabic name just write -" }, { "role": "user", - "content": car_make.name + "content": car_model.name } ], - temperature=0.3, + temperature=0.2, ) translation = completion.choices[0].message.content.strip() - car_make.arabic_name = translation - car_make.save() - print(f"[{index}/{total}] Translated '{car_make.name}' to '{translation}'") + car_model.arabic_name = translation + car_model.save() + print(f"[{index}/{total}] Translated '{car_model.name}' to '{translation}'") except Exception as e: - print(f"Error translating '{car_make.name}': {e}") + print(f"Error translating '{car_model.name}': {e}") diff --git a/inventory/urls.py b/inventory/urls.py index 4c261a14..44648b97 100644 --- a/inventory/urls.py +++ b/inventory/urls.py @@ -47,6 +47,9 @@ urlpatterns = [ # Car URLs + path('cars/inventory/', + views.CarInventory.as_view(), + name='car_inventory_all'), path('cars/inventory////', views.CarInventory.as_view(), name='car_inventory'), diff --git a/inventory/views.py b/inventory/views.py index 9b064173..aa2ee751 100644 --- a/inventory/views.py +++ b/inventory/views.py @@ -78,7 +78,7 @@ class HomeView(LoginRequiredMixin, TemplateView): def dispatch(self, request, *args, **kwargs): if not any(hasattr(request.user, attr) for attr in ['dealer', 'subdealer']) or not request.user.is_authenticated: - messages.error(request, _('You are not associated with any dealer.')) + # messages.error(request, _('You are not associated with any dealer.')) return redirect('welcome') return super().dispatch(request, *args, **kwargs) @@ -255,7 +255,7 @@ class CarInventory(LoginRequiredMixin, ListView): make_id = self.kwargs['make_id'] model_id = self.kwargs['model_id'] trim_id = self.kwargs['trim_id'] - + cars = models.Car.objects.filter( dealer=self.request.user.dealer.get_parent_or_self, id_car_make=make_id, @@ -309,32 +309,29 @@ def inventory_stats_view(request): ) ) - # Prepare the nested structure inventory = {} for car in cars: - # Make Level make = car.id_car_make if make.id_car_make not in inventory: inventory[make.id_car_make] = { 'make_id': make.id_car_make, - 'make_name': make.get_local_name(), + 'make_name': make.get_local_name, + 'logo': make.logo, 'total_cars': 0, 'models': {} } inventory[make.id_car_make]['total_cars'] += 1 - # Model Level model = car.id_car_model if model and model.id_car_model not in inventory[make.id_car_make]['models']: inventory[make.id_car_make]['models'][model.id_car_model] = { 'model_id': model.id_car_model, - 'model_name': model.get_local_name(), + 'model_name': model.get_local_name, 'total_cars': 0, 'trims': {} } inventory[make.id_car_make]['models'][model.id_car_model]['total_cars'] += 1 - # Trim Level trim = car.id_car_trim if trim and trim.id_car_trim not in inventory[make.id_car_make]['models'][model.id_car_model]['trims']: inventory[make.id_car_make]['models'][model.id_car_model]['trims'][trim.id_car_trim] = { @@ -344,13 +341,13 @@ def inventory_stats_view(request): } inventory[make.id_car_make]['models'][model.id_car_model]['trims'][trim.id_car_trim]['total_cars'] += 1 - # Convert to a list for easier template rendering result = { 'total_cars': cars.count(), 'makes': [ { 'make_id': make_data['make_id'], 'make_name': make_data['make_name'], + 'logo': make_data['logo'], 'total_cars': make_data['total_cars'], 'models': [ { diff --git a/static/.DS_Store b/static/.DS_Store index 804c8de60bbeb5021c80a0469774b6134cc44971..439c8fd089ec9224fdedb6c4d1101bc2ea905257 100644 GIT binary patch delta 495 zcmZp1XbF&DU|?W$DortDU{C-uIe-{M3-C-V6q~50$SAQfU^hRb#AY6WTo#_pac2t$BD8OWF%B_x}~sqEkl5d=C+o57L6 ziy@dHgQ1+Ek6{+WGKL)tM;UH0ykYpo$igVbsKltvXu@dAXwT@u=*bwx7|oc#mnzcWwfR|(``gy?6O9M3at^BplZW&kHI5mEpE diff --git a/static/images/.DS_Store b/static/images/.DS_Store index 5884e201cb561551a9ca0327faf7922cadcbc7d7..5cd0001f14b0477631b2e43910833a5d6ef1e2f1 100644 GIT binary patch delta 94 zcmZp1XmOa}&nU7nU^hRb$YdUYUz4ju+&B9Q_AxUGO}--{JDE{bigVt7FkoQVd_&|l k(`I&wZ!Ge84C$UZ`N>H+`AG~63<3-cOjm(4vdR}s0CoN(p#T5? delta 53 zcmZp1XmOa}&nUbxU^hRb@MIo=UmV8f7CH*XmPVWT1kW;WmKS}&G_k>DGrPn$md%c$ I$ABD10KZTXPXGV_ diff --git a/static/images/car_make/.DS_Store b/static/images/car_make/.DS_Store index 08ce7ad391fe7fd15bcb8f74295e512758f7fe99..799f2d613bed70b3a5857e88b1f832e37c7e2af8 100644 GIT binary patch delta 204 zcmZoMXfc=|#>B`mu~2NHo}wrV0|Nsi1A_nqLpnnuLmq=3Ll#59WJbp2^&lB;24{v0 zusD(|L%L^9esWSyeiBdxP$PpQ5bOO110aimK^RR}JcBDk6oVNw&zlb3R(5Va!K)l&QWDhd{Z6+=x delta 81 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 I1OG+;KgYY5fB*mh diff --git a/static/images/logos/.DS_Store b/static/images/logos/.DS_Store index 08b72d29754d2c04a64e3fac9529204acb356f7e..e7c247294404f01bb2eb025b50556a2e4ad62e4b 100644 GIT binary patch delta 117 zcmZn(XbG6$gHz?glqu5=SO0|O%i7;tcJ7UU3P*{sI%l$%j-Gmpek#>uV1!fZ@e xflBx`Pmw&q%wb||rlVkNXgE1f%zpA>S;ff$vOb&BdER+33;<3m&FaZEDOB=%g diff --git a/templates/haikalbot/chatbot.html b/templates/haikalbot/chatbot.html index 620211da..97890b8d 100644 --- a/templates/haikalbot/chatbot.html +++ b/templates/haikalbot/chatbot.html @@ -12,7 +12,6 @@ padding: 10px; height: 200px; overflow-y: scroll; - background-color: #f9f9f9; } diff --git a/templates/inventory/car_form.html b/templates/inventory/car_form.html index 5877f9a8..8d8ded4c 100644 --- a/templates/inventory/car_form.html +++ b/templates/inventory/car_form.html @@ -346,7 +346,7 @@