From 1654496646c38df61b989545c1d013384861da53 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Fri, 23 Jan 2026 12:04:14 +0000 Subject: [PATCH] dem13 --- config/__pycache__/settings.cpython-311.pyc | Bin 6502 -> 6502 bytes core/__pycache__/admin.cpython-311.pyc | Bin 2408 -> 3223 bytes core/__pycache__/models.cpython-311.pyc | Bin 10293 -> 11494 bytes core/__pycache__/views.cpython-311.pyc | Bin 13932 -> 15053 bytes core/__pycache__/whatsapp.cpython-311.pyc | Bin 0 -> 2912 bytes core/admin.py | 12 +++- core/migrations/0006_whatsappconfig.py | 26 ++++++++ .../0006_whatsappconfig.cpython-311.pyc | Bin 0 -> 1344 bytes core/models.py | 12 ++++ core/views.py | 23 ++++++- core/whatsapp.py | 62 ++++++++++++++++++ 11 files changed, 133 insertions(+), 2 deletions(-) create mode 100644 core/__pycache__/whatsapp.cpython-311.pyc create mode 100644 core/migrations/0006_whatsappconfig.py create mode 100644 core/migrations/__pycache__/0006_whatsappconfig.cpython-311.pyc create mode 100644 core/whatsapp.py diff --git a/config/__pycache__/settings.cpython-311.pyc b/config/__pycache__/settings.cpython-311.pyc index cb560c3ab3d7778702d757c2766120b8c9cf0f41..71feee1e5d237b46ff51c01a752735a864ddb902 100644 GIT binary patch delta 19 ZcmaE6^vsBBIWI340}!w$Z{&)R1OPZj1fT!_ delta 19 ZcmaE6^vsBBIWI340}yP8-pCar2>?741wjA+ diff --git a/core/__pycache__/admin.cpython-311.pyc b/core/__pycache__/admin.cpython-311.pyc index 214e0667cc2cfc0cb06b6c529c9bd7ef74e2a6a0..ab1cbbb5f162260a3e0bad33a0217d8c1e2cbc94 100644 GIT binary patch delta 1392 zcmah}TWb?R6rS15?j}u|ZPTi0sBP4yx|J5JMDU7LtfHkT3PN6%nBCfxT60j@?eG&CVQuIN55YO4&N@I&ocD_BAneUvlb0(i7b6w$= zt*tEt#^VgjewAwBsL&(S_6&sb{*<2*ftYkEP)j9fORbtvf}TF_=^;=5<>{@i&d*cN z5cUkuJj0;s8ZaUb)Bl1J@&=|m1ag`f;aOs+5Enysw;630iPruF{Tj8Uw2{vizTgH; z<^f?(n;pJ9nJ%%B>FJZj!bJ8e-zQ|EVe|`jxXesT*AWZpylJU?UbruZz-fi}QE@=- za>Wbs0sdS(Io1oRtrlkrO}n;(b^NttMR0KkLMOr&glz~>1cxeyQnv$q*q3nmyZHsV zi|3>re9m_!qM>&HKohNgly~!0U$mzk#lMIWXhTr>h}g*wOA(ha;SrAckxZkO#@|V& zW1CS7BE=xzA$zqB!q!nb#GlB?*e>+_6*7soB>yBQDo#PDXJGyrf+v033BnyRM@*8U z21yA9O^J8O1T}~%AgUA@O+Ca{A%~P~Ys|>$98Dp?7t4-VCX+usNKmV$kY!Tx%% zzd>lAYq=x(F!@34yf^b;=Dn&dsoJaEi|TM)9bWJcI}NGHl}+0gQ?XmUL^EbCr|Zy0 zr!Xjf*yC=(he5Ou;xO4!0LW(Tx6-kMWpZ}me@|%r xinkw?GQH#{LR)pqY|q2+BJHiy-iDx1sAMBNNz`KltLXTSuqqNEzHz-%`ERY^HUj_v delta 683 zcmbO(`9g?qIWI340}%YPD9)VDGLcV$=>+3M4J{5v1}277#w?DBajJ}*ljWFH*}0$s z8(;$55P``|j4%-%s7MH0gcmBZ3??GOm%CXhG2P-TElw?pj|Y)?iMgpoe3ONkyV43E9Om1g`YSWp#oz0C=ck(|rQz<1Z)|i0AOeXuX ztMY*T2IBi^@=yNAX;y!WqbM~!v$!O+=oXi6eoAVNBPb?{z#$9vKG=<58^Ok)`rsFb zO>TZlX-=wLkuA_rQ2Z6|2a+F{85tRGFeqF=MK>6%E}$X_G(McW`5ad%BOe13qsa#l H0ge;^ba#{p diff --git a/core/__pycache__/models.cpython-311.pyc b/core/__pycache__/models.cpython-311.pyc index 1e2cecbdf01e8dda2341712936e8954205486a44..29a337462c01d5a698290de3d9e2021f07b2d3e1 100644 GIT binary patch delta 1777 zcmZ{kZ%kWN6u{qY`}z+GuM{YZP+AHsH3-5S1Hv*pw>8~dB>`RRoaL?W$;zL$d+*Hz z5>r@+*=FL3cRFV>!;;A|!7N%ee&nm)UQIvXON{>#J{eP#Py3?hypE1P?!Mk%&b{ZH zckVg&^nE+L@kZ4Hhr`am_%JRfHr$I<4dljG2OY#3Vg%;`Bh)Mwn_@KvMzn~mXk2wI z8yIE4ADO;*T^yYrK3oW zLYxvb z(~QVV(osseHEsxPPa)1AUd_dwSIlG}_mi6?WSIWaFw~MnMG7$r&>Vs|1#gsQVgj#- zQko7n`pp+m{T5X{4Q3uiJ~!WZhnP^Nzmodgi%qW>$N-&h-e|jwdLv?3w?qUG*AXVf zHTu4%qeTW$v&K`?(_&JQrRPwSM(hYSi|g6kU!KE+MLE9ctfNQ0e?Tms@AuwkMxf}Y z2e8CbP@AMudh0Dcg`23oNk>{gHlc_a7zzyijXjWodu0W(OyIU*mWE(hHSX?+s2S{x z6PS!XbT89hFM$=IJ@)DP=8%<{l%#_`V};5H*NQ6ex=1E#pQh*8u3?y`ab z&TV|`DxEvCeekZcqQXC}-_FKcO6Q8iD~VJx5->}Ch$yuo+7TT9trE_7F(r$!BtI=` zuAQq`dJ3GUq)s$$MR?J}gkhvRAYO$j_h9|!%FnvHA$wVE?8&=(3+~=)mFu3CPk7ba zpZ5$DJOiq=sq`zo?=HB;%RK`N7A6+xNpX}NI%T_Xpx#v|x@B?V*TN8yJ_TLCpc!RF z(zB!gHrHp$1u4~|D;5KFEcPDQ%8h_I=I82~k9yR)=ku-Kbl>T~p1#Nsf5mT^FG`p;~MQl=>kmyyZArK+(u`_yD;T%06S{O zd9&sM=Us9xIaUARysxj|>svdda-lpIDsZ8>@Ve8NtuHuzOYo>|NAj)xh1UMH5p{S} zJs(q@V|nLT!8tZ}dY$v*oBT^bcqZ>f?nk~qp>n}I_gb*P1?R#=lYt#9GW)TKds|Nx zR>HneWcH(Uf0##rNR)22W(lQN{m0oaVC#DB2fvXVxsO`2X1T=6yaG3}3Tw?I^Uz~< z5T(x%%V=bjD9R5I52>-ejeP{-2eh;O0;!`n+V36UQKf&`^be6Qax=pNX+p|&VOFOAS%%Anw_2k{^9A~`Db)H*Of-g%#AcxHy#x$}N3(KL(> zO^ulef7U#@lsHb#Rr9ZC)@}PaP#C&{sDw2FdA9_3wRE+0nd2r)R_xH zm94n#RjY0-@I?WN2mC*{4oh8Ty3Ub~+FnX_vYq>`;)lDxjU5=;z`iguW_z_jW$p(t z`v1D&B7{Y*_bkUzS|l3$u=gc3IMR1Xf1_HDG!hPa}etQq`6`+Iw diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc index aa0fd4f92da7599494d777dd14f1cb3742fd880b..f76538a3cbdc482f288d750ba35cf90f1eefa96f 100644 GIT binary patch delta 3755 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 delta 2556 zcmai0ZERCz6z+T5uH8q!_QBR{YfHC|cC%x1<7<#HWrb|uz-=g^P)hFw?$&k9dt1S< zI6_D?XfSZ1QKP~ih6~1MnwV((p~mpX5dCH1jT(QM7>vO`#t@C3^WJ{27UP@r*?rGB z?>*1?c+cJK+^;F;4Tq!7gzKeQP5om1WoH|^ba}(dV+|KfhyAhxF`!sw=LORW+T0{V zu@0|CsjEsFM5((<+68XbGT4o}#wuM1rA<}R9+Wo27;A~ORO!N~TURBGptQA0+AFus zm?B=d#eU1*mZq51kL(-r0n3D$1!2xMP}7A1-VN7m(T6+eu?Io73(Fe60Fyqp_r zmgkc58p(@9b!W2>#!K0G0=451X!!$^)4HxtY77=roKMsf6CRqrs zw~a5)pmr8ri3-#zvYL%AEXoQ$NT=M~ihp?Je7 zq8y7LD$1}n`KyJLKTT&S18WoRNMtg6@mVEqusVhYDKdH<;hgEGhNhSIfiExu?{+r9 ze4qhpeg69h*N>r@(OpO3tUq|7qHX@4sBSx*;Au5|(&&^p`Ciiz4lSo;l(bwRm_&oq z;0nA@=;03nPRTP|VnK~T&G2yE(}KJWgqy>#Vt%l-qgsa2-eU>j$18s7|`gxZg8!84KC z2NHJ>zdZyK1d{~fVoAouqNAFGP@FUM3kg22WHYHmQsMKccnyYn=8??R9i% z`8z#PCh^apBYeb~UNT?vfXCbnSHek03mzz}Ih>-wR`_Tr3a__zvKHDg$CVBrgnOeq z=&l#ml1X+hnU^Hl^_H}P+-?#-v2cL8r}$BP=A{(O@@;Urcc)9#VF*=NJw)j2YiIMY zt#7v|BUexsX*I5{$U#M;iK>b_T}qB#qnyDBs~P1yPF}?@68F84wiUJCK{9e=Os>KO z#}r4b#tpA8mOQS?hM|}+W}3Wo5pjwY(_SkQPBWQjQ1cG{GzBg`^alF|x}zaxhso#= z`vJa<=8Rh8mHu$R7c$&;hE-L1h3j=Qy%^sJPY(h_Xj>i_Bg$ydn|u;@DhWc z+r4nA$**SX(V(zo`;s(AJt@|lyZH28?Fve7mNeKNb%pi_p^a{TWY@0Pf!Wx&Zl8`# z#&+QoS4mMnF%>^By?@ViY-R>t8ICR!n+Ovz;HQg9!9_MiJmn0DCYd9xn3EzAHswq* zm6H{{CYO;D_&q*I9-IkHQ%|Oq;?${_2sD}tpEAAXxY{pMLoA|j?JTHEB$G-eE4p9_ zwO^9OcP4;MH{jalO|}5;ry_mu{pMd-Kit}~{RsD?Nc=}&3|0F2i7y2|Mo%>S#6%G{ zS#*}D1gE#Jns|WpK7@Pr9r(q|rIb fvq^Ga@ZFV!Xc*3qbcGw)IBE$?+Oo({2#5ayDf9)V diff --git a/core/__pycache__/whatsapp.cpython-311.pyc b/core/__pycache__/whatsapp.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9b55fa8d3a832566c7c87495d68da0dd3658c5a7 GIT binary patch literal 2912 zcmZ`5O>EoN`B4-lN}_DZviz4UX5%!T>RQ^8rZ8+bi{hW4b>a-QfjGVhjQC{9kw}%K zCP$D4W7t6pHZ+F;&DI3f$?cFHav9)TQK0L5*nu(#SRh~^z))bh2?z!hKJ|N)DOpbX z`1tXA?|uK@`#$MQzu${sJV~mVzqk?lFIm`wK1N=x0`eIWkw|6Hdh1KAQ?Pbq9XWcP zrjSUB&a5-XtTPmHAWUt#Y$4daLm~7G-qu)WMdpua-6K*fDB^laHkTum$*Ne>GSY_n zl2F1%&z-cOsquV%PL@)cjijT+Zb2{<5#wI{58!9WgR~Qen{8FKlRRw-k^0)vZBos4 zv`s^h9eAI$cPb9){V}Am?G1DRDUk}TS>bE#*4j>Ys1SsvOn;7^p3(^+b55;ZzKe=f*`c`0j!ojJHPlHhXyXWJeH~n6MCT58@T~1c#rdw!D-i;m3AUK=mF%52#q z2EXpxae@wbTchGFdusuEb@F@ap7_e%&32~5(0$8FWvc9}oyb{-U+nMpS)`6RM!TXO z>Tq;0FAiS2w{2k$5R#5r)Z$FG$ zEUVB^JQ+11B(==%aA|x&QDlWrVJ(>^ENw|itJf41LCeU}G{0;H?!>R(jISg>QeyS? z(!#PCJlik99I^7(8gX;~86nk*KJlPOurO%{|amXflF#fZc7#|v6o zRx%}vti(aD)Ij^>>VrH!q9#mqMDakzSfOt+TF zVY#5a+=FA&rD}p!P)oz@;MidXOEq4T`O?^;kjY|^;Kce)7;Q>I9?8BiFa-YwtT#7RvxU8zh~!-~nIGK#91p0+5{m6bO($O$IdG(8Z- zgeKp|lIh;SV7#U%q$QeO6+>3E#C`n0bQc9h0?j6^YKrMra6T&}vB@gD2HRSb}Y*BAi0{heFze>1t)%q_D|Y)+nQ7n})oZ zJ^|8|XhmHi?LZ-QO|+|dSyHj-x3L5*eWjo|n} zFuEU%?)K}!Xgzq<2wpu1&hH23>%m1MxL9>nT|XZB`kTnX40OOD+w&>+kkiB0cRv9D zv(C;L?3~WdHG*NnWIsQ`XfnV|zAWPUn#jeBKOQiKBNp~UVDKrcpMUSUSP#q?ftf0E z7(V-SO&_1$ov(-EMmS#eR=qC*14e+aGL7&VBYY9oz5p>MOzh}+*rN~rrp{h7*lRj_ zt0RbEl zz`3^Pn_dnK3!VAv2er^w8@uy+=k?I7dgzuBx>aQxL;M&1zx)5z`=qz(f8h%mzR}v{ zecwghck!za4kl*zCuVoo>Jy8`#NytC{fT9LV)>Bk`*i8yl0G!^d;tK=IyY-@vpP51 z2n{}Z?*}-)`S7Mbd}p@+0OlV1AAbw0b87~-rgLkJ(9okRb|S-8?Cby@utWRokUqTp zujJla-=@Ax0SdFu-Zt3VI(yp+XtmIK>~w|!QOTY9!=)?epWgT{>2F5kWAwLU44~hg zjZZFKLf`w|Ch(H?#;@t`XWzN;F8%L!8Nef6Wehk?Hz{XQnm%z;kTzuKj8dvq!LA%s zU{-B)1`ibC%~s{JiG(ENa3Z0c0SVTn{s(#mC{iu~IAUjkv5>`Al^Ix)|AlG_K$E5@ zs)2g9t*3!{wymduc)fcz(0RRkzVM7x2My22?Z{ literal 0 HcmV?d00001 diff --git a/core/admin.py b/core/admin.py index 3e1ca68..ee7d00e 100644 --- a/core/admin.py +++ b/core/admin.py @@ -1,5 +1,5 @@ from django.contrib import admin -from .models import Profile, Truck, Shipment, Bid, Message +from .models import Profile, Truck, Shipment, Bid, Message, WhatsAppConfig @admin.register(Profile) class ProfileAdmin(admin.ModelAdmin): @@ -28,3 +28,13 @@ class BidAdmin(admin.ModelAdmin): class MessageAdmin(admin.ModelAdmin): list_display = ('shipment', 'sender', 'timestamp') search_fields = ('content', 'sender__username') + +@admin.register(WhatsAppConfig) +class WhatsAppConfigAdmin(admin.ModelAdmin): + list_display = ('__str__', 'is_active') + + def has_add_permission(self, request): + # Only allow one configuration record + if self.model.objects.exists(): + return False + return super().has_add_permission(request) \ No newline at end of file diff --git a/core/migrations/0006_whatsappconfig.py b/core/migrations/0006_whatsappconfig.py new file mode 100644 index 0000000..47f0ff3 --- /dev/null +++ b/core/migrations/0006_whatsappconfig.py @@ -0,0 +1,26 @@ +# Generated by Django 5.2.7 on 2026-01-23 12:03 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0005_truck_registration_expiry_date'), + ] + + operations = [ + migrations.CreateModel( + name='WhatsAppConfig', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('api_token', models.CharField(max_length=255, verbose_name='Wablas API Token')), + ('secret_key', models.CharField(blank=True, max_length=255, null=True, verbose_name='Wablas Secret Key')), + ('is_active', models.BooleanField(default=True, verbose_name='Is Active')), + ], + options={ + 'verbose_name': 'WhatsApp Configuration', + 'verbose_name_plural': 'WhatsApp Configuration', + }, + ), + ] diff --git a/core/migrations/__pycache__/0006_whatsappconfig.cpython-311.pyc b/core/migrations/__pycache__/0006_whatsappconfig.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..32e57b7639f1fd0e78c39a79b6d0e069f9c9b50f GIT binary patch literal 1344 zcmZuwJ#5=X6h2ZEEz+_gId-(Pl7qNSmBDg`7A+98a9p@>n*=SAG_VTfdgh&ES`^71 zNn6t7p+m=P$Xi=r9|bn)0RO92|tVBA!+Q#J<9l%;(~N^TSPPWSZQyYIbs?}tCm z&6x<+4_09RnnUO>DNI*>!kpd!<}sp(Dh}!?Ev2WnR0XN%6GYW-5zR4W7i_b22;9$S zQY%NbyQqGAFPmhUs5%BAosS%wxn*OQEQxQl+D`aw=ll z?(|U*no5nnJ2Q1aHQ0Hok7f=vcm$kmwN+Y3k%g&-8q^%k9;$$XbA~FuhSC71(YaCS zoWBbx(wN!;sywQ^?ysZKdDs`fS4Ru4mIbmg=^_;7k}z&hD+1-wERQpBWp#D+T^#br z>SE41b`WMI!>sSye1ItlnJ7KjAz`rQ`|FAel1ZhqX*M3F?Hhb_(kNX4wr z?H&QUE*l6VVB98-J!GP|$N07vFzk{Z69(~Z9C}^mKKmQe8kQfBZHEL)YoBi}-IMCH zd!&yY=61pzegQzj3>ZWSrRQN~VsJNAEq%rY@RB_EaJzh7f;BgCoXpO!15B*Y-eW^! z6Jn$+1el?$O(G{uQNv5q6qm9bqpS=KHFI+DzwgJs1J_O?2VrD7dfR3W4aAJ+r_*+) zF)IouDix%W36us6_Fm-C2VY zZ^#(JSl=N$V~aOE&tb&PB-8WRWY~W~r(lR)ZZvni9&1M1ksC%$)@K&D;mv)IcLSeT ztSJYe`R_;4gi&}8@5@#b-?!3MulNJ5gR_)KCior5!P!o9WW1l`)CK+ER$?Nf{+&54 z)J`gw|EMg+)oYLT#?@;_+SBE@g=3e;)!?`qjH^Lh4o@m?#I=e6lyLH-DkO1@Ra6W4a&L`^WYExZaP;gVgxCG`@bc{Pe51wsl