def get(self, request): request.session['page'] = 'Daftar Tahun Pelajaran' if 'search' in request.GET and request.GET['search'] != '': list_tp = TahunPelajaran.objects.filter( Q(mulai__icontains=request.GET['search']) | Q(akhir__icontains=request.GET['search'])).order_by( '-mulai', '-akhir') else: list_tp = TahunPelajaran.objects.all().order_by('-mulai', '-akhir') tp = active_tp() paginator = Paginator(list_tp, 5) page_number = request.GET.get('page') page_obj = paginator.get_page(page_number) number_of_pages = [(number + 1) for number in range(page_obj.paginator.num_pages)] context = { 'list_tp': page_obj, 'page_obj': page_obj, 'tp_form': SemesterForm(), 'number_of_pages': number_of_pages, 'jumlah_kelas': Kelas.objects.filter(tahun_pelajaran=active_tp()).count(), 'jumlah_siswa': Siswa.objects.exclude(kelas=None).filter( kelas__tahun_pelajaran=tp).count(), } return render(request, 'pages/semester/semester.html', context)
def count_member(kelas, gender=None): if gender: if gender == 'male': siswa = Siswa.objects.filter(kelas=kelas, kelas__tahun_pelajaran=active_tp(), gender='P') elif gender == 'female': siswa = Siswa.objects.filter(kelas=kelas, kelas__tahun_pelajaran=active_tp(), gender='W') else: siswa = Siswa.objects.filter(kelas=kelas, kelas__tahun_pelajaran=active_tp()) return siswa.count()
def post(self, request): excel_form = UploadExcelForm(request.POST, request.FILES) created_count = 0 exists_count = 0 error_count = 0 tp = active_tp() if excel_form.is_valid(): try: cleaned_json = extract_and_clean_siswa(request.FILES['file']) for siswa in cleaned_json: kelas = siswa['kelas'] del siswa['kelas'] try: for key, value in siswa.items(): if key not in ['nama_wali', 'kelas']: if not value: raise Error siswa, created = Siswa.objects.get_or_create(**siswa) if kelas: try: old_kelas = siswa.kelas.get(tahun_pelajaran=tp) siswa.kelas.remove(old_kelas) kelas = Kelas.objects.get( nama=kelas, tahun_pelajaran=active_tp()) siswa.kelas.add(kelas) siswa.save() except Kelas.DoesNotExist: pass if created: created_count += 1 except IntegrityError: exists_count += 1 except Error: error_count += 1 messages.success( request, 'Proses impor data dari berkas spreadsheet telah berhasil') messages.info( request, f'{created_count} data siswa baru, {exists_count} data siswa dengan NIS atau NISN yang sudah terdaftar sebelumnya, {error_count} data siswa yang gagal diinput' ) except ValueError: messages.error( request, 'File yang diunggah tidak didukung atau bukan sebuah file spreadsheet' ) except Exception as e: messages.error(request, e) finally: return redirect('list-siswa')
def post(self, request, nis): siswa_form = SiswaForm(request.POST) siswa = Siswa.objects.get(nis=nis) try: old_kelas = siswa.kelas.get(tahun_pelajaran=active_tp()) except ObjectDoesNotExist: old_kelas = None if siswa_form.is_valid(): data = form_value(siswa_form) kelas = data['kelas'] del data['kelas'] if old_kelas: siswa.kelas.remove(old_kelas) if kelas: siswa.kelas.add(kelas) siswa.save() Siswa.objects.filter(nis=nis).update(**data) messages.success(request, f'Profil {siswa.nama} berhasil diubah') return redirect('detail-siswa', nis=nis) else: context = { 'siswa_form': siswa_form, } return render(request, 'pages/siswa/detail-siswa.html', context)
def post(self, request, matapelajaran): matapelajaran_form = EditMatapelajaranForm(request.POST) try: if matapelajaran_form.is_valid(): data = form_value(matapelajaran_form) pengetahuan = data['pengetahuan'] keterampilan = data['keterampilan'] del data['pengetahuan'] del data['keterampilan'] MataPelajaran.objects.filter(pk=matapelajaran).update(**data) kkm = KKM.objects.get(matapelajaran__pk=matapelajaran, tahun_pelajaran=active_tp()) kkm.pengetahuan = pengetahuan kkm.keterampilan = keterampilan kkm.save() messages.success( request, f'Data Matapelajaran {kkm.matapelajaran.nama} berhasil diubah' ) except Exception as e: messages.error(request, e) finally: return redirect('detail-matapelajaran', matapelajaran=matapelajaran)
def get(self, request, kelas, **kwargs): try: sekolah = Sekolah.objects.get() semester = active_semester() tp = active_tp() kelas = Kelas.objects.get(nama=kelas, tahun_pelajaran=tp) siswa = Siswa.objects.filter(kelas=kelas) except ObjectDoesNotExist: raise Http404 for siswa in siswa: context = generate_rapor_context(sekolah, semester, siswa) generate_pdf(siswa, kwargs['pdf_dir'], context) bundle_dir = f'{settings.MEDIA_ROOT}/rapor/{kelas.tahun_pelajaran.mulai} - {kelas.tahun_pelajaran.akhir} {semester.semester}/bundel/{kelas.jurusan}' if not os.path.isdir(bundle_dir): os.makedirs(bundle_dir) shutil.make_archive(f'{bundle_dir}/Rapor-{kelas.nama}', 'zip', kwargs['pdf_dir']) zip_file = open(f'{bundle_dir}/Rapor-{kelas.nama}.zip', 'rb') response = FileResponse(zip_file, content_type='application/force-download') response[ 'Content-Disposition'] = f'attachment; filename=Rapor-{kelas.nama}.zip' return response
def get(self, request): request.session['page'] = 'Daftar Siswa' if 'search' in request.GET and request.GET['search'] != '': list_siswa = Siswa.objects.filter( (Q(nama__icontains=request.GET['search']) | Q(nis__istartswith=request.GET['search']) | Q(nisn__istartswith=request.GET['search']) | Q(email__icontains=request.GET['search']) | Q(tempat_lahir__icontains=request.GET['search']) | Q(tanggal_lahir__icontains=request.GET['search']) | Q(agama__icontains=request.GET['search']))).order_by('nis') else: list_siswa = Siswa.objects.all().order_by('nis') tp = active_tp() paginator = Paginator(list_siswa, 10) page_number = request.GET.get('page') page_obj = paginator.get_page(page_number) number_of_pages = [(number + 1) for number in range(page_obj.paginator.num_pages)] context = { 'list_siswa': page_obj, 'page_obj': page_obj, 'number_of_pages': number_of_pages, 'excel_form': UploadExcelForm(), 'tp_aktif': tp, } return render(request, 'pages/siswa/siswa.html', context)
def get(self, request, kelas, pelajaran): matapelajaran = MataPelajaran.objects.get(pk=pelajaran) kelas = Kelas.objects.get(id=kelas, tahun_pelajaran=active_tp()) kelas.matapelajaran.remove(matapelajaran) messages.success( request, f'{matapelajaran.nama} berhasil dihapus dari kelas {kelas.nama}') return redirect('detail-kelas', kelas=kelas.nama)
def post(self, request, kelas): data = request.POST.getlist('matapelajaran') kelas = Kelas.objects.get(id=kelas, tahun_pelajaran=active_tp()) for _id in data: kelas.matapelajaran.add(_id) messages.success( request, f'Mata pelajaran berhasil ditambahkan ke kelas {kelas.nama}') return redirect('detail-kelas', kelas=kelas.nama)
def get(self, request): request.session['page'] = 'Daftar Matapelajaran' list_matapelajaran = MataPelajaran.objects.all().order_by('kelompok') context = { 'list_matapelajaran': zip_pelkkm(list_matapelajaran, active_tp()), 'matapelajaran_form': MatapelajaranForm(), } return render(request, 'pages/matapelajaran/matapelajaran.html', context)
def get_total_siswa_jurusan(jurusan): try: total = 0 kelas = Kelas.objects.filter(jurusan=jurusan, tahun_pelajaran=active_tp()) for kelas in kelas: total += kelas.siswa.count() return total except: return 0
def get(self, request, kelas): tp = active_tp() try: Kelas.objects.get(nama=kelas, tahun_pelajaran=tp).delete() messages.success( request, f'Kelas {kelas} berhasil dihapus dari tahun pelajaran {tp}') except ProtectedError: messages.error(request, 'Kelas masih memiliki siswa, tidak dapat dihapus') finally: return redirect('list-kelas')
def active_kelas(context): if context['user'].is_walikelas: try: from guru.models import Guru from sekolah.models import Kelas guru = Guru.objects.get(nip=context['user'].nip) kelas = Kelas.objects.get(walikelas=guru, tahun_pelajaran=active_tp()) return kelas except ObjectDoesNotExist: return None else: return None
class SiswaForm(forms.ModelForm): kelas = KelasSelect(queryset=Kelas.objects.filter(tahun_pelajaran=active_tp()), required=False) try: diterima_di_tingkat = forms.ChoiceField(choices = tingkat_choice(get_sekolah())) except Exception as e: print(e) class Meta: model = Siswa fields = '__all__' widgets = { 'tanggal_lahir': type.DateInput(), 'email': type.EmailInput(), }
def get(self, request): request.session['page'] = 'Dashboard' semester = active_semester() list_tp = TahunPelajaran.objects.all() list_tp = [tp for tp in list_tp] siswa_pria = [ Siswa.objects.exclude(kelas=None).filter(kelas__tahun_pelajaran=tp, gender='P').count() for tp in list_tp ] siswa_wanita = [ Siswa.objects.exclude(kelas=None).filter(kelas__tahun_pelajaran=tp, gender='W').count() for tp in list_tp ] tp = active_tp() context = { 'sekolah': get_sekolah(), 'semester': semester, 'siswa_berkelas': Siswa.objects.exclude(kelas=None).filter( kelas__tahun_pelajaran=tp).count(), 'siswa_nokelas': Siswa.objects.exclude(kelas__tahun_pelajaran=tp).filter( kelas=None).count(), 'jumlah_kelas': Kelas.objects.filter(tahun_pelajaran=tp).count(), 'jumlah_jurusan': Jurusan.objects.count(), 'jumlah_guru': Guru.objects.count(), 'jumlah_walikelas': Guru.objects.filter(is_walikelas=True, is_staftu=False).count(), 'jumlah_tu': Guru.objects.filter(is_staftu=True, is_walikelas=False).count(), 'jumlah_admin': Guru.objects.filter( Q( Q(is_walikelas=True) & Q(is_staftu=True) | Q(is_superuser=True))).count(), 'jumlah_mapel': MataPelajaran.objects.count(), 'jumlah_ekskul': Ekskul.objects.count(), 'chart_data': zip(list_tp, siswa_pria, siswa_wanita), } return render(request, 'pages/dashboard.html', context)
def get(self, request, guru): try: guru = Guru.objects.get(nip=guru) kelas = Kelas.objects.get(walikelas=guru, tahun_pelajaran=active_tp()) except Guru.DoesNotExist: raise Http404 except Kelas.DoesNotExist: kelas = None request.session['page'] = f'Profil {guru.nama}' context = { 'profile_form': GuruEditForm(initial=get_initial(guru)), 'password_form': PasswordChangeForm(), 'gelar_form': GelarForm(), 'guru': guru, 'kelas': kelas, } return render(request, 'pages/guru/detail-guru.html', context)
def post(self, request): kelas_form = KelasForm(tingkat_choice(get_sekolah()), walikelas_choice(get_validwalikelas()), request.POST) try: if kelas_form.is_valid(): try: kelas_form.cleaned_data['walikelas'] = Guru.objects.get( nip=kelas_form.cleaned_data['walikelas']) except Guru.DoesNotExist: kelas_form.cleaned_data['walikelas'] = None Kelas.objects.create(**form_value(kelas_form), tahun_pelajaran=active_tp()) messages.success( request, 'Kelas berhasil dibuat, segera lengkapi data kelas tadi') except ValidationError: messages.error(request, 'Kelas itu sudah ada') finally: return redirect('list-kelas')
def wrapper(request, *args, **kwargs): try: if kwargs['nis']: siswa = Siswa.objects.get(nis=kwargs['nis']) kelas = get_validkelas(siswa) except KeyError: try: if kwargs['kelas']: kelas = Kelas.objects.get(nama=kwargs['kelas'], tahun_pelajaran=active_tp()) except KeyError: kelas = None return redirect('dashboard') semester = active_semester() dirs = f'{settings.MEDIA_ROOT}/rapor/{kelas.tahun_pelajaran.mulai} - {kelas.tahun_pelajaran.akhir} {semester.semester}/{kelas.jurusan}/{kelas.nama}' if not os.path.isdir(dirs): os.makedirs(dirs) kwargs['pdf_dir'] = dirs return function(request, *args, **kwargs)
def get(self, request, matapelajaran): try: matapelajaran = MataPelajaran.objects.get(pk=matapelajaran) except ObjectDoesNotExist: raise Http404 tp = active_tp() request.session['page'] = f'Detail {matapelajaran.nama}' initial = get_initial(matapelajaran) kkm, created = KKM.objects.get_or_create(matapelajaran=matapelajaran, tahun_pelajaran=tp) initial['pengetahuan'] = kkm.pengetahuan initial['keterampilan'] = kkm.keterampilan context = { 'matapelajaran': matapelajaran, 'kkm': kkm, 'mapelkkm_form': EditMatapelajaranForm(initial=initial), 'list_kelas': matapelajaran.kelas.filter(tahun_pelajaran=tp), } return render(request, 'pages/matapelajaran/detail-matapelajaran.html', context)
def get_active_kelas(siswa): try: return siswa.kelas.get(tahun_pelajaran=active_tp()).nama except ObjectDoesNotExist: return None
def get_total_kelas(jurusan): try: return Kelas.objects.filter(jurusan=jurusan, tahun_pelajaran=active_tp()).count() except ObjectDoesNotExist: return 0
def count_mapel(kelas): return MataPelajaran.objects.filter( kelas=kelas, kelas__tahun_pelajaran=active_tp()).count()
def get(self, request, kelas): request.session['page'] = f'Detail {kelas}' tp = active_tp() try: kelas = Kelas.objects.get(nama=kelas, tahun_pelajaran=tp) except ObjectDoesNotExist: raise Http404 try: active_walikelas = Guru.objects.get(kelas=kelas) except ObjectDoesNotExist: active_walikelas = None if active_walikelas == request.user or request.user.is_superuser: auth_walikelas = True else: auth_walikelas = False initial = get_initial(kelas) if initial['walikelas']: initial['walikelas'] = Guru.objects.get(pk=initial['walikelas']) if initial['jurusan']: initial['jurusan'] = Jurusan.objects.get( id=initial['jurusan']).nama list_siswa = Siswa.objects.filter(kelas=kelas).order_by('nama') if list_siswa: finished, unfinished, status = list_siswa_status( list_siswa=list_siswa, semester=active_semester()) else: finished = [] unfinished = [] list_mapel = MataPelajaran.objects.filter( kelas=kelas, kelas__tahun_pelajaran=tp).order_by('kelompok', 'nama') if list_mapel: list_mapel = zip_pelkkm(list_mapel, tp) context = { 'kelas': kelas, 'auth_walikelas': auth_walikelas, 'kelas_form': DisabledKelasForm(initial=initial), 'list_siswa': list_siswa, 'jumlah_siswa': list_siswa.count(), 'status_siswa': f'{len(finished)} Siswa tuntas / {len(unfinished)} Siswa belum tuntas', 'list_matapelajaran': list_mapel, 'active_walikelas': active_walikelas, 'valid_walikelas': get_validwalikelas(), 'tambahmapel_form': TambahMatapelajaranKelas( mapel_list=tambahmapel_choice(get_validpelajaran(kelas.nama))), 'tambahanggota_form': TambahAnggotaKelas( anggota_list=tambahanggota_choice(get_validsiswabaru())), } return render(request, 'pages/kelas/detail-kelas.html', context)