From 66250a896073356b69c5843c9d109cb4bd3252ee Mon Sep 17 00:00:00 2001 From: ryaningham2001 <ryaningham2001@gmail.com> Date: Sat, 7 Jan 2023 00:54:51 +0000 Subject: [PATCH] sort rep registration redirect --- UWEFlix/__pycache__/forms.cpython-310.pyc | Bin 3455 -> 3824 bytes UWEFlix/__pycache__/models.cpython-310.pyc | Bin 3236 -> 3474 bytes UWEFlix/__pycache__/urls.cpython-310.pyc | Bin 1754 -> 2019 bytes UWEFlix/__pycache__/views.cpython-310.pyc | Bin 7211 -> 8198 bytes UWEFlix/forms.py | 9 ++++ .../migrations/0013_alter_user_club_rep.py | 18 +++++++ .../0013_alter_user_club_rep.cpython-310.pyc | Bin 0 -> 611 bytes UWEFlix/models.py | 13 +++-- UWEFlix/templates/manage_clubs.html | 8 ++- .../representative_registration.html | 37 ++++++-------- UWEFlix/templates/update_account.html | 14 ++++++ UWEFlix/urls.py | 3 ++ UWEFlix/views.py | 46 ++++++++++++++++-- db.sqlite3 | Bin 274432 -> 217088 bytes 14 files changed, 116 insertions(+), 32 deletions(-) create mode 100644 UWEFlix/migrations/0013_alter_user_club_rep.py create mode 100644 UWEFlix/migrations/__pycache__/0013_alter_user_club_rep.cpython-310.pyc create mode 100644 UWEFlix/templates/update_account.html diff --git a/UWEFlix/__pycache__/forms.cpython-310.pyc b/UWEFlix/__pycache__/forms.cpython-310.pyc index aa41da47cd667f7d935764a44d5900f7abdd51d9..5c1c5d3cddd2bd4bbf403ed29991b47e5d9bf6da 100644 GIT binary patch delta 643 zcmZXR&ubGw6vyXncC)kDBwe=TcTz>GG>tz%@kcPWVn|9rqv&lfZQ2>ym9z=7i3Kke z6a)`KnX{mtym|2A$v?oG*S+Y)s}#KSWPPuCbB6cXdGF2p&g1P-`Jk2^Wily-tM&QQ z#vb3#R^f2J@uRrHL|zo0Gf|N6$a|IuN}~9X)k`1qaL3YX4xi1phtu^3a;#(|cP4{L z_*iN%b9&C=d(k{9N)~`%fguxtxyb~)gTNAoOun(-vJe6;5-4assr;|g9jWaLcjaVI zH)C@eNu>&?7ble*uZAM#<3SYdj+9VWFx;;@s)%1zB9sXYPOK2B1OpLg?*FUm?Tn|B z*xn7rrkq3?QaOFnH7j&8qET>W0tasJBXt7ZzB;GBIz@e8bLW?NocBSyd`_<?4=r^W zBYMp~3l06kZqAY$yX~z}xFNft913+)KTXtXO^nk}qAY?lA51WC^WVOunmWV3z$N|N zTJ)#^b&7DBaEpp_%Xqwq79|l>>>FxXzjo*KmU9ML`jxW^*Yr<kVWy22uA-^ygf<FS zbtm-=maw@+eb1e7yOc;1R!F<h!Q&0Ih-P-I4L+z2s(*ksY36#ExQ+H#le~VttY4<z ud(@YrCl#rv9?q$7KIX0Mk(dtU5@0Z*AChJsEP#h?d$v#8@m-{qxBme6x{Sa8 delta 366 zcmew$`(KJLpO=@50SJT|wkP+oPvnzfd^S=0DO-wIFoUM}W(`Ik*2x#yf3V$RDJ@Pd zntYB!jZtZGKabXAc}{*|GoZd(+|C*KnaQbcnW;G`Mdp(oIb~&yfa20XT+9a~I2eQ& zSs0mskmH{aYmw1p8CI3a^EsDsY62yT6oABJe`cA<SzMxwRzTf~f@(maVm2TF(kaAL zWC_$EJNZ194x{PhKV0#QdXr<gHH2+}3Uq<^GYeE@ku6Z2%;fdl_krsAc`Ugdff7YL zAi@dcDscxO6XddD4j=(Gn^B0d$N_3P`($n2ZlDW*W{bK26<7jskv)h2@%%I;Cx78x z!40yt$N?-m`6G+C_AL&Z-29Z%oK!nTpkT2Ckl<kuVANm~0J>a&T?hoZftXc{9RSdt BNreCa diff --git a/UWEFlix/__pycache__/models.cpython-310.pyc b/UWEFlix/__pycache__/models.cpython-310.pyc index 5f795547eebe5388510cc095edcb847bb235e51b..f464a770870ffcd7a17f038c35b7ae5d6d3db71d 100644 GIT binary patch literal 3474 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 T#M9_Dy9-^XYoXcQ<~8eo9307+ delta 1493 zcma)6OKTHR6rP)8CNt?|I+?U-)0eG6H9jba6tT7#Yi)frqAds!k(xW!N}9--#^S~< z^bgd#a-q0z<1g@m;M$cdH`!@d1y|O+erFP-lz|#JALo4M&iT%{k38>xlXvRrbV|eT z`;&K-U)H8GAbxBfJG3#Y$+%2B(`3SrKaH0S#JV&P8@_=!i8v`u#AX<qh%K2yoC;$L zafh@K+rD^^!WSK2($WFrv>6*rr*y%%Z6*ySBRw!PUYl}2Wn~wrt~S#Nrd#H~<l2l2 zrbqUI>1{I^nP1QfeQH>oR6mVA)e!53jUmZazr<YDfSZH`34p1&f($hu8@Rc{YkaLN zq*jheffBK%H(hPqz2QG3Kk#d7OKU5S{L<SvnOI2{1MeQSivRP{>~#V<U_0tlZ0M4J zcMe7l0Ck;WrBZLy*5;RLOUpi$$mL{I9S;fqh%yYGdLJKDTd}p-JuSqLZKf{P$zNHn zUGX0`lheh8>EeYM>gMmFDrb?%s8{j4$fD|pVcwUfUctZt<=}5iCeSS%ghNTSnHcKW zC96Ir3PwMt2Gn-qaz0995a~X3RUgyYt88ZS>V<wOGm2o5hJf2$02)y{`q+V8wVC9R z=rF?(hJq>@x5RPv(ij|zlH!_Uuz-`MW(!-G!U58#+BOz9Sg5V}2QG~ON(F20S?*Qk zrAGlxvs$m<0@Q1fo5|J3VF3@(Qpd$&wgSUX?HF10HCY<xsp%90cR<5{QX#!x8*0H^ zh}>Zoolu|6ZZWRDnah&Pmy<z-e7_dFjZqI`>J3GleMG{u<d$iGA-p(e;FZ&@a(8Nt z)w@2?Y4zI5orpSv39LR33;0>^E_gTtoWO+Ivgk_Kni<@$udmdW13HT}rNVzT#Y2Wo zl@s??s;j8?I(0a*gGsEMgYD|T;|?a(@6@&1ElD$SAHwN*fY$U=>_yF3MB+LtwEjMF zf|w~4JoUw%*dTsI;o~QMxx|mGsn6G?UnPD5#Md;u7ZeT^3Ubq7l_<fcd3Lof8&!Ww cU|G-yu(dAX>Tbe~yK&F*y1k^Q!;GBu7bN%p9smFU diff --git a/UWEFlix/__pycache__/urls.cpython-310.pyc b/UWEFlix/__pycache__/urls.cpython-310.pyc index 5a4a8efcf7222896a7b8d292ece61a08d3fa6b11..97db8d0a329dbb23f6de76d08ac289b14b4471c7 100644 GIT binary patch delta 402 zcmcb``<P!lpO=@50SG(~?MTk&U|@I*;vfTAAjbiSi@P>zM>CqFGNu@$GG|Gp7^blI zG6Q)=K%R7pF_dQl<jJI%f_UkYQL-s!!3>(_n<p?DGuNx+Cgvrkr^YAelqMDHmlmWX zmZZifCMV~Y=9TE%WagDv6=d5*@u5moq3TLW%}K?o3ss^@6UDBg)PkbapyJfLlEjkC zvefvZ)bz~ak|H1{KTrRbG*}wDY!y#(Q7XutX_+~>`cd3SJU>mj%@0_77*+V7eu#&- xJPOW-xT%O27<iMl*<{%SfQ%x6$$o4hJXSy^4<iWjF;CvWrZM>d8wV4|a{$d^evkkF delta 103 zcmaFNe~VW;pO=@50SHPOw<jC0GcY^`agc!&kmCTv#R(g=qZzr<#iFEA41yUn4L9#% qG-jT>kX43Jdh<S3AI8c0>@sZpK$S)OlLOg97)>TGV>e~ucm)98t`w30 diff --git a/UWEFlix/__pycache__/views.cpython-310.pyc b/UWEFlix/__pycache__/views.cpython-310.pyc index 3b088c486ba9b25d0c54ef89871b4f511bd93c54..acb44c7178cbd67e811333eb30c5d5dd47561b17 100644 GIT binary patch literal 8198 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 ZoU&s%lg@<WIC*Cp<+5`K&sOEY{{Tx}wuk@# delta 2930 zcma)8OK%%h6!wjuu^qcf9NS6k*m0c4B(d`>4Q<-Av>;TeEhSBhrfpnj?j&{b%v5*m zQe}aqszQPlaM>Xiu%fEUg7Oe6#2-LHLP8plV1-0C2#FOd&bc$SotOZY{GIze=R1#k z@4RvH;Y!5l=?S{v_w~ImmFFkliKNKocV@H(aZxYzSL0ejPH0IvsSV15+K@b?4a>t? zN=|8MISp%EG*BJUGIB<=yQ^7kR36oGa!wnQ$6zc-L-$>Bo`z`;$Z;B>QIHe#5bXsy zN&9F&$SE4510W?DrwNeLw2`EP(3qh^bQt6;P0=*S0v(|lkVTrMqaf#Kj*fwxr+GRK za)D0JNsx<lib^1t=ro-HxlCti0pwv?q;nvjp-XguF5V~d5jwx_l9qqN5J(=&$5frF z%;KMtItlQpE{#9x`kah$#l4vshcybpmCg^_Zup;uKg;l6+=+oKHb)W0nvmyVPs%re z{mI8g&m19BeAAm>F2IQ7V>z6V5T+4ul+6NIe#Ovh>fPENRbP0Q$RhtKn&y7rJy7(P zPYxAvOAo>n|J`?VWgd6?RK^TuvM%UIUfaqFt`P<fV@ud;=UMhI`%b`&LimYjl0Wv> z{8P}q#Flt55ck>J`PsnG8DX*?mEZ#QEW%L)jE8MP7<RWAUcjk#a~}s5$w~fW;G1JY ziHHXgp|HF=%&6afKrD}5)>JkFTmK4I^gHEhg=V)6rb%w*(D|V|TM%@jsJ}($7<LB$ zEWfdJOI2zno5P_r&j+)cEwUIb!Ps(_t5rK*fi~JAHOS2h3Q{G(=#)^bFtuD$DeG|U zqu?qz$A1o%3&JZm6AVS@MO?aU17e^(BwA>KT;T78Hb{X#2^H58NbUuMvj{^7EiE2f z%S9Z08KHy6m2i%%^WE@=4Gc^(XwZi8s_3d#HrX2VcKd8sN+w8EFW#(aRjJDk@g>|D zVo4BfRD?r^aI6(_5mZ4>l!5Tn;W&g^Y<(RhKkHc}8+;{};_iqsg6bggfr@U{%DSSm zbr@(e=Wj<Q*F{tgB(Sdpo!Y;G_T_^~1fxZAmA^ia;v3QNwad6r81^tPw$Y^JqiR*H zsiMe%Q4S|sdfW5(RWwJg!!i9p#2pS0F2z8zGXM`fPVqw9@@`kEn#nMUyZukIaMO6L zqVL#gh_FH2*s6k-`@J|J;xDTBICl4*#f7$VaUxN|RcP*jbV$92$qioWeSbhiL8yNP zmka)zJldCSh(i1ywDyu|<Kk~c&+?nLyX-%h0S7B0*78sKB(f#4^=IGQYLlnrWJ}N! z1#%5G?MYP`J!wx>sefEjVQ|mY?tuaPpT^ZM0Z8uipr*hd^-r(Gaj=z+7<M}j<qnSC zMChpZcx;qZu-=KuH)7k3CVhrsw!&IjFYl-&rCQ%Iox-;~*b~LJd#HY!!mT6b?F#9( zYgF(OUPsWbNZh^zh$Gp4B3^a55(gE+#erE;g&?P|DX5PEJPmNmR7Ze8<DLLR*9sx~ zl6`u<$N6mp4FH~+<FN#f#FZrSbxz6=XgZ!l%-@Vl*YP56i}}BM*-D1vs*bzGdm-3$ zWF(rHB?ezj{MwMCWkoUSdaYz<fwAXcuhp#^C74i6Q-sx_DU{u6=ZbbP^Uag&XtVRw z&-Rs$Ao?O2@WCwrH%k!S?Yk8d-l}>2Fgbip_!&m6BAfdTI6iTf-!WmoT+a7|s6OFv z4LAR@*SWz{q|X0H)jJ*sr_h|+2rnqx0l)o@^)(5#%Bv&h;$mFIm4e6qm?QNNYAz|v zi?3)mf07>Vz60YDIWMj7$jIX!%cmJoH73I|#=jjIiCQ6gtE}%Bz^8Vb4ZoYoHd1IK zjWB|MpJ{9oVG#kpXV^)Ea|jm@@M32h2v-rVBiumPLcq&_RS>EO8iIjPM?ivY_s5tE k?h=-VK`XEdWb0M+1b!Eq=ycK*CNUC*&$RC{g|0~cZz5eXr~m)} diff --git a/UWEFlix/forms.py b/UWEFlix/forms.py index 7218de61..1c178dde 100644 --- a/UWEFlix/forms.py +++ b/UWEFlix/forms.py @@ -24,6 +24,15 @@ class ClubForm(forms.ModelForm): fields = ['name', 'address_details', 'contact_details', 'representative'] +class ClubRepresentativeForm(forms.ModelForm): + class Meta: + model = ClubRepresentative + fields = ['user', 'club', 'rep_id', 'password'] + widgets = { + 'password': forms.PasswordInput() + } + + class ElevateUserForm(forms.ModelForm): user = forms.ModelChoiceField(queryset=User.objects.all()) group = forms.ChoiceField(choices=[ diff --git a/UWEFlix/migrations/0013_alter_user_club_rep.py b/UWEFlix/migrations/0013_alter_user_club_rep.py new file mode 100644 index 00000000..bcb5ae62 --- /dev/null +++ b/UWEFlix/migrations/0013_alter_user_club_rep.py @@ -0,0 +1,18 @@ +# Generated by Django 4.1.4 on 2023-01-07 00:10 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('UWEFlix', '0012_remove_account_club'), + ] + + operations = [ + migrations.AlterField( + model_name='user', + name='club_rep', + field=models.BooleanField(default=False), + ), + ] diff --git a/UWEFlix/migrations/__pycache__/0013_alter_user_club_rep.cpython-310.pyc b/UWEFlix/migrations/__pycache__/0013_alter_user_club_rep.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0ee73f26a90c4999512658c4f6662ae4a1a337cd GIT binary patch literal 611 zcmYjP&1w`u5bnR(ogESoQSq3QFd!i@HxY@tS@B>F1_=%WO=qfhvrA9+W`5M1^_sh{ z;2Y#w`s&G75F}PlB1u6P^+$d6eKUS@Gh<|@mzUKK&e*S*+%-kXKE3t{Ibgsot9ij| zQ3%f7G7uoYGmywv@|!Fqs3VpqziF1`B4qV)(U@-OT^mNV2efS!TX$_l$v(aIDLG^X z2UZB+3tmW6t0V&8Xf*}}$pweeg``djV}eP;<o*Bs1UCM7d@!@iui^2|&h9haVC_Gn zHdW<&*XhdkCqeZsHX)5M_1CkUhcV#X^tQ_-T^ldd&eRyx;FI|hEga^Pkm{kXb;z`) zx!xkh8(N?B#>Uy00j|*jx@w7SBZyAOUfB+tS=`ddSlD>&y+z}OQpo%oZ}j=eng=v6 zxIcROy!>!(+}1m{I5l-S^;KV^>)P@Ynr3USoE{ua%QwfnW&Z`|#JRlTUfv2`k_vm; zM0_1-4+=!q+w1cte$^;^d!Jm&gj8255nS+$tH0^h&_B#on83=oh2MsgfzQBUXx<)s X9X+HyA$@VJ%uD)_SQ|0!iAVAuh=-*o literal 0 HcmV?d00001 diff --git a/UWEFlix/models.py b/UWEFlix/models.py index ef3fd0fe..66eefe1e 100644 --- a/UWEFlix/models.py +++ b/UWEFlix/models.py @@ -1,6 +1,6 @@ from django.db import models from django.contrib.auth.models import AbstractUser, Group, Permission - +from django import forms # Create your models here. @@ -8,9 +8,6 @@ class User(AbstractUser): club_rep = models.BooleanField(default=False) # ... -class ClubRepresentative(User): - pass - class AccountManager(User): pass @@ -81,3 +78,11 @@ class Showing(models.Model): class Seat(models.Model): screen = models.ForeignKey(Screen, on_delete=models.CASCADE, related_name="seats") + + +class ClubRepresentative(models.Model): + user = models.OneToOneField(User, on_delete=models.CASCADE) + club = models.ForeignKey(Club, on_delete=models.CASCADE) + rep_id = models.CharField(max_length=50, unique=True) + password = models.CharField(max_length=50) + diff --git a/UWEFlix/templates/manage_clubs.html b/UWEFlix/templates/manage_clubs.html index b793656c..1d3b5f81 100644 --- a/UWEFlix/templates/manage_clubs.html +++ b/UWEFlix/templates/manage_clubs.html @@ -10,10 +10,14 @@ <div class="card-body"> <h5 class="card-title">{{ club.name }}</h5> <p class="card-text">Account: {{ club.account.id }}</p> + <a href="{% url 'update_account' pk=club.account.pk %}" class="btn btn-secondary">Update Account</a> + <a href="{% url 'delete_account' pk=club.account.pk %}" class="btn btn-secondary">Delete Account</a> <p class="card-text">Club Representative: {{ club.representative.username }}</p> - <a href="{% url 'update_club' pk=club.pk %}" class="btn btn-primary">Update</a> - <a href="{% url 'delete_club' pk=club.pk %}" class="btn btn-danger">Delete</a> + <a href="{% url 'update_club' pk=club.pk %}" class="btn btn-primary">Update Club</a> + <a href="{% url 'delete_club' pk=club.pk %}" class="btn btn-danger">Delete Club</a> + {% if not club.account %} <a href="{% url 'create_account' %}" class="btn btn-secondary">Create Account</a> + {% endif %} </div> </div> {% endfor %} diff --git a/UWEFlix/templates/representative_registration.html b/UWEFlix/templates/representative_registration.html index c864c38f..c28c2726 100644 --- a/UWEFlix/templates/representative_registration.html +++ b/UWEFlix/templates/representative_registration.html @@ -3,34 +3,27 @@ {% block content %} <div class="container mt-4"> - <h1>Register as Club Representative</h1> - <form method="post" action="{% url 'representative_registration' %}"> + <h1>Representative Registration</h1> + <form method="POST" action="{% url 'representative_registration' %}"> {% csrf_token %} - <div class="form-group"> - <label for="club">Club</label> - <select class="form-control" id="club" name="club"> + <input type="hidden" name="club" value="{{ club.id }}"> + <div class="form-group"> + <label for="club">Club</label> + <select class="form-control" id="club" name="club" required> {% for club in clubs %} <option value="{{ club.id }}">{{ club.name }}</option> {% endfor %} - </select> - </div> - <div class="form-group"> - <label for="first_name">First Name</label> - <input type="text" class="form-control" id="first_name" name="first_name"> - </div> + </select> + </div> <div class="form-group"> - <label for="last_name">Last Name</label> - <input type="text" class="form-control" id="last_name" name="last_name"> - </div> - <div class="form-group"> - <label for="email">Email</label> - <input type="email" class="form-control" id="email" name="email"> - </div> - <div class="form-group"> - <label for="password">Password</label> - <input type="password" class="form-control" id="password" name="password"> + <label for="user">User</label> + <select class="form-control" id="user" name="user" required> + {% for user in users %} + <option value="{{ user.id }}">{{ user.username }}</option> + {% endfor %} + </select> </div> - <button type="submit" class="btn btn-primary">Submit</button> + <button type="submit" class="btn btn-primary">Create Representative</button> </form> </div> diff --git a/UWEFlix/templates/update_account.html b/UWEFlix/templates/update_account.html new file mode 100644 index 00000000..888aa0c2 --- /dev/null +++ b/UWEFlix/templates/update_account.html @@ -0,0 +1,14 @@ +{% extends 'base.html' %} + +{% block content %} + +<div class="container mt-4"> + <h1>Update Account</h1> + <form method="POST" action="{% url 'update_account' pk=account.pk %}"> + {% csrf_token %} + {{ form.as_p }} + <button type="submit" class="btn btn-primary">Update Account</button> + </form> +</div> + +{% endblock %} \ No newline at end of file diff --git a/UWEFlix/urls.py b/UWEFlix/urls.py index cfb861ed..1c3fdeb3 100644 --- a/UWEFlix/urls.py +++ b/UWEFlix/urls.py @@ -25,5 +25,8 @@ urlpatterns = [ path('manage_clubs/<int:pk>/update', views.club_update, name='update_club'), path('manage_clubs/<int:pk>/delete', views.club_delete, name='delete_club'), path('manage_clubs/create_account/', views.account_create, name='create_account'), + path('manage_clubs/update_account/<int:pk>', views.account_update, name='update_account'), + path('manage_clubs/delete_account/<int:pk>', views.account_delete, name='delete_account'), + path('manage_clubs/representative_registration/', views.representative_registration, name='representative_registration'), path('create_film/', views.film_create, name='create_film') ] diff --git a/UWEFlix/views.py b/UWEFlix/views.py index 5e616fef..de7876b4 100644 --- a/UWEFlix/views.py +++ b/UWEFlix/views.py @@ -2,7 +2,7 @@ from django.shortcuts import render, redirect, HttpResponseRedirect, get_object_ from django.contrib import messages from django.contrib.auth import authenticate, login, logout from django.contrib.auth.decorators import login_required -from .forms import AccountForm, UserRegistrationForm, ClubForm, ElevateUserForm, ScreenForm, ShowingForm, FilmForm, CinemaForm +from .forms import AccountForm, UserRegistrationForm, ClubForm, ElevateUserForm, ScreenForm, ShowingForm, FilmForm, CinemaForm, ClubRepresentativeForm from .models import Account, User, Club, Screen, Cinema, Film, Showing from django.http import JsonResponse from django.contrib.auth.models import AbstractUser, Group, Permission @@ -254,11 +254,49 @@ def account_create(request): context = {'form': form, 'user': request.user, 'clubs': clubs} return render(request, 'create_account.html', context) +def account_update(request, pk): + account = get_object_or_404(Account, pk=pk) + if request.method == 'POST': + form = ClubForm(request.POST, instance=account) + # Check if the form is valid + if form.is_valid(): + # Save the form and redirect to the club list page + form.save() + return redirect('manage_clubs') + # If the request is not POST, or the form is invalid, + # render the update page with the club instance and the form + form = ClubForm(instance=account) + context = {'form': form, 'account': account, 'pk': pk} + return render(request, 'update_account.html', context) +def account_delete(request, pk): + account = get_object_or_404(Account, pk=pk) + if request.method == 'POST': + account.delete() - - - +def representative_registration(request): + clubs = Club.objects.all() + users = User.objects.all() + if not request.user.groups.all().filter(name='account_manager').exists(): + print(request.user.user_permissions) + return redirect('no_access') + if request.method =='POST': + form = ClubRepresentativeForm(request.POST) + if form.is_valid(): + rep = form.save(commit=True) + club = form.cleaned_data['club'] + club.representative = rep + club.save() + return redirect('manage_clubs') + else: + context = {'form': form, 'user': request.user, 'clubs': clubs, 'users': users} + return render(request, 'representative_registration.html', context) + else: + ### USER REQUESTS FORM ### + # render the empty form + form = ClubRepresentativeForm() + context = {'form': form, 'user': request.user, 'clubs': clubs, 'users': users} + return render(request, 'representative_registration.html', context) ### FILM MANAGEMENT diff --git a/db.sqlite3 b/db.sqlite3 index 182072771686fd233b4f322819946de11d81dc48..6c4ee3ab373ea9efaa25a3f0e96e32f441b460c1 100644 GIT binary patch delta 5733 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 B`Jw;- delta 11769 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 S;-^LUlnsDx2VMAI^#2Bb+)lUv -- GitLab