From 582c5271c71f73233b258c6fdb9ea187fe4d4856 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Sat, 31 Jan 2026 13:07:20 +0000 Subject: [PATCH] feat: Add favicon and admin panel logo to PlatformProfile --- config/__pycache__/settings.cpython-311.pyc | Bin 9646 -> 9644 bytes core/__pycache__/admin.cpython-311.pyc | Bin 20436 -> 20366 bytes core/__pycache__/models.cpython-311.pyc | Bin 31492 -> 32555 bytes core/admin.py | 2 +- ...atformprofile_admin_panel_logo_and_more.py | 23 ++++++++++++++ ...formprofile_auto_mark_paid.cpython-311.pyc | Bin 0 -> 1034 bytes ..._admin_panel_logo_and_more.cpython-311.pyc | Bin 0 -> 1213 bytes core/models.py | 2 ++ core/templates/admin/base.html | 29 ++++++++++++++++++ core/templates/base.html | 6 ++++ 10 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 core/migrations/0025_platformprofile_admin_panel_logo_and_more.py create mode 100644 core/migrations/__pycache__/0024_platformprofile_auto_mark_paid.cpython-311.pyc create mode 100644 core/migrations/__pycache__/0025_platformprofile_admin_panel_logo_and_more.cpython-311.pyc create mode 100644 core/templates/admin/base.html diff --git a/config/__pycache__/settings.cpython-311.pyc b/config/__pycache__/settings.cpython-311.pyc index 80d6799896c71d5f09027226f6ef091d8931e9ee..a5325027e36f382b930631c1eb2b0820284d364b 100644 GIT binary patch delta 61 zcmZ4Iy~dk&IWI340}u%Qt<7ZL$m=X1b&DynNR#OnQ)=EVcGtZ0oXp}3O{OAkpqkA& O0)hgJqMPd!3|Ijob`aM9 delta 63 zcmZ4Ez0R9=IWI340}wu>39{LWM%*ufQTu4I*NUYt43K?$SwTcVTwHvXsy! zJT%s{r01bE8XF&kG}MPO`h>BX#%f}WHX)|nq=Cc-6JvByS}Tdhdxv7^MkkqX&%NJw z&OJYKcl8RKzXFa$yWPUkC;s=0>}m?P`ffkO z60q*rQZ7~5bX8u8%C<|DPgQnZ!7HP5N)dPD_)E2e=`j}#4S%V z%xF)QtN>icUrX!Yk|vb-A>$*O#<2P^o+HZ@S1lVORDlLdW$Ig`!V!Y zy)|p4g``Qg#|x3n@A5%jXY45qFF9m*#AT*%S-QublwCbm(C9au<$@q(&zbz`y0w>D z#-sXVG9)MMsY&m@Sr3xhe{*0bZ%)c5=3RYu`E62>9ke1P_bC^V9a(GmDQt**U zqD00*BpmZX!XZw?B7u;oo}hYJijVh%#n%-g#E#2RAr=uB9TH>mh^Q!20@DctJueGm zZ2C%65Tk-;kotLq%84imPAEb!q6)D`heacTq{@@Tqeg`hF)Tz03rs?S910Oh7Gp%2 z^46-C*i5r)p3z>bar1Bwp`idz_GZHk?P_f?4_|0s*Ol_Hq$Lkz0jyEF2ENg18*bCR z<)*t}T&Mo=QrZ+JCR@_2BqYj8U{WS;tZRltZ}ad2zSk0jKQX;EVECDx^{F)vXIn4A zFPPod4;y&2tpYM|u5GIE9;H=3gEa>044BLIw|I(LiAp#2a@%0GCQZ25K5Z(?-D5o6pRB{Gj!)nger9qlA1(m+0}DG#;68SAmO?H{ou}~rI(UI+Bxx!y*~eBK*2_Ay^4HujY^ z{l?PJbJ1&PW=nl^c}$a1h?VUzIDqqg--1;;)_)k_8oqyI2v%_ONbU3b?DTr|T3CJw zLsX8Dgk>VEl2JJtBWl95W9h+CPT4ZGh9c60LfX|DZTwj;KkEbNge3R>Kl5d)*`AGU n!RF(-=lJ6Qt|a&0c)4-4uzEu$H+M^h(`?X`HXew&-t9& zd*40p9X$zCC&Bo(!H~pJn>*hV9WNg>+N}w-z;Vyxoz}750WJ(eTE8xkB&7Fqfn=T& zb%JGx;=|NenwT8auh~KdQ3i#|Tt^vhpt6WEDwK5{W&EES;GWh(AY~WlvB{6w&hi$1 z?O$kAt@ec$^cu?XA+xEshZo==FYr|qI>=L+>i!w^zED(8u|>qrVC&RShO=5Y6}XX&X7kf?I1?l%|PvHMA}2M4mF9x;pmep88AfB<$fR}wTf*% zp*g zieF~SSUQ3&&N=PE&e^PLNPS`-2sH~BOe|v21bTKiQytWa+63`1- zN@iw%V!%LE1py;fhZSoJ3w2uQVIpVL_)=j6j~6v2NUzaco-MNTZ~=Qut(aC~hA(Az ziIaz~WWP6$hxg^!T_%8w6y5~i$nTa;GT*aX&Vy!-lDqQopW<{=r`XXM6x&15w%~!N z_|%+ysNxMCF5w-OVfY;nR|eIW3C7QpGw`pBny~D{KdU!mxaNRvqd8U6=Z_cQrJ8X#BcIw@ z3b2gd)#k!Ayk46J8EE(Q8UCQ;E|uen2)!WJaoFdCCH&f#12&BNc2}LI=!|Z!B#2Tp z7Ll&eRNBHssh}lh-OYrR>&mOK$SfwQ_*~t7Sj45eZaZ6MJqT1~5|eBktj`C)kLz~= zk4X(K4bMUbr*VHnPLhT>nB?NA1}|vvT*HrGkU!W~12Bv8jZO`FSY4a&vnD%c zmKdQCw>6bfsJkhq@v~$LUTMlJUts%CHlrM(f=!jjoXMDVC($z>lTvKH_bljTtG^at z1RrVM318rQ%_Sz~29yIUhtc4#%?{9`Vf#iXmW#G~_+CGN58~YIhe6krIcI(axOy|U khrVZ!73XfPua`~PisqHz)fATu1t>O!^8f$< diff --git a/core/__pycache__/models.cpython-311.pyc b/core/__pycache__/models.cpython-311.pyc index 83fb33bb0969d9bb94b6d2cb8d441b9304c9eece..26c98a7f153365ee0312ea7452fa8f5f4db1b2db 100644 GIT binary patch delta 3804 zcmai03s6+o89wLkiv<=J_Jxbc6-8J<0w@m=iKu{zPs9fZE|2!_E)Y;l5X(pX!+BDEO2_~uSf9|p?yJ04m zz280O`~Uwt|M}0k=Q92go_>Tgp4aJ85nRSc=UkEfFJ=UbGPJA@*M}1-guY5|?KOs8nb$b5!o6tKL5!gwD^XcAi0YYSoebI2 znB>VV5g{Mr#r4)A?rOA(%jNQA~+$a)x}O^fFQAXcW!eo!j+!P0KQx z`Cq8Xs-Wmgk0mT;vX;KxY+AD}F?OaPY1vn@;%r@?=*8AUER5-l^fq~cmx{QeDz zUSh1!#fkjq3Y{b8y(%H^5|;Pa#-zy7q`Y&NiF_h4Ml6$OP@c%nBrC0!^2Ca9bPbZ2 zjwOQjb?`uMN~Sy3Odux~H;<=uPJuH)h=gI*U6Bjv!kNJ-KK1 zn5Ib>ayfk7(SoA`Zl56X0`H76e34YzTUx@Gf|>UbzI4FbYqKfIama?47@S~W1{l>h zh#r@hKO}f1H^0x<>l@WID<6U0YmG% zx6(PKp8jwj;jSZUJ&;Sw_Wy&si9*%`SGlT)%0DI4$ z?ugny=ybZyMznUj!!7vzc02v&p$aU~*pftA-jz{+cPLt#M~9)dTbZIjLhnp~1wq&JRK(u>vBF+;D<*Xx$- z9$~<57Y1DRerbgK7{(wo3|?gLQwG0e@GAztW^fT8k`b*e3^n4Byn#ptt0G8|exO_; zsbrov8T^a^n>;CGun8cdgL%>m+jRJ4dU;zecV9^d+uFu5@+O?K8F^PQ{Mn|`ucn7< z_Jj`~4R>~j-5&VOA>_lyxOs#;_&E0<`T%mp3B~~e1$d$Po~3AVXx376J@a~IxOm$g zTm7u9KD_s2*wGvIlJNO4_(5C)*UJLO@M#t~mJLr}vt5h?1P(B)G=^SlGbkG8)W~d` zJT_}ulx?_U+c9g~@mgcJ>lFMTvKtSx&{Oy7F}A55s|2%*2)~5F6R=hPTp(V%Ln7E_`X zRmS?IVTs?*bDE$A3d4>r`2qc?XHHJiW;xX;t983{4D`OI{ znD*>g2P`QGmUss&+IWY>SeL}4CRlP}77hirP+?!TtuHr51+fbSxvTgx#z;hPgr^-K zvtT6m85n3$b$bhW9oi9{NL)h_u?rsGpf_M!9pMK0BN>Y?wcQ^O0)u|?9E34qkU2h}8*0{ee#Dw=2=Xz5ml((=V5)oqlHV{w zJ^Rb<3=E z%cSO>!8(U)wX4$z8L?!i9yu7*@?8PG@=yZ|RMb$~hHqDGLh=b16t~ zq<^ld<#dKn{uTu```JePPH965x|NdJU{c&NVn8~jGSls~_3F>SN;rC@XC?i9?Fz0G z)0?$l$9HMn)I_2SRy2U`nj$Zd#-q=}N>L0odJ$rRJjf-_++82KK9 zq++LF+FEy511~QkN=$Fm?bWDQTaD?bb@^J3wI4zpE#J1cfP|UC9RNS@XgkSc{kt*v z12eoEn%VXxwROE}{Tx~b4q@87s}KU+tlO3$pK=mTeKTdruBjwK;&wN}Ac4Atdxhl1WnHV&MhQz;OToXF# z{1~g{BL0oGo<5KNOYfYn$9+`qD!2WIMV5fK4U<-AM>IQq9`+G!BhNF_zZkH2((|Xy z^nz;|dud7EeHEMK8LI2I!;bOv^SF&(?k_XRJ4EA%Dv-r=<*Zs*Rt%h>hy5q8iZvbI z$TWreJ%3jiuEPLrHU(ijR!)Pw6%x-pz?jl@|C=f|IDeaN3lO!5$=s&D2wY0-WK9Nx zp_aiej63NIL%+w5sBgGolRQ~@;pA$_gUkMjYx_w`oyR8*x}|zD7J6rR9``k3ym<~S qkCV=)-Se{T!BUR{oD<{XIrvw0Ih;6lsdHYoJy_~-NI~mIU;RJm{&wX6 delta 2784 zcmah~eNYtV8Gqm1+dYntJMK#k4RSyfPY@ANKwHJpe2^vzc-nZ?Yz}shoE&%b-6McG zLgJ9bj;TX@Y|}s5RBA&0fJseuI_)2s+RP+P+L)QfrX726Qk!%d?eq_vI?*^z?fWbq zu;@&7=6>_M&+qxZcb}d5A07LOI$tj;$|wAJ?BkL6zuVq)W>y)4TaP-Z0b*OFa9M)t zwlVpJt-h|l-ZPNroImKl9Odq{W;}NLreg4~lT?;gXOor%{PYpA$-R zM>0tXnc~0M=cEMBmUv-2;DSdRU88bNuaW^WB4$LrfM>POX@y>13n6TpYx8ni_8LDq z=1#Bhli8qY`7%Eh%yHwYsM->ReMKX-KIe!;i9j;8`B)DUY;rEt!axhdO!DTY<{BK4 zGjfI~u3QoxQi9|o0pBFAb;_(4sS$g|e$tKIjuKU}PC;+X*j0IcMm(G+7mhP_3*%kD z)us{5eJ-={3;W7!VGYz}p*29r-&M#$&I7v2!21-LkZ}NM-RSHKs)SQUl3! zC;;ExRWAztz3}|5`{no0_V;jZSC#Ssihn@(BZsV{5AEV%6y9(0z#EbSx;wYXA95FV4sJD-!tXj=!lwj2?))J= z1mVoTN$)`rse$F+o-El@SRo5lOn@l=vcV4%Mt;PqiY zMX>hF&J#$5JM4c(>JtL*haa;41?9gI2<)l!o#S%W*&iM5(~@aLPe;=OI&9zb5VUXd zlwahej;}#0E9b~g<=}ZF{%O3m=dfJ5R9ZPh?gGuQbAKnqwz{3UyZYZ>@cZ}zyi>Ur zW}oJ(uZhS6QjsddpRh>J^Aqtoq=}YHx+#%1$qt zH9~S-fg_s%78k z=9_hcnwqi$cLwz@4$5PeePhfeckx;d+t&Ci%B{ZB!P!4|?hh%!!ELUvTB(96tCc*a zq*hs(>3bIqK7jt-6;>-8JWSO3R^Bn`QnS#dx%6g=YAkegl{Lh4Xi=fdw0qRmV`P%M zPUYN5q>O88?$9njLSj^{9m|W9t82zcBq)#vh*~#B)U}Ila>WrcL?e~Ei4dxXin<5k z%esh*{hB9W#}R(R!RT1qBtTew7-nq65Z8)8Y0&5`IJ@8kf`y|`d5WD>{IkG zmzr!YHFg0N=1vozj3%AC{-s>PU-2M?FPpd1 zD(EQm!Pb^#g|ePV^+c2G5<0!mvSHNRqgiiHD%F$Fl)h-cu0;FeO0PD|L>_<%2zCS+ zp%B4|P>k>_50iCj$!HgMzP)bP2Cif_r1KE41y+r)9^q?*8yw6PRC0R<-9#zk}fuoO22-gVIDc_;%;E-~3(^u$s4Z$p>fG>Og1&PPv zn#yW1djoQn2`t&m}%&M zld2z*S{|&3-ACJ?H}*ZjM~^oL;9|_@cmyr|X!-NOWf17uM;n0kv`DR7)efh7n7;)r znh|jF>{}>phNdTi!TAoZBV!IPh*BKk+Z5Kh@5ygKdxQsG#to-4U^h_X&DXYJclefT8^vs+007U2vW>wA|TfZfRp5`O0% zhsKn`zg8zwLAn!um8$n)rCEFTtSg(X6YAY%`Q~5{_87tbN2!Ej_e*ZSas2!L61{|< z!Xc5lF$<<=r;VcnS1COV&kX)uigEfmP=}a&8M#YvVd%yDyCk)h zBlz)C+x+I$F#k7m3TE=X@Sms3=&+HWxk5)Hl-A6UyW^3)FYdo$a#t5x3<<52HqMZ{ c<9O^u;)=;#U1+gGaM4aWLlz+%diu@(1HX}QiU0rr diff --git a/core/admin.py b/core/admin.py index d547184..9be8687 100644 --- a/core/admin.py +++ b/core/admin.py @@ -166,7 +166,7 @@ class ParcelAdmin(admin.ModelAdmin): class PlatformProfileAdmin(admin.ModelAdmin): fieldsets = ( (_('General Info'), { - 'fields': ('name', 'logo', 'slogan', 'address', 'phone_number', 'registration_number', 'vat_number') + 'fields': ('name', 'logo', 'favicon', 'admin_panel_logo', 'slogan', 'address', 'phone_number', 'registration_number', 'vat_number') }), (_('Financial Configuration'), { 'fields': ('platform_fee_percentage', 'enable_payment') diff --git a/core/migrations/0025_platformprofile_admin_panel_logo_and_more.py b/core/migrations/0025_platformprofile_admin_panel_logo_and_more.py new file mode 100644 index 0000000..b2b5c9a --- /dev/null +++ b/core/migrations/0025_platformprofile_admin_panel_logo_and_more.py @@ -0,0 +1,23 @@ +# Generated by Django 5.2.7 on 2026-01-31 13:05 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0024_platformprofile_auto_mark_paid'), + ] + + operations = [ + migrations.AddField( + model_name='platformprofile', + name='admin_panel_logo', + field=models.ImageField(blank=True, help_text='Logo for the Admin Panel (top left).', null=True, upload_to='platform_logos/', verbose_name='Admin Panel Logo'), + ), + migrations.AddField( + model_name='platformprofile', + name='favicon', + field=models.ImageField(blank=True, help_text='Upload a favicon (e.g., .ico or .png)', null=True, upload_to='platform_logos/', verbose_name='Favicon'), + ), + ] diff --git a/core/migrations/__pycache__/0024_platformprofile_auto_mark_paid.cpython-311.pyc b/core/migrations/__pycache__/0024_platformprofile_auto_mark_paid.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..538526bfc671688ddccb8272c2ada6a74d7734ec GIT binary patch literal 1034 zcmZuvOHUL*5bmCxo!yx%K9Iy0hcOXh6J?2dGQ@}`7>y7U6_Y*K>7A}!X6bp@Gb@is z!oh<_Zu|ou5&w$^4rJoZleZyo;$-!(i$R=6b$!+K_`0e;4-Gj4pYK1{{YM5Nzcd&; z<-W2%jmj1gL{Lcr+N6QeG$=91VM{zdpo_Vol07aEIE z0F7R&7pA=itbm7SP>tnCEhRDcprHrU_*)8h+0ZddOAOHXW literal 0 HcmV?d00001 diff --git a/core/migrations/__pycache__/0025_platformprofile_admin_panel_logo_and_more.cpython-311.pyc b/core/migrations/__pycache__/0025_platformprofile_admin_panel_logo_and_more.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..74f277c5c07d50e9ad789b655854b161ffec6106 GIT binary patch literal 1213 zcmah{OK;Oa5MDcp6T1nt1qrDXWGMw=2_+Q*384z9m!ejsLgFFFW!ZQ)juYE!9H+FA zkb2<2vA6z%0&4#Qe<6n+s=adJma0AVfS7e2K!e2EJCB{2Z+2$(bD>}$SaUx=xOY+r zeV58;Wro7(5(s;UBC2@ESE`DyR#gS5=n10gM?_OhX+rE^?SphM)~YF*evYin4{5Yi zVfd~Sk=W%yTWCI~%xl}jz=Y+8%IP5pdx)W`LQz$vilbChDq`v8=u(iH$`h@b9RbiZ z&A`@Z_As{(eg|XUL;de-O&}Q)NK*+?{(nf0TFub{lz2(#Pe-*up=p~(OcWOv@7>3t zN8&n<{4nBm*JGG;Vvcu(r91tnr-ZOFB2)87&=Pusc_EJ3RxHv%$Mb~V2|Z3Ij=9Kh zvZ%(}3Q!xLy>B3W{*!T(yMBDFbUaf$ zo-OX)KAJ6lS?E1_+jCldgtnAb71(RFDcO~ldXmtyg!Z#(-8ex&&Lp`2H}@wT=`}n6 z*jCmg&KtFsz}X3$tx7msy$DyBn$>pJ4L+pmE1Q;MQM9~7&HN|S$In^Ckrnk2i%(e%QJG@Sjzn&kZj2XILF literal 0 HcmV?d00001 diff --git a/core/models.py b/core/models.py index 4128b14..efb9c7e 100644 --- a/core/models.py +++ b/core/models.py @@ -134,6 +134,8 @@ class PricingRule(models.Model): class PlatformProfile(models.Model): name = models.CharField(_('Platform Name'), max_length=100) logo = models.ImageField(_('Logo'), upload_to='platform_logos/', blank=True, null=True) + favicon = models.ImageField(_('Favicon'), upload_to='platform_logos/', blank=True, null=True, help_text=_("Upload a favicon (e.g., .ico or .png)")) + admin_panel_logo = models.ImageField(_('Admin Panel Logo'), upload_to='platform_logos/', blank=True, null=True, help_text=_("Logo for the Admin Panel (top left).")) slogan = models.CharField(_('Slogan'), max_length=255, blank=True) address = models.TextField(_('Address'), blank=True) phone_number = models.CharField(_('Phone Number'), max_length=50, blank=True) diff --git a/core/templates/admin/base.html b/core/templates/admin/base.html new file mode 100644 index 0000000..6b39599 --- /dev/null +++ b/core/templates/admin/base.html @@ -0,0 +1,29 @@ +{% extends "admin/base.html" %} +{% load static %} + +{% block extrahead %} + {{ block.super }} + {% if platform_profile and platform_profile.favicon %} + + {% endif %} + + {% if platform_profile and platform_profile.admin_panel_logo %} + + {% endif %} +{% endblock %} diff --git a/core/templates/base.html b/core/templates/base.html index 63881c0..5e681f2 100644 --- a/core/templates/base.html +++ b/core/templates/base.html @@ -8,6 +8,12 @@ {% block title %}masarX | {% trans "Small Shipments, Smart Delivery" %}{% endblock %} + {% if platform_profile and platform_profile.favicon %} + + {% else %} + + {% endif %} + {% if project_description %}