示例#1
0
文件: views.py 项目: harizMunawar/REI
 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)
示例#2
0
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()
示例#3
0
文件: views.py 项目: harizMunawar/REI
 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')
示例#4
0
文件: views.py 项目: harizMunawar/REI
    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)
示例#5
0
文件: views.py 项目: harizMunawar/REI
    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)
示例#6
0
文件: views.py 项目: harizMunawar/REI
    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
示例#7
0
文件: views.py 项目: harizMunawar/REI
 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)
示例#8
0
文件: views.py 项目: harizMunawar/REI
 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)
示例#9
0
文件: views.py 项目: harizMunawar/REI
 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)
示例#10
0
文件: views.py 项目: harizMunawar/REI
 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)
示例#11
0
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
示例#12
0
文件: views.py 项目: harizMunawar/REI
 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')
示例#13
0
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
示例#14
0
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(),
        }
示例#15
0
文件: views.py 项目: harizMunawar/REI
 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)
示例#16
0
    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)
示例#17
0
文件: views.py 项目: harizMunawar/REI
 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')
示例#18
0
    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)
示例#19
0
文件: views.py 项目: harizMunawar/REI
 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)
示例#20
0
def get_active_kelas(siswa):
    try:
        return siswa.kelas.get(tahun_pelajaran=active_tp()).nama
    except ObjectDoesNotExist:
        return None
示例#21
0
def get_total_kelas(jurusan):
    try:
        return Kelas.objects.filter(jurusan=jurusan,
                                    tahun_pelajaran=active_tp()).count()
    except ObjectDoesNotExist:
        return 0
示例#22
0
def count_mapel(kelas):
    return MataPelajaran.objects.filter(
        kelas=kelas, kelas__tahun_pelajaran=active_tp()).count()
示例#23
0
文件: views.py 项目: harizMunawar/REI
    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)