From 409e403581cce5c9dea5ba22cb3cfd4acfc21290 Mon Sep 17 00:00:00 2001 From: lebaudantoine Date: Mon, 26 May 2025 12:59:26 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=B8(backend)=20display=20recording=20o?= =?UTF-8?q?wners=20directly=20in=20admin=20list=20view?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Show recording owner(s) directly in admin list interface to speed up troubleshooting. Previously required clicking into each object to identify owner. Handles multiple owners (rare) by displaying a default message. --- src/backend/core/admin.py | 23 +++++++++++++++++- .../locale/de_DE/LC_MESSAGES/django.mo | Bin 8176 -> 8270 bytes .../locale/de_DE/LC_MESSAGES/django.po | 10 +++++++- .../locale/en_US/LC_MESSAGES/django.mo | Bin 7479 -> 7561 bytes .../locale/en_US/LC_MESSAGES/django.po | 10 +++++++- .../locale/fr_FR/LC_MESSAGES/django.mo | Bin 8247 -> 8350 bytes .../locale/fr_FR/LC_MESSAGES/django.po | 10 +++++++- .../locale/nl_NL/LC_MESSAGES/django.mo | Bin 7724 -> 7814 bytes .../locale/nl_NL/LC_MESSAGES/django.po | 10 +++++++- 9 files changed, 58 insertions(+), 5 deletions(-) diff --git a/src/backend/core/admin.py b/src/backend/core/admin.py index 41766f31..d16e90ad 100644 --- a/src/backend/core/admin.py +++ b/src/backend/core/admin.py @@ -126,6 +126,27 @@ class RecordingAdmin(admin.ModelAdmin): inlines = (RecordingAccessInline,) search_fields = ["status", "=id", "worker_id", "room__slug", "=room__id"] - list_display = ("id", "status", "room", "created_at", "worker_id") + list_display = ("id", "status", "room", "get_owner", "created_at", "worker_id") list_filter = ["status", "room", "created_at"] readonly_fields = ["id", "created_at", "updated_at"] + + def get_queryset(self, request): + """Optimize queries by prefetching related access and user data to avoid N+1 queries.""" + return super().get_queryset(request).prefetch_related("accesses__user") + + def get_owner(self, obj): + """Return the owner of the recording for display in the admin list.""" + + owners = [ + access + for access in obj.accesses.all() + if access.role == models.RoleChoices.OWNER + ] + + if not owners: + return _("No owner") + + if len(owners) > 1: + return _("Multiple owners") + + return str(owners[0].user) diff --git a/src/backend/locale/de_DE/LC_MESSAGES/django.mo b/src/backend/locale/de_DE/LC_MESSAGES/django.mo index 81077ee3b16d06314da00d23acda475c84b8d2e4..b20837ff7aff204dfb15859929a4031b01a8e37a 100644 GIT binary patch delta 2098 zcmYk+Yix{J9LMoLYFh0St?JlTwW^rjwAy89ONX{@-O)u^2J4bMXjChs8zr(&cC(3y zXe#0osf31j;gZlqA}b^=v9EaH`a+3pDkNpS@Jb@_{mncQC-Z+k=Xqw%bI$pnbLM01 zgOK|&J>jTP))V82gkfeb4i4u+d7EhF;5#h9rX;gc?7$Z6MZPls2s0mMU@B(g1T4g2 zT!eaM2NvO8q@8Q$s6=>h2|F<<*=!X4i6ika>cyu$&*K{IFQa~!lww9x8;9yRANk74 zu?(wG?YE7K{1uVruEXFK`uNN)AdfbDW@lBkD&#(l2 zj8aQkiON(L*5L_Mre2`heL^isY8v?;LnVWJXa+%4hm}~48&E&&M!oPj4#hK=iD$78 z|3RgC0Q2z!>V0YHY)l-F>}xATJugLNdR995SBmHGATWf{;y&)zGOFqL94j$7!)!Os zMV8yHq1xR>vTOfh89qg2#5Xp+<}+{}_YJ54?#FiQ#vU}6Y0$<_d0s`0_&#cFALHNn z0$B~)L>`riov6(1MGdG6=i^CKNB!RSZ;));XVmddA^&=B5Y^5tr=l0vU=}tagR?ED zf$T$)Vh1o6dvGG&K(%{`EAc&QV0AylcXt?Tu@h-w$iHk*MF)PTEDOLGN}s5MW`i>E#lwcCTp$+QyG_cfjk z$X<^Pda+WZ&Q-Ki!^Co84)HUgwOdLw5Q~ZL%R297F8*>P#}{ywpC5@Jq19I@A#^sF zcC0A3--`01GMUg+7ZO@r?W|RV@~Ki7$MQUjP$|$x(OS$TD6Y-sI)%^zEFqLfKT%I8 zx9bVzP(`~zrGn4~XeJgBDr<<QW+<9ZR8s9?gJPi>b!ex_cYb@Pg0-?MW8F@M->ZL#nNb6GQ&jQ8g}r_FDD&+B*2b1uK%_xn4iXMryTPG5}wveBxD zX~dw<%)zH&Y-o>1o9)3TI2$v=&C;<9>+m%4lYPWdIEZ8MH_pH@W6aVp1$E0ZoR5{r zb&fUCspP;#JdPi5Jk~^*jl+7>jT=0ha3}lCsPjG`m)H-~gME=^bS)Y)F#&b`Mx2Z# z=*Kz?(^L=A;m?k+(G40rn^8AzMGd3_r(ie6VK3@I@30iVB9pe_sL;TIn9qJSPQWXu z`*nKz_t39YKc=Gx_o7nt8l$lvQ}CO2Jb{yx>O|CoQ!xW`a2eKOHn!nBeD3)Zr?a2P zERwMRHKAHIPJqr~I_cPjY1ogt(OB|ZgaOoy8!-dhZ~^wBO7{yjvvNkg8h4>G)sDLE z0jdNqaU#A(P2h7h`PTz~aUculk|&*5fx2NevL0<8s&@M^6;Gp5-HA!qjk@70Bw6+r zN8%Un_#mq0e^D9s$1uPVToXh7PjVoMVJ*b#xCo!)F$|j&S{tWO7oJ11X)TzE*H9Vh zMUr4cScp-vp#cW*5c?I_ijR;}Y&Wx!CmcE&aWks6SMe;iBUP{z@~BKKLB?c-$U3uf zT!l5LOx#4hzPC~L=|P?M0(GB0jK@#N7%ZH+=()}eI%LDra3-$AM65<#*ns8Of*QyG zl12NB+i=9x(DkLL66{5OvU*g?&m(iO7F20Fy#3oq#vOY|MP8Wmhp||I zLDcKij4D+R=Hd`)z}X3*Qj{Toc81MnypGD$Ck$W~Xy zX;_NNgoE?23032}sMOy_t?nMwqI>53-skxqS={cRwV1aOY6Zkbw-*}F2KuS0{U$>1 z?ONjhR_X018^KE}Mon>45Pccu5?cth`Gme6n!B2cGTg|y+m^ER5ygaxtCdwoXl1Es znrfuTZTjpf1zI_(Ne)4C+{(?SmrSf9lt`^(RanWbBJ_n&TM)wivIOXt5No_+D&%$| zmdNmqsffxe3(@8fdeN0%wH5Bx3H|Gt#g3MiilR#EJ_-geNfYC(OXY_ z+@@tb+}6|C;q7QOt|SV*eXSxD-n}@tbE;1;R1 diff --git a/src/backend/locale/de_DE/LC_MESSAGES/django.po b/src/backend/locale/de_DE/LC_MESSAGES/django.po index c6f0935b..43107c9e 100644 --- a/src/backend/locale/de_DE/LC_MESSAGES/django.po +++ b/src/backend/locale/de_DE/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-16 17:04+0000\n" +"POT-Creation-Date: 2025-05-26 10:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -29,6 +29,14 @@ msgstr "Berechtigungen" msgid "Important dates" msgstr "Wichtige Daten" +#: core/admin.py:143 +msgid "No owner" +msgstr "Kein Eigentümer" + +#: core/admin.py:146 +msgid "Multiple owners" +msgstr "Mehrere Eigentümer" + #: core/api/serializers.py:63 msgid "You must be administrator or owner of a room to add accesses to it." msgstr "" diff --git a/src/backend/locale/en_US/LC_MESSAGES/django.mo b/src/backend/locale/en_US/LC_MESSAGES/django.mo index 4e347077081644d7d231e38bd6bbd181c14646a2..ca4b9d86cd008e6d0635d813b4362465aac3e8b8 100644 GIT binary patch delta 2068 zcmZ|PZ)jC@7{Kvox~6$u+HzadmP@zN-KMps={DP}mHnC1T4mnt#SkyF7;et~xT0Oc z2!fNA!T#ODdfDSl_Z8(NE<0-Vi^In_kFFA1nKcEB7pc9$Jr8tLcu$(WwzY$G&J34R| zuEQPJisRUfXYelkrRXwdU(0nnuErb|h#2S4iHETXFJczw(2mxyj4td$S3HU9@C@FK zGw2ppGFw+Rf)C-VXr|7h&rPFS@hjefvrEapD_BHc9Iz7a!L8^IN6`+)kh+XRScPxl zTAV;reI8fgCA7cak)*|6I3F_=>HQ^WrkA6cTvt4kspxRK|^7N%8?AEBAJfP*-T zrhH&oIaOJb;1g|4?8-)@!$PUZV0aliDKH!_hzYSTCP2Hwh{@FAi?U~xlnN3&og&-ZeS$EkP+ zXXC{CBOJ1Tv#=X^E{WIZ`0_V!4_?6uxPDwj6>dQX-kG@@`?=qT{_YC$NZdwW{1@_x zsElYA^!ZM#!xdPH{aEHwH`C!0+qgKuPISP1=mg%udOV5~aS(mMS?tA2$RZ>6KygBI zv6K5eK8SnK@eXD8$IuBJ$ML3mkdCPt#%er+kKyI)`@3k0OPHN6uEaL1!w&4i$8kUA za47RD1@2!(hKet-&GUbrj#WL1 zn=toiab<6!RsBA)nD`NW@HU$IG5ouvOrio^z-07=Ikc#I(cis=X6hhX)B{Me;~2K2 z=bw(LzKT}$4RpXV4zE>RjaKy(^!r9M)pO8P&O?eieTf-cN7$Ysy3<}UqtDQ{4TNoG zk@PItb%Q-O=4CN4pP(hNfUCP~URDt%+?*^YOs*SdS=mg!&GWI0SWk2jwmxDb!SPC~ z1Jc}?S98!zShkkBZAp4%cV48^Ks-yhNtMKN#5BV8JVD{4r{8;\n" "Language-Team: LANGUAGE \n" @@ -29,6 +29,14 @@ msgstr "Permissions" msgid "Important dates" msgstr "Important dates" +#: core/admin.py:143 +msgid "No owner" +msgstr "No owner" + +#: core/admin.py:146 +msgid "Multiple owners" +msgstr "Multiple owners" + #: core/api/serializers.py:63 msgid "You must be administrator or owner of a room to add accesses to it." msgstr "You must be administrator or owner of a room to add accesses to it." diff --git a/src/backend/locale/fr_FR/LC_MESSAGES/django.mo b/src/backend/locale/fr_FR/LC_MESSAGES/django.mo index 914c83ef5646f1243d2a38426b7d1e0192d5b4b2..cb8e995cd6867f024c6798292e20a0f693c7bf1f 100644 GIT binary patch delta 2105 zcmYk+e@Inl9LMpmN@k9R^D!HrB^Mr&D2U;Wm%b4_Uo?S?J_QN>h9Hk{o%o& zf}*jAVShwF+@i*)KfKV0#-K$A1%ntBjHvz*8c9J#^k?tSx#y1_{GQiyj`uu2zR&ZV zKN`+0ah~L4{%n-(#8e`4w3&k=pKzf(A7d87|8W+!_|3|&8{;^D{L8Y&n)xsnv#}7T zV=+c>C9278EWty_dyZYA66L{FJb?ajW)rawC*Ubm!xua+<5upkp?>EdZ^o;ZkLoy# z{LALyT&zRA{~hZ031rN681ppM6I3#JFn}82W#rGUa#4dfJcm#nJwOfYDF*Q+=A$nw z-Ek3a;JyUaQ7@|FV_1j%7{GsVtWrJfJ$Qv0NCv&CV;>g{C>JMT0nWjQ_q+|2`Y39~ zd$1h8$67p#mG}r}<2XhwD{&e|(V0o*02Ti1ESCoS9m{Y8BUr%j)lefY!-J?9|ApoF z2usn&D7BPTs7(EcOYsaUQ;$*ay+tiac7XhUN+p+kXa;jo9aiBy+==?(PpAg_aTH#} zJp2`l@g^$O!x+YwsP+OmY)qVr>}xAVJugFLdO;5PSBe+$U}grRMQy@w8PyDYh8oDI zTs90=p&Gc3dhZsJBpbpKeCU}mIo)w7Dq}UMrRv2_Jc_6BokN9p>^Re*Z#$2g=^$!G zf8q~#2bq*rlSehwgt}jc8qi*>#12%(E}~L>1=ap7q$_*q{eJ}67UsO6!Unbsemw=V zQU92Yn%Nhq7nh;-N)%^dFS6|R3+mgELJd4XBl>+IwqS*K--jA#KeGHbfMn3I6cvr| z25RL0pc;69U*ZeY0K*08jFh7WSdBVP%dr9ba5?^s73eQyxv&=o;oj`5H&MHN2$_`KMa^s&m8oEe<-zHw2HQ|G+kx8c3Dgqq zL$!AVHPBPYUU%PVQUi5_$`YcPSWhe>))3m1YYAnfiTJo|^KKSn>*;B}pi@gtIn-xr z9idW6%q5t%TdF+;sdLL`Ts74dgm#IBy@^mhRkVOAA@`a-YdQv;3R_5Mqfi`oVLqqE zn%OEs`Outo2$i$#M1)W&Pvf4Ouc)^XE4^o1aSJh-&<8+8i>SP^A>Hq&cA<`dO1*n^ z%)X`)Cbajpm`eNxLT5*1Bca9Aj#6Rsxd&DCB0@)DhHfZTY252-u2Jtkhz-P2?_QfC zpt@ex;Z)Hf(|&JE-5GOobY62$dw0C6Jr?TR-w{hBZEdG&sh07ftVnBnPck0sNhCvE fiO#M>{Pu6%yW@#i(pq;XL*K+cewu0z-t&I|w-~#* delta 2006 zcmYk-Sx8ku9LMp0u9;eDnWZgin_k!UOwHS(Et=)hrnDjLP_#VML!GdspcF!SkrE;( zh#m?vA0+54Ta2QJKoTN~9*P!?(xCeO&OJgyb3QZ2bLPza|1-DN#T|a9H!kF&QEI6Z zsQp1^4n7IxLg@-O+kp>pD&`C~%ff2hgZ0Rt>=TAzKStwkoP-e(W*L}<8nPOFScAOh zSObk3ZZzUi{D`A)`v|jC7K1sMgnGXe$6_Uh z;2sRsQuou~pB>?%0Zw{0p$5K$n#eUwz;+ym-KYx zDg`fbH1?nt@Fj-$>w|;b$i?ZzNe^y74Y&o_kG30?yM36B^{7za#8hlY4fq-fmc7GZ z{OaBBN9Fu4D#9UgL}D24#1VgOx@@MEg4aFSp`tY)67wW@( zsEAp7AXUY9fbME+#(T&kR>5kRgY9%^Xr;$cD>{V-@jNnF`-94P4DnQd9BM*7REp-J zBDNbD+YWgB1|;ov9@&@Hg5&X;cmFJ5Lo@6|Mc@Hy=Fd>arx*R0n8?w> zTAYbja5la`?TPRtvjsR4$(rrOQapi+@Da|z2!7=>&LS+)`9DoVyZ-LTjliMN~yZC7-&Anyy_~M%B4p zPW`{sc%1?)Z!Qc=a1>x|yXjPAU&TjN{0N&{H07Z}%-y0m=pZZb+9le0)l|hrML$<6 zgvc#vT(#}l{q9ej5=U`tK38o|ZPgW2#Y1aeLRHLasoD)HnE~7b?WbKyE%ELtk?X1P z)NJpblBl?{;cOaJyHH0!rO>@Pf&Y4v>8z$In+kjdRlgo8Ra7N2LmjVhMBKv0anAzz zbBmHaR94d1=yf=P?v`Eb^>Z**Z5^akH7Gh{93WfP_CCBZxb0lz#HhAc30=eg0h&{( ASO5S3 diff --git a/src/backend/locale/fr_FR/LC_MESSAGES/django.po b/src/backend/locale/fr_FR/LC_MESSAGES/django.po index c7e11cf0..c2f443ae 100644 --- a/src/backend/locale/fr_FR/LC_MESSAGES/django.po +++ b/src/backend/locale/fr_FR/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-16 17:04+0000\n" +"POT-Creation-Date: 2025-05-26 10:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: antoine.lebaud@mail.numerique.gouv.fr\n" "Language-Team: LANGUAGE \n" @@ -29,6 +29,14 @@ msgstr "Permissions" msgid "Important dates" msgstr "Dates importantes" +#: core/admin.py:143 +msgid "No owner" +msgstr "Pas de propriétaire" + +#: core/admin.py:146 +msgid "Multiple owners" +msgstr "Plusieurs propriétaires" + #: core/api/serializers.py:63 msgid "You must be administrator or owner of a room to add accesses to it." msgstr "" diff --git a/src/backend/locale/nl_NL/LC_MESSAGES/django.mo b/src/backend/locale/nl_NL/LC_MESSAGES/django.mo index f8ed350acdc3b6d6bf3c503dd3a249e27a09ea2f..900312f09d27bc587f66eb593b65e4a4c32e1f4c 100644 GIT binary patch delta 2094 zcmYk-e@s}0Kqb`paYG1Fi3>_%{78P4r~&>M>5)jqxY458Jj*}u z4=2l7$sevM%XBk!lg$m=*w`xit3PxMYfk?#H(HKdx%#KA-k)<%ThH$Iyq@Q9&Uv2a z`#k6HRn<_ndp9HbQ={xAa){(4GZ!B|!GSWHV&>p4xEfni&5CgVdvO%`lPy|c7Qhgu zVK%P7LX2Vq>X8FjgzqEwxptmPCnqlBAf_%fdlEmy#dr$!;IqCLu!Hs$)OD#rGj6q| zsE+fHKUpc3U<`HtLDcneWXyI9!ELPjmia5;9OyNb#n6@GSxLk(WSVtj~E%wqU@P#tc;_fRvQ zz_mDo&tia4YAMT6nHt7g96@F34(h(gs3l2DC;v}T36T%Ypa9ijIhNvH)P*0R9(Wq( z<2elD7g&g2qf-3<^KcIJyz~q&H>gpG2PT+D$4N z*^mAObEpyjiBU|ZH>I)^^?;b)u0`#U7F0*B-@bbeh*z3!cBTt`I@Re6zUCSE0~i6%lbX(3)B8j1gxU4CODwtccZ5OFK1Jx>%6 zuMjHwGL#VX>J{bgzrswsvWBCkT2E+*n*I)AC!wNgs^ogd#D5TN2BoEnSf4oWdJFap z4RUTT6IuX$0k#lYgx!P|Sw){Nl`>*8(M~iFDjmdYgceMTuA=u+d1YgH-%;gO@2rZ} zPrKQ=K%byiLW>zBwh{U|sB99-?TL)7~1 z=a4U6;%4n}743uyqHgTll#@x}=64Pa^uBe-$vyIJpA&!ET8^kT)*AdinA_|)@%>KR a$#r^roWAb3(`WUL)8{w4<744SIOShjcd{b@ delta 2006 zcmYk+Uuc$99Ki8kb91e2HD~r(>)+PY&AF{|X6mLhXO>e--Ez)wg@vwIVR+$H&k!t1 zCRBD&OmCuy7(~3-KQFqFK%p5zM6eKs6beFrcrVH>>id1)bJ1bH=X1`p=XuUKzjMy} zTF+E>cB#Jn-Jt9t?j#Cj5gC40!G&_JGU9nWkImS5V?;X+;3ytJ{uS47E*7vB|G~Sl zsw$!lThLDq;8Gk$-pk@Bm0@m7;93#zbnd(Ng<5ujzE?kZK z@IgF<*P#>I$0h5f@(Pu9%wrqQq93XyzkS$?&iE*H;3-^&)9BJ& zM`t$3s5jsUnyC-a_s*b8@B_}r8FT`_)scTYyv~jLaWQ%F!CmMF_agf-4xnrIBDUfY zG}Tksgs0ID{)8keF5?{hJ>4&$YyK~q;qrP0cmwa$lm7$UXku7q;27G$S2&87(GPFE zwKT9HbYLTBDo1ezPN2`7MVI0NI+3acOaklhZG0I?R+KRtt^b2I4#rL=pXV96>=b!W$Ike+tXoi-f?{_1A(Z_{k$J6L@*%%c+cnDpqal9Sh zLto5eKb}ETSjj^^UxV(Eg-DX3AANoV?O;FJ!C`b@S^ED8WIx6vwt41~Nwy#dEC#X6 z^Zy(bmNE9@8hjN^_1EZT{07a?RW!8)bj>SBgB?|&1I(e%H6ok4cyBpANmv|&6R_CN zW}?-ZY#}xfn~49H;ne8HZSVBV&1DZ$b1@bZPY{-+L_5JWi)BSpNL{h4;_5-(NH|32 zKR^r;mL(;M3v0E7a5tHj)kGIT$%+f(s(bicT^GO;{|MnC>>iogng3A8@ D1WBRw diff --git a/src/backend/locale/nl_NL/LC_MESSAGES/django.po b/src/backend/locale/nl_NL/LC_MESSAGES/django.po index ddcfd676..3bcd5b5e 100644 --- a/src/backend/locale/nl_NL/LC_MESSAGES/django.po +++ b/src/backend/locale/nl_NL/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-16 17:04+0000\n" +"POT-Creation-Date: 2025-05-26 10:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -29,6 +29,14 @@ msgstr "Rechten" msgid "Important dates" msgstr "Belangrijke datums" +#: core/admin.py:143 +msgid "No owner" +msgstr "Geen eigenaar" + +#: core/admin.py:146 +msgid "Multiple owners" +msgstr "Meerdere eigenaren" + #: core/api/serializers.py:63 msgid "You must be administrator or owner of a room to add accesses to it." msgstr ""