From 89fff965f44e4b0ba5f132edd4b8846eea2d9ddc Mon Sep 17 00:00:00 2001 From: ismail Date: Mon, 6 Oct 2025 15:17:41 +0300 Subject: [PATCH] remove django unfold --- .../__pycache__/settings.cpython-313.pyc | Bin 5202 -> 5038 bytes NorahUniversity/settings.py | 7 -- recruitment/__pycache__/admin.cpython-313.pyc | Bin 6704 -> 717 bytes recruitment/admin.py | 112 +----------------- 4 files changed, 6 insertions(+), 113 deletions(-) diff --git a/NorahUniversity/__pycache__/settings.cpython-313.pyc b/NorahUniversity/__pycache__/settings.cpython-313.pyc index 3876470a1b981bbc71c7c0f2418712231907d58e..ffd727a646fc34fcafa1187466dec502bae296c6 100644 GIT binary patch delta 148 zcmcblu}+=uGcPX}0}wcDew=YjbR*w?W=7G?n^=5U8HFeR=PYNG-dxTV#>{FARB~kU zCEgT010buI5lAQ$83D;6kPMhO4w3+w)xa=^?Sj1F6$zsvlg%l7?aZPkAT=P>w>WHa g^HWN5QtgWJCkchKiwQ9`@O?1Y94GXFkp-j*04OOX0{{R3 delta 314 zcmZ3deo2GxGcPX}0}#}UKFruGzLD=gbG^(hw$i+`{G603F$k@foS#=xl$oTLmYGwM zT2x#mf-at4lv|9UIx{aPGcUEcN(N1JW^O@#QAvDi1&FE=N0UugD@`m)$xO_vl0}m# z25QVnjnBv|F3B&d+|0+~!^$W!IhwPaQD*aH&M;=CECmH@qTYRAjpO0B<|9s3}MdNcAlao80`A(wtPgqJqgWg5m74 TLQD;OAM7^o68yl(0#XJ5P|sza diff --git a/NorahUniversity/settings.py b/NorahUniversity/settings.py index 82d1381..cee4284 100644 --- a/NorahUniversity/settings.py +++ b/NorahUniversity/settings.py @@ -30,13 +30,6 @@ ALLOWED_HOSTS = [] # Application definition INSTALLED_APPS = [ - "unfold", # before django.contrib.admin - "unfold.contrib.filters", # optional, if special filters are needed - "unfold.contrib.forms", # optional, if special form elements are needed - "unfold.contrib.inlines", # optional, if special inlines are needed - "unfold.contrib.import_export", # optional, if django-import-export package is used - "unfold.contrib.guardian", # optional, if django-guardian package is used - "unfold.contrib.simple_history", 'django.contrib.admin', 'django.contrib.humanize', 'django.contrib.auth', diff --git a/recruitment/__pycache__/admin.cpython-313.pyc b/recruitment/__pycache__/admin.cpython-313.pyc index 33016b77dbe19f26f6396955f5e6c4cd74ea490f..d3967fd223b9a8c1d2eef68f41f218604a877861 100644 GIT binary patch literal 717 zcmbVJJxc>Y5S`6^Bsok}(reV}KysBJB9;L!nj&WzkV~@UHr^Mrm%`G@*2W)U?Jp4$ zlm$UZA?bwt0e3?}NF`=q-@KXKH^XCRrIH0Qj$bFiJ^`4hVj0?k%+BP^GkD;U2Dk)C z6}+6MHFBeGZ7B|RE)G-QFMg1mx)f}#YWb0&8dkoFnRD89f< zc0rsvK@w4i@yKVPlVUQU-HbcFJa@i73~m)e+QlKuA{uAT+)ypO7lm`Vav0JJ+?9ir zLmo)@(Fh@*Q2hpP4Bi(QkJf|r4wW~kJY9|8;A5?GIfA{vI?WLrt-rY*!y#_VWxqd; BiE{t| literal 6704 zcmb_gTW=f36`m!zyoncGY26~ziWG@XBc)D^I8BknN_+`b$*yQMO{{jYB3BX}iezS& zNo52r69b9!RP`aKUkU{1i~ZF86thYyVGtumgFg6;DfI(-zS&(~Y|3$wF38z4GiSb; z`DV_UGuwzp!;GH$fB$aF+soK@$hc3y5gNCBjD5i}ETb&4w8E7n%Xl*0MNitxy;Alq z`qC;_NoE<9bo|^eW&dIz9poV?2S^U{9w`SGBk3rQrei!tc~2&^=uO9YJl)HC(|x=z z-Ou~e1AIX0h8G9ZLwqQm;ED7xeoU72EDonf_(+ni`Bz?ahueCuyws9iX)StMvE~1% zRji}c85gbfo@6cLVK&J!kx`b3u7%b{P7`Z*PTMcWgEZRi2+dw3LW~gNYdu{M!bc)_ zSAOPn)An-5E>U|4wU02pwnB4M6NLF{TO&uLne=A{URE-LqpcYvAJhNBqZl3i4^jV# zF8xnF2J`$6U>+mP;Vzg{a>gT6J4)#3E+`HQ{28e^Mw;V4pgD8oIO84je2TEZ>8Yc8 zZE`<*BxY|1=5fLV_fLYEIuf(51M>u7g8L`IJb5H$e+TB%ggNzun9m-GInaSQO_Z&sv&U+1}Rqj<&%|+gdrd zL3OI0+s+qB2(6k1KkH<|7kH^swsRigLzPfvSxOa=^CiB0#n>(vbjuJSVgf zMjKM$;tgU)z(c+;Em@gS)^ z=%?fkTTb1*ayiX&ZTNT7`VkD3&yhqq*>H(7^Zr z#GszbX)@b~>|j<-O)EPyl~rO$(@cwIl+|?0;`#N8WtfC@j9N74&%~Met~c!w!^p^zQAlG*jw6AB-O~w3 zXekrunkprqvVZx4wgxJ@k0nVpkB%kdfrm`b?WNss0u*jOCrlIrf7HuXn7qcs2(-;a8 z%*e!UqLm!DT>ZsC|C#FI!Qj~&OE!7Xxt_SJbJIwgMuB#UkxO!etlfb5_q5F*>zoAC zf-yh+k#9uEaK2!xo&k1om9e6C)w_cFhaOOaC+A^oDZ$v)CRTU-6(=IFTiL1W>x#as zZoI`-eQxQhx6o`um_6++o%T*qk}bW>SPx6Gs}WagCFV-4_as|YGRmrF1@t}ixaU%g zVzL*!r)gGrl5CUKe))Pp@|jCsPq)PIjYGDD2FoLc(uz%)z7Zm33=Ncuk9o zSQ$%^bKR}*nfeC?2U{ZGU2sxb7NLSpMg?~))bduTNG}6kQh2YG)FUz``1sAzjSIHDLbW?r<5Y7rSDR|eFNUsgJzvZhH;~!;2M_?^nXr2|BAdhT@Qen}D9pr|owl@JK6tPHVmPnS? zAwslMVBQ}XBED%*l#F0jv;DJ|V}w$VqXn6mZ2dgR6x%tG!}^YAoSnrS)qjV4MR$ z)`}C4On2^~$zUC27*S;h@&5hzWGz0q7oWNtoRS+;_~lMA9q$nBx=G;S+I*v2c#X7thh)r_d0XdgJ&N+~C!X*dVKbo8Ym|doM(X|;` zCuG_;Sa}hX0SQHMPRtT-rGeuPBt|-w z=k$uTHK*e~FR$n#x}ci|zJf@~+m>| zUP?ryQrsvNa&sHBnN5znlKie=f6;I&?IGdY03Aemx{!n`MQ&`;6_>&-ioYDmOE+An_VhhAc#l2%Zyvhr^(OcIWjD&`l zc@lLL)g!K!x~C)#J&F?Ao%nLJ!AOACu{w(CL08NF=kTAxd&(H_7L=P3Zb5hQZ9?t$CTqRPJ>|rqM^z?v-)%5@L3Of@f_kh? zbEeiiv!~1+dOS+%R=UCH1X1?9Frq5SRtaTVXpueTsY6dl z`ROfne|WYwJlkND0op_z#r1^SZ)lH@JU(T5cXfYgx;8Z3Ana*qj@41zBG1*FY}cG@ zYEHH^V|&VRV9wr}-XA?#8$AikS!gDKIor~V?kN+{Ox+sVA4%0lQqYvMKK?z5r3?5k Dj9QrI diff --git a/recruitment/admin.py b/recruitment/admin.py index a84bdde..67c8f21 100644 --- a/recruitment/admin.py +++ b/recruitment/admin.py @@ -1,110 +1,10 @@ -from django.contrib import messages -from . import models -from .utils import extract_summary_from_pdf - from django.contrib import admin -from django.contrib.auth.admin import UserAdmin as BaseUserAdmin -from django.contrib.auth.admin import GroupAdmin as BaseGroupAdmin -from django.contrib.auth.models import User, Group -from .models import FormTemplate, FormStage, FormField, FormSubmission, FieldResponse -from unfold.forms import AdminPasswordChangeForm, UserChangeForm, UserCreationForm -from unfold.admin import ModelAdmin +from .models import FormTemplate, FormStage, FormField,FieldResponse,FormSubmission -admin.site.unregister(User) -admin.site.unregister(Group) +admin.site.register(FormTemplate) +admin.site.register(FormStage) +admin.site.register(FormField) +admin.site.register(FormSubmission) +admin.site.register(FieldResponse) - -@admin.register(User) -class UserAdmin(BaseUserAdmin, ModelAdmin): - form = UserChangeForm - add_form = UserCreationForm - change_password_form = AdminPasswordChangeForm - - -@admin.register(Group) -class GroupAdmin(BaseGroupAdmin, ModelAdmin): - pass - - -@admin.register(models.Job) -class JobAdmin(ModelAdmin): - list_display = ('title', 'is_published', 'posted_to_linkedin', 'created_at') - list_filter = ('is_published', 'posted_to_linkedin') - search_fields = ('title', 'description_en', 'description_ar') - -@admin.action(description="Parse selected resumes") -def parse_resumes(modeladmin, request, queryset): - for candidate in queryset: - if candidate.resume: - summary = extract_summary_from_pdf(candidate.resume.path) - candidate.parsed_summary = str(summary) - candidate.save() - messages.success(request, f"Parsed {queryset.count()} resumes successfully.") - -@admin.register(models.Candidate) -class CandidateAdmin(ModelAdmin): - list_display = ('first_name','last_name','phone', 'email', 'job', 'applied', 'created_at') - list_filter = ('applied', 'job') - search_fields = ('name', 'email') - # readonly_fields = ('parsed_summary',) - actions = [parse_resumes] - -@admin.register(models.TrainingMaterial) -class TrainingMaterialAdmin(ModelAdmin): - list_display = ('title', 'created_by', 'created_at') - search_fields = ('title', 'content') - - -class FormFieldInline(admin.TabularInline): - model = FormField - extra = 0 - fields = ('label', 'field_type', 'required', 'order', 'is_predefined') - ordering = ('order',) - -class FormStageInline(admin.TabularInline): - model = FormStage - extra = 0 - fields = ('name', 'order', 'is_predefined') - ordering = ('order',) - inlines = [FormFieldInline] - -@admin.register(FormTemplate) -class FormTemplateAdmin(admin.ModelAdmin): - list_display = ('name', 'created_by', 'created_at', 'is_active', 'get_stage_count') - list_filter = ('is_active', 'created_at', 'created_by') - search_fields = ('name', 'description', 'created_by__username') - inlines = [FormStageInline] - readonly_fields = ('created_at', 'updated_at') - - def get_stage_count(self, obj): - return obj.get_stage_count() - get_stage_count.short_description = 'Stages' - -@admin.register(FormStage) -class FormStageAdmin(admin.ModelAdmin): - list_display = ('name', 'template', 'order', 'is_predefined') - list_filter = ('is_predefined', 'template') - search_fields = ('name', 'template__name') - ordering = ('template', 'order') - -@admin.register(FormField) -class FormFieldAdmin(admin.ModelAdmin): - list_display = ('label', 'field_type', 'stage', 'required', 'order', 'is_predefined') - list_filter = ('field_type', 'required', 'is_predefined', 'stage__template') - search_fields = ('label', 'stage__name', 'stage__template__name') - ordering = ('stage', 'order') - -@admin.register(FormSubmission) -class FormSubmissionAdmin(admin.ModelAdmin): - list_display = ('template', 'applicant_name', 'applicant_email', 'submitted_at') - list_filter = ('submitted_at', 'template') - search_fields = ('applicant_name', 'applicant_email', 'template__name') - readonly_fields = ('submitted_at',) - -@admin.register(FieldResponse) -class FieldResponseAdmin(admin.ModelAdmin): - list_display = ('field', 'submission', 'display_value') - list_filter = ('field__field_type', 'submission__template') - search_fields = ('field__label', 'submission__applicant_name') - readonly_fields = ('display_value',) \ No newline at end of file