import os
import json
from django.contrib.auth.hashers import make_password, check_password
from django.db.models.functions import TruncMinute
from django.shortcuts import render
from datetime import datetime, date, timedelta
from babel.dates import format_date
import openpyxl
from collections import Counter, defaultdict
from django.contrib.auth import update_session_auth_hash, login, authenticate
from django.contrib.auth.forms import PasswordChangeForm
from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required
from django.contrib.auth.tokens import default_token_generator
from django.contrib.sites.shortcuts import get_current_site
from django.core.mail import EmailMessage
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
from django.db.models import Q, Sum, F
from django.forms import formset_factory, modelformset_factory
from django.http import HttpResponseRedirect, HttpResponse, FileResponse
from django.shortcuts import render, redirect, get_object_or_404
from django.template.loader import render_to_string
from django.utils.encoding import force_bytes
from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode
from django.utils.crypto import get_random_string
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import viewsets, permissions, status
from rest_framework.authentication import BasicAuthentication
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from weasyprint import HTML, CSS
from rest_framework.parsers import MultiPartParser, FormParser, JSONParser
from rest_framework import filters


# Create your views here.
from zonaguruapps.form import InputSiswaForm, InputJadwalForm
from zonaguruapps.models import StatusUser, ProfileUser, JadwalKbm, NamaSekolah, Kelas, Mapel, DataSiswa, DataKbm, \
    NilaiKbm, Ekskul, DataEkskul, NilaiEkskul, DataSekolahUtama, MediaAjar, DataLoker, DataPenawaran, \
    KonfirmasiPembayaran, CatatanGuru, KalendarKegiatan, DataTahfizh, Blog, IbadahHarian, ImageSlider
from zonaguruapps.serializers import StatusUserSerializer, ProfileUserSerializer, UserSerializer, \
    DataSekolahUtamaSerializer, NamaSekolahSerializer, MapelSerializer, EkskulSerializer, DataSiswaSerializer, \
    JadwalKbmSerializer, DataKbmSerializer, NilaiKbmSerializer, DataTahfizhSerializer, NilaiEkskulSerializer, \
    MediaAjarSerializer, DataLokerSerializer, DataPenawaranSerializer, CatatanGuruSerializer, BlogSerializer, \
    KalendarKegiatanSerializer, KonfirmasiPembayaranSerializer, DataEkskulSerializer, KelasSerializer, ImageSliderSerializer


def home(request):
    list_blog = Blog.objects.all().order_by('-tanggal')
    list_loker = DataLoker.objects.all().order_by('-tanggal')
    slide_image = ImageSlider.objects.all().values_list('file_image')
    return render(request, 'index.html', {'list_blog': list_blog, 'list_loker': list_loker, 'slide_image': slide_image})


def login_page(request):
    return render(request, 'registration/login.html', {})


def usersignup(request):
    if request.method == "POST":
        if request:
            u_name = request.POST.get('username')

            e_mail = request.POST.get('email')
            pass_word2 = request.POST.get('password2')
            # cek username dan email jika sudah ada
            if User.objects.filter(username=u_name).exists():
                username_exists = True
                return render(request, 'registration/registeruser.html', {'username_exists': username_exists})
            elif User.objects.filter(email=e_mail).exists():
                email_exists = True
                return render(request, 'registration/registeruser.html', {'email_exists': email_exists})

            # tambahkan user baru tapi jangan dulu disimpan
            new_user = User.objects.create_user(username=u_name, email=e_mail, password=pass_word2)
            new_user.is_active = False
            new_user.save()
            filter_username = User.objects.filter(username=u_name)
            id_user = filter_username.values_list('id', flat=True)

            tgl = date.today()
            tanggal = tgl.strftime('%Y-%m-%d')

            status = StatusUser(is_premium=False, registration_date=tanggal, is_free=True, user_id=id_user)
            status.save()
            profile_user = ProfileUser(profile_user_id=id_user)
            profile_user.save()
            sekolah_user = DataSekolahUtama(nama_user_id=id_user)
            sekolah_user.save()

            current_site = get_current_site(request)
            mail_subject = 'ZONAGURU.ID - Aktivasi akun Anda'
            message = render_to_string('registration/aktivasi_email.html',
                                       {'new_user': new_user, 'domain': current_site.domain,
                                        'uid': urlsafe_base64_encode(force_bytes(new_user.pk)),
                                        'token': default_token_generator.make_token(new_user)})

            to_email = e_mail
            send_email = EmailMessage(mail_subject, message, to=[to_email], )
            send_email.send()

            return render(request, 'registration/tunggu_aktivasi.html', {})

    return render(request, 'registration/registeruser.html', {})


def userlogin(request):
    if request.method == "POST":
        user_name = request.POST.get('username')
        pass_word = request.POST.get('password')

        user = authenticate(request, username=user_name, password=pass_word)
        if user:
            # if user.is_authenticated:
            if user.is_active:
                # cek status user guru atau bukan
                id_user = user.id
                status = StatusUser.objects.filter(user_id=id_user)

                status_free = status.values_list('is_free', flat=True).first()
                status_premium = status.values_list('is_premium', flat=True).first()
                status_premium_end = status.values_list('is_premium_end', flat=True).first()

                if status_premium:

                    premium_durasi = status.values_list('durasi_premium', flat=True).first()
                    reg_premium_date = status.values_list('registration_premium_date', flat=True).first()
                    tgl = date.today()  # .strftime('YYYY-MM-DD')
                    #tanggal = tgl.strptime('%Y-%m-%d')

                    tgl_akhir_premium = reg_premium_date + timedelta(days=premium_durasi)
                    #tgl_akhir = datetime.strptime(tgl_akhir_premium, '%Y-%m-%d')

                    sisa_premium = tgl_akhir_premium - tgl

                    if sisa_premium.days <= 0:
                        get_status = StatusUser.objects.get(user_id=id_user)
                        get_status.is_free = True
                        get_status.is_premium = False
                        get_status.is_premium_end = True
                        get_status.save()

                login(request, user)
                return HttpResponseRedirect('/user/profile/')

            else:
                not_active = True
                return render(request, 'registration/login.html', {'not_active': not_active})

        else:
            login_eror = True
            return render(request, 'registration/login.html', {'login_eror': login_eror})

    else:
        return render(request, 'index.html', {})


def aktivasi_akun(request, uidb64, token):
    token = token

    try:
        uid = urlsafe_base64_decode(uidb64).decode()
        user = User.objects.get(pk=uid)
    except(TypeError, ValueError, OverflowError, User.DoesNotExist):
        user = None

    if user is not None:
        user.is_active = True
        user.save()

        tgl = date.today()
        tanggal = tgl.strftime('%Y-%m-%d')

        status = StatusUser.objects.get(user_id=user.id)
        status.is_premium = True
        status.is_free = False
        status.registration_premium_date = tanggal
        status.durasi_premium = 30
        status.save()

        premium_durasi = StatusUser.objects.filter(user_id=user.id).values_list('durasi_premium', flat=True).first()
        end_date_premium = tgl + timedelta(days=premium_durasi)

        return render(request, 'registration/aktivasi_berhasil.html', {})
    else:
        return render(request, 'aktivasi_tidak_valid.html', {})


def lupa_password(request):
    email_exists = None
    if request.method == "POST":

        e_mail = request.POST.get('email')

        user = User.objects.filter(email=e_mail)
        if user.exists():
            email_exists = True

            current_site = get_current_site(request)
            mail_subject = 'Permintaan Ubah Password'
            message = render_to_string('registration/reset_password_email.html',
                                       {'domain': current_site.domain,
                                        'uid': urlsafe_base64_encode(force_bytes(user.first().id)),
                                        'token': default_token_generator.make_token(user.first())})

            to_email = e_mail
            send_email = EmailMessage(mail_subject, message, to=[to_email], )
            send_email.send()

            return render(request, 'registration/lupa_password.html', {'email_exists': email_exists})

        else:
            email_exists = False
            return render(request, 'registration/lupa_password.html', {'email_exists': email_exists})

    return render(request, 'registration/lupa_password.html', {'email_exists': email_exists})


def ubah_password(request, uidb64, token):
    uid = uidb64
    token = token

    if request.method == "POST":
        email = request.POST.get('email')
        password = request.POST.get('passwd2')

        user = User.objects.get(email__exact=email)

        user.set_password(password)
        user.save()
        update_session_auth_hash(request, user)

        return render(request, 'registration/password_change_ok.html', {'user': user})

    return render(request, 'registration/password_change.html', {'uid': uid, 'token': token})


def ubah_password_sukses(request):
    return render(request, 'registration/password_change_ok.html', )


"""
DASHBOARD
"""


@login_required
def user_profile(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            judul_halaman = 'Profile'

            auth_id_user = User.objects.all().filter(id=id_user)
            nama_depan = auth_id_user.values_list('first_name', flat=True).first()
            nama_belakang = auth_id_user.values_list('last_name', flat=True).first()
            #nama_lengkap = str(nama_depan) + " " + str(nama_belakang)
            email_user = auth_id_user.values_list('email', flat=True).first()

            id_profile_user = ProfileUser.objects.filter(profile_user_id=id_user)
            id_sekolah_user = DataSekolahUtama.objects.filter(nama_user_id=id_user)

            try:
                current_id = id_profile_user.values_list('id', flat=True).first()
                user_no_hp = id_profile_user.values_list('no_hp', flat=True).first()
                user_ttl = id_profile_user.values_list('ttl', flat=True).first()
                alamat = id_profile_user.values_list('alamat_rumah', flat=True).first()
                user_foto = id_profile_user.values_list('photo_user', flat=True).first()
                print("USER FOTO", user_foto)
                kelurahan = id_profile_user.values_list('kelurahan', flat=True).first()
                kecamatan = id_profile_user.values_list('kecamatan', flat=True).first()
                kota = id_profile_user.values_list('kota', flat=True).first()
                provinsi = id_profile_user.values_list('provinsi', flat=True).first()

                current_id_sekolah = id_sekolah_user.values_list('id', flat=True).first()
                nama_sekolah = id_sekolah_user.values_list('nama_sekolah', flat=True).first()
                alamat_sekolah = id_sekolah_user.values_list('alamat_sekolah', flat=True).first()
                kelurahan_sekolah = id_sekolah_user.values_list('kelurahan', flat=True).first()
                kecamatan_sekolah = id_sekolah_user.values_list('kecamatan', flat=True).first()
                kota_sekolah = id_sekolah_user.values_list('kota', flat=True).first()
                provinsi_sekolah = id_sekolah_user.values_list('provinsi', flat=True).first()

            except BaseException as e:
                print(e)
                return render(request, 'pages/user_profile.html')

            if 'fotoprofil' in request.POST:
                foto = request.FILES['foto']

                profile_user_id = ProfileUser.objects.get(id=current_id)
                profile_user_id.photo_user = foto
                profile_user_id.save(update_fields=['photo_user'])

                sukses = True
                return render(request, 'pages/user_profile.html', {'sukses': sukses})

            elif 'dataprofil' in request.POST:
                #if request:
                nama_depan = request.POST.get('namadepan')
                nama_belakang = request.POST.get('namabelakang')
                email = request.POST.get('email')
                ttl_user = request.POST.get('ttl')
                nomor_hp = request.POST.get('nohp')
                alamatrumah = request.POST.get('alamat')
                kel_rumah = request.POST.get('kel')
                kec_rumah = request.POST.get('kec')
                kota_rumah = request.POST.get('kota')
                prov_rumah = request.POST.get('provinsi')

                auth_id_user.update(first_name=nama_depan, last_name=nama_belakang, email=email)

                id_profile_user.update(no_hp=nomor_hp, alamat_rumah=alamatrumah,
                                       ttl=ttl_user, kelurahan=kel_rumah,
                                       kecamatan=kec_rumah, kota=kota_rumah, provinsi=prov_rumah)

                sukses = True

                return render(request, 'pages/user_profile.html', {'sukses': sukses})

            elif 'datasekolah' in request.POST:
                nama_sekolah = request.POST.get('namasekolah')
                alamatsekolah = request.POST.get('alamatsekolah')
                kel_sekolah = request.POST.get('kelsekolah')
                kec_sekolah = request.POST.get('kecsekolah')
                kotasekolah = request.POST.get('kotasekolah')
                provinsisekolah = request.POST.get('provinsisekolah')

                update_sekolah_user = DataSekolahUtama(id=current_id_sekolah, nama_user_id=id_user,
                                                       nama_sekolah=nama_sekolah,
                                                       alamat_sekolah=alamatsekolah,
                                                       kelurahan=kel_sekolah,
                                                       kecamatan=kec_sekolah, kota=kotasekolah,
                                                       provinsi=provinsisekolah)
                update_sekolah_user.save()

                sukses = True

                return render(request, 'pages/user_profile.html', {'sukses': sukses})

            return render(request, 'pages/user_profile.html', {'judul_halaman': judul_halaman,
                                                               'nama_depan': nama_depan,
                                                               'nama_belakang': nama_belakang,
                                                               'email_user': email_user,
                                                               'user_no_hp': user_no_hp,
                                                               'user_ttl': user_ttl,
                                                               'alamat': alamat,
                                                               'user_foto': user_foto,
                                                               'kelurahan': kelurahan,
                                                               'kecamatan': kecamatan,
                                                               'kota': kota, 'provinsi': provinsi,
                                                               'nama_sekolah': nama_sekolah,
                                                               'alamat_sekolah': alamat_sekolah,
                                                               'kelurahan_sekolah': kelurahan_sekolah,
                                                               'kecamatan_sekolah': kecamatan_sekolah,
                                                               'kota_sekolah': kota_sekolah,
                                                               'provinsi_sekolah': provinsi_sekolah
                                                               })

    return HttpResponseRedirect('home')


@login_required
def daftar_guru(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            daftar_guru = User.objects.filter(is_staff=False).exclude(id=id_user)

            paginator = Paginator(daftar_guru, 9)
            page = request.GET.get('page')
            try:
                posts = paginator.page(page)
            except PageNotAnInteger:
                posts = paginator.page(1)
            except EmptyPage:
                posts = paginator.page(paginator.num_pages)

            if request.method == 'POST':

                cari_guru = request.POST.get('cariguru')

                daftar_guru_filter = User.objects.filter(Q(first_name__icontains=cari_guru) |
                                                         Q(last_name__icontains=cari_guru))

                paginator_filter = Paginator(daftar_guru_filter, 10)
                page_filter = request.GET.get('page')
                try:
                    posts_filter = paginator_filter.page(page_filter)
                except PageNotAnInteger:
                    posts_filter = paginator_filter.page(1)
                except EmptyPage:
                    posts_filter = paginator_filter.page(paginator.num_pages)

                return render(request, 'pages/user_daftar_guru.html', {'posts_filter': posts_filter})

            return render(request, 'pages/user_daftar_guru.html', {'posts': posts})

    return HttpResponseRedirect('home')


@login_required
def detail_profile_guru(request, uid):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            detail_rekan_guru = User.objects.get(id=uid)
            profile_rekan_guru = ProfileUser.objects.get(profile_user_id=uid)

            if request.method == 'POST':

                follow_user = request.POST.get('follow')

                if follow_user == "follow":
                    profile_rekan_guru.follows.add(profile_rekan_guru)
                elif follow_user == "unfollow":
                    profile_rekan_guru.follows.remove(profile_rekan_guru)

                profile_rekan_guru.save()

            return render(request, 'pages/user_detail_profile_guru.html', {'detail_rekan_guru': detail_rekan_guru,
                                                                           'profile_rekan_guru': profile_rekan_guru})

    return HttpResponseRedirect('home')


@login_required
def input_kelas_mapel(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            if 'simpansekolah' in request.POST:

                namasekolah = request.POST.get('namasekolah')
                input_sekolah = NamaSekolah(nama_user_id=id_user, nama_sekolah=namasekolah)
                input_sekolah.save()

                sukses = True
                print("SUKSES", sukses)

                return render(request, 'pages/user_input_kelas_mapel.html', {'sukses': sukses})

            elif 'simpankelas' in request.POST:

                namakelas = request.POST.get('kelas')
                input_kelas = Kelas(nama_user_id=id_user, nama_kelas=namakelas)
                input_kelas.save()

                sukses = True

                return render(request, 'pages/user_input_kelas_mapel.html', {'sukses': sukses})

            elif 'simpanmapel' in request.POST:

                namamapel = request.POST.get('mapel')
                input_mapel = Mapel(nama_user_id=id_user, nama_mapel=namamapel)
                input_mapel.save()

                sukses = True

                return render(request, 'pages/user_input_kelas_mapel.html', {'sukses': sukses})

            elif 'simpanekskul' in request.POST:

                namaekskul = request.POST.get('ekskul')
                input_ekskul = Ekskul(nama_user_id=id_user, nama_ekskul=namaekskul)
                input_ekskul.save()

                sukses = True

                return render(request, 'pages/user_input_kelas_mapel.html', {'sukses': sukses})

        return render(request, 'pages/user_input_kelas_mapel.html', {})

    return HttpResponseRedirect('home')


@login_required
def daftar_kelas_mapel(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            daftar_sekolah = NamaSekolah.objects.filter(nama_user_id=id_user).order_by('nama_sekolah')
            daftar_kelas = Kelas.objects.filter(nama_user_id=id_user).order_by('nama_kelas')
            daftar_mapel = Mapel.objects.filter(nama_user_id=id_user).order_by('nama_mapel')
            daftar_ekskul = Ekskul.objects.filter(nama_user_id=id_user).order_by('nama_ekskul')

            return render(request, 'pages/user_daftar_kelas_mapel.html', {'daftar_sekolah': daftar_sekolah,
                                                                          'daftar_kelas': daftar_kelas,
                                                                          'daftar_mapel': daftar_mapel,
                                                                          'daftar_ekskul': daftar_ekskul})

    return HttpResponseRedirect('home')


@login_required
def hapus_nama_sekolah(request, ns):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            nama_sekolah = NamaSekolah.objects.filter(nama_user_id=id_user, nama_sekolah=ns)
            nama_sekolah.delete()

            return redirect('zonaguruapps:daftar_kelas_mapel')

    return HttpResponseRedirect('home')


@login_required
def ubah_nama_sekolah(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            if request.method == 'POST':

                id_data = request.POST.get('idsekolah')
                namasekolahbaru = request.POST.get('namasekolah')

                filter_nama_sekolah = NamaSekolah.objects.filter(id=id_data)

                nama_sekolah_diubah = filter_nama_sekolah.values_list('nama_sekolah', flat=True).first()

                filter_nama_sekolah.update(nama_sekolah=namasekolahbaru)

                id_data_siswa = DataSiswa.objects.filter(nama_user_id=id_user, nama_sekolah=nama_sekolah_diubah).values_list("id", flat=True)
                print("DATA SISWA", list(id_data_siswa), nama_sekolah_diubah)

                if id_data_siswa:
                    for id_data in list(id_data_siswa):
                        data_siswa = DataSiswa.objects.filter(id=id_data)
                        data_siswa.update(nama_sekolah=namasekolahbaru)
                        print("DATA SISWA", id_data, data_siswa)

                id_jadwal_kbm = JadwalKbm.objects.filter(nama_user_id=id_user, nama_sekolah=nama_sekolah_diubah).values_list("id", flat=True)

                if id_jadwal_kbm:
                    for id_data in list(id_jadwal_kbm):
                        jadwal_kbm = JadwalKbm.objects.filter(id=id_data)
                        jadwal_kbm.update(nama_sekolah=namasekolahbaru)

                id_data_kbm = DataKbm.objects.filter(nama_user_id=id_user, nama_sekolah=nama_sekolah_diubah).values_list("id", flat=True)

                if id_data_kbm:
                    for id_data in list(id_data_kbm):
                        data_kbm = DataKbm.objects.filter(id=id_data)
                        data_kbm.update(nama_sekolah=namasekolahbaru)

                id_nilai_kbm = NilaiKbm.objects.filter(nama_user_id=id_user, nama_sekolah=nama_sekolah_diubah).values_list("id", flat=True)

                if id_nilai_kbm:
                    for id_data in list(id_nilai_kbm):
                        nilai_kbm = NilaiKbm.objects.filter(id=id_data)
                        nilai_kbm.update(nama_sekolah=namasekolahbaru)

                id_data_ekskul = DataEkskul.objects.filter(nama_user_id=id_user, nama_sekolah=nama_sekolah_diubah).values_list("id", flat=True)

                if id_data_ekskul:
                    for id_data in list(id_data_ekskul):
                        data_ekskul = DataEkskul.objects.filter(id=id_data)
                        data_ekskul.update(nama_sekolah=namasekolahbaru)

                id_nilai_ekskul = NilaiEkskul.objects.filter(nama_user_id=id_user, nama_sekolah=nama_sekolah_diubah).values_list("id", flat=True)

                if id_nilai_ekskul:
                    for id_data in list(id_nilai_ekskul):
                        nilai_ekskul = NilaiEkskul.objects.filter(id=id_data)
                        nilai_ekskul.update(nama_sekolah=namasekolahbaru)

                return redirect('zonaguruapps:daftar_kelas_mapel')

    return HttpResponseRedirect('home')


@login_required
def hapus_nama_kelas(request, kls):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()
        daftar_kelas = Kelas.objects.filter(nama_user_id=id_user)

        if status_user:

            nama_kelas = daftar_kelas.filter(nama_kelas=kls)
            nama_kelas.delete()

            return redirect('zonaguruapps:daftar_kelas_mapel')

    return HttpResponseRedirect('home')


@login_required
def ubah_nama_kelas(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            if request.method == 'POST':

                id_data = request.POST.get('idkelas')
                namakelasbaru = request.POST.get('namakelas')

                filter_nama_kelas = Kelas.objects.filter(id=id_data)

                nama_kelas_diubah = filter_nama_kelas.values_list('nama_kelas', flat=True).first()

                filter_nama_kelas.update(nama_kelas=namakelasbaru)

                id_data_siswa = DataSiswa.objects.filter(nama_user_id=id_user, nama_kelas=nama_kelas_diubah).values_list("id", flat=True)
                print("DATA SISWA", list(id_data_siswa), nama_kelas_diubah)

                if id_data_siswa:
                    for id_data in list(id_data_siswa):
                        data_siswa = DataSiswa.objects.filter(id=id_data)
                        data_siswa.update(nama_kelas=namakelasbaru)
                        print("DATA SISWA", id_data, data_siswa)

                id_jadwal_kbm = JadwalKbm.objects.filter(nama_user_id=id_user, kelas=nama_kelas_diubah).values_list("id", flat=True)

                if id_jadwal_kbm:
                    for id_data in list(id_jadwal_kbm):
                        jadwal_kbm = JadwalKbm.objects.filter(id=id_data)
                        jadwal_kbm.update(kelas=namakelasbaru)

                id_data_kbm = DataKbm.objects.filter(nama_user_id=id_user, kelas=nama_kelas_diubah).values_list("id", flat=True)

                if id_data_kbm:
                    for id_data in list(id_data_kbm):
                        data_kbm = DataKbm.objects.filter(id=id_data)
                        data_kbm.update(kelas=namakelasbaru)

                id_nilai_kbm = NilaiKbm.objects.filter(nama_user_id=id_user, kelas=nama_kelas_diubah).values_list("id", flat=True)

                if id_nilai_kbm:
                    for id_data in list(id_nilai_kbm):
                        nilai_kbm = NilaiKbm.objects.filter(id=id_data)
                        nilai_kbm.update(kelas=namakelasbaru)

                id_data_ekskul = DataEkskul.objects.filter(nama_user_id=id_user, kelas=nama_kelas_diubah).values_list("id", flat=True)

                if id_data_ekskul:
                    for id_data in list(id_data_ekskul):
                        data_ekskul = DataEkskul.objects.filter(id=id_data)
                        data_ekskul.update(kelas=namakelasbaru)

                id_nilai_ekskul = NilaiEkskul.objects.filter(nama_user_id=id_user, kelas=nama_kelas_diubah).values_list("id", flat=True)

                if id_nilai_ekskul:
                    for id_data in list(id_nilai_ekskul):
                        nilai_ekskul = NilaiEkskul.objects.filter(id=id_data)
                        nilai_ekskul.update(kelas=namakelasbaru)

                return redirect('zonaguruapps:daftar_kelas_mapel')

    return HttpResponseRedirect('home')


@login_required
def ubah_nama_mapel(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            if request.method == 'POST':

                id_data = request.POST.get('idmapel')
                mapelbaru = request.POST.get('namamapel')

                filter_nama_mapel = Mapel.objects.filter(id=id_data)

                nama_mapel_diubah = filter_nama_mapel.values_list('nama_mapel', flat=True).first()

                filter_nama_mapel.update(nama_mapel=mapelbaru)

                id_jadwal_kbm = JadwalKbm.objects.filter(nama_user_id=id_user, mapel=nama_mapel_diubah).values_list("id", flat=True)

                if id_jadwal_kbm:
                    for id_data in list(id_jadwal_kbm):
                        jadwal_kbm = JadwalKbm.objects.filter(id=id_data)
                        jadwal_kbm.update(mapel=mapelbaru)

                id_data_kbm = DataKbm.objects.filter(nama_user_id=id_user, mapel=nama_mapel_diubah).values_list("id", flat=True)

                if id_data_kbm:
                    for id_data in list(id_data_kbm):
                        data_kbm = DataKbm.objects.filter(id=id_data)
                        data_kbm.update(mapel=mapelbaru)

                id_nilai_kbm = NilaiKbm.objects.filter(nama_user_id=id_user, mapel=nama_mapel_diubah).values_list("id", flat=True)

                if id_nilai_kbm:
                    for id_data in list(id_nilai_kbm):
                        nilai_kbm = NilaiKbm.objects.filter(id=id_data)
                        nilai_kbm.update(mapel=mapelbaru)

                return redirect('zonaguruapps:daftar_kelas_mapel')

    return HttpResponseRedirect('home')


@login_required
def hapus_nama_mapel(request, mpl):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            nama_mapel = Mapel.objects.filter(nama_user_id=id_user, nama_mapel=mpl)
            nama_mapel.delete()

            return redirect('zonaguruapps:daftar_kelas_mapel')

    return HttpResponseRedirect('home')


@login_required
def ubah_nama_ekskul(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            if request.method == 'POST':

                id_data = request.POST.get('idekskul')
                ekskulbaru = request.POST.get('namaekskul')

                filter_nama_ekskul = Ekskul.objects.filter(id=id_data)

                nama_ekskul_diubah = filter_nama_ekskul.values_list('nama_ekskul', flat=True).first()

                filter_nama_ekskul.update(nama_ekskul=ekskulbaru)

                id_data_siswa = DataSiswa.objects.filter(nama_user_id=id_user, nama_ekskul=nama_ekskul_diubah).values_list("id", flat=True)

                if id_data_siswa:
                    for id_data in list(id_data_siswa):
                        data_siswa = DataSiswa.objects.filter(id=id_data)
                        data_siswa.update(nama_ekskul=ekskulbaru)

                id_jadwal_kbm = JadwalKbm.objects.filter(nama_user_id=id_user, mapel=nama_ekskul_diubah).values_list("id", flat=True)

                if id_jadwal_kbm:
                    for id_data in list(id_jadwal_kbm):
                        jadwal_kbm = JadwalKbm.objects.filter(id=id_data)
                        jadwal_kbm.update(mapel=ekskulbaru)

                id_data_ekskul = DataEkskul.objects.filter(nama_user_id=id_user, nama_ekskul=nama_ekskul_diubah).values_list("id", flat=True)

                if id_data_ekskul:
                    for id_data in list(id_data_ekskul):
                        data_ekskul = DataEkskul.objects.filter(id=id_data)
                        data_ekskul.update(nama_ekskul=ekskulbaru)

                return redirect('zonaguruapps:daftar_kelas_mapel')

    return HttpResponseRedirect('home')


@login_required
def hapus_nama_ekskul(request, ekl):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            nama_ekskul = Ekskul.objects.filter(nama_user_id=id_user, nama_ekskul=ekl)
            nama_ekskul.delete()

            return redirect('zonaguruapps:daftar_kelas_mapel')

    return HttpResponseRedirect('home')


@login_required
def input_siswa(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            daftar_sekolah = NamaSekolah.objects.filter(nama_user_id=id_user)
            daftar_kelas = Kelas.objects.filter(nama_user_id=id_user)
            daftar_ekskul = Ekskul.objects.filter(nama_user_id=id_user)
            print("EKSKUL", daftar_ekskul)

            if request.method == 'POST':

                namasekolah = request.POST.get('sekolah')
                namakelas = request.POST.get('kelas')

                namasiswa = request.POST.getlist('namasiswa')
                #list_data_nama.append(namasiswa)

                namaekskul1 = request.POST.getlist('ekskul1')
                # nama_ekskul.append(namaekskul)
                namaekskul2 = request.POST.getlist('ekskul2')
                namaekskul3 = request.POST.getlist('ekskul3')

                join_data = [namasiswa, namaekskul1, namaekskul2, namaekskul3]
                print("EKSKUL", join_data)

                for index in range(len(join_data[0])):
                    data_input = [data[index] for data in join_data]

                    input_siswa = DataSiswa(nama_user_id=id_user, nama_siswa=data_input[0], nama_sekolah=namasekolah,
                                            nama_kelas=namakelas, nama_ekskul1=data_input[1], nama_ekskul2=data_input[2],
                                            nama_ekskul3=data_input[3])
                    input_siswa.save()

                sukses = True

                return render(request, 'pages/user_input_siswa.html', {'daftar_sekolah': daftar_sekolah,
                                                                       'daftar_kelas': daftar_kelas,
                                                                       'daftar_ekskul': daftar_ekskul,
                                                                       'sukses': sukses})

            return render(request, 'pages/user_input_siswa.html', {'daftar_sekolah': daftar_sekolah,
                                                                   'daftar_kelas': daftar_kelas,
                                                                   'daftar_ekskul': daftar_ekskul})

    return HttpResponseRedirect('home')


@login_required
def data_siswa(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            daftar_sekolah = NamaSekolah.objects.filter(nama_user_id=id_user)
            daftar_kelas = Kelas.objects.filter(nama_user_id=id_user)
            daftar_ekskul = Ekskul.objects.filter(nama_user_id=id_user)
            all_siswa = DataSiswa.objects.filter(nama_user_id=id_user)

            if request.method == 'POST':
                namasekolah = request.POST.get('sekolah')
                namakelas = request.POST.get('kelas')

                daftar_siswa = all_siswa.filter(Q(nama_sekolah=namasekolah) & Q(nama_kelas=namakelas)).order_by('nama_siswa')
                print("DAFTAR SISWA", daftar_siswa)

                if daftar_siswa:

                    return render(request, 'pages/user_daftar_siswa.html', {'daftar_sekolah': daftar_sekolah,
                                                                            'daftar_kelas': daftar_kelas,
                                                                            'daftar_siswa': daftar_siswa,
                                                                            'daftar_ekskul': daftar_ekskul})

                else:
                    data_kosong = True
                    return render(request, 'pages/user_daftar_siswa.html', {'daftar_sekolah': daftar_sekolah,
                                                                            'daftar_kelas': daftar_kelas,
                                                                            'daftar_ekskul': daftar_ekskul,
                                                                            'data_kosong': data_kosong})

            return render(request, 'pages/user_daftar_siswa.html', {'daftar_sekolah': daftar_sekolah,
                                                                    'daftar_kelas': daftar_kelas,
                                                                    'daftar_ekskul': daftar_ekskul,
                                                                    'all_siswa': all_siswa})

    return HttpResponseRedirect('home')


@login_required
def hapus_data_siswa(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            if request.method == 'POST':

                iddata = request.POST.get('iddata')

                id_data = DataSiswa.objects.filter(id=iddata)
                id_data.delete()

            return redirect('zonaguruapps:data_siswa')

    return HttpResponseRedirect('home')


@login_required
def ubah_data_siswa(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            if request.method == 'POST':

                idsiswa = request.POST.get('idsiswa')
                namasiswa = request.POST.get('namasiswa')
                namasekolah = request.POST.get('sekolah')
                namakelas = request.POST.get('kelas')
                namaekskul1 = request.POST.get('ekskul1')
                namaekskul2 = request.POST.get('ekskul2')
                namaekskul3 = request.POST.get('ekskul3')

                print("UBAH", namasiswa, namasekolah, namakelas, namaekskul1, namaekskul2, namaekskul3)

                id_siswa = DataSiswa.objects.filter(id=idsiswa)
                id_siswa.update(nama_siswa=namasiswa, nama_sekolah=namasekolah, nama_kelas=namakelas,
                                nama_ekskul1=namaekskul1, nama_ekskul2=namaekskul2, nama_ekskul3=namaekskul3)

            return redirect('zonaguruapps:data_siswa')

    return HttpResponseRedirect('home')


@login_required
def input_jadwal_kbm(request):
    global sukses, awaljam, akhirjam
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            judul_halaman = 'Profile'
            daftar_sekolah = NamaSekolah.objects.filter(nama_user_id=id_user)
            daftar_kelas = Kelas.objects.filter(nama_user_id=id_user)
            daftar_mapel = Mapel.objects.filter(nama_user_id=id_user)

            if request.method == 'POST':

                tahunajar = request.POST.get('tahunajar')
                namahari = request.POST.get('hari')
                kelas = request.POST.get('kelas')
                namasekolah = request.POST.get('sekolah')
                mapel = request.POST.get('mapel')

                awaljam = request.POST.get('awaljam')
                akhirjam = request.POST.get('akhirjam')

                kbm_sudah_ada = JadwalKbm.objects.filter(
                    Q(tahun_ajar=tahunajar) & Q(kelas=kelas) & Q(nama_hari=namahari) & Q(nama_sekolah=namasekolah) & Q(
                        awal_jam=awaljam) & Q(mapel=mapel)).values_list('id')

                if kbm_sudah_ada:
                    kbm_sudah_ada.update(nama_user_id=id_user, nama_hari=namahari,
                                         awal_jam=awaljam, akhir_jam=akhirjam,
                                         mapel=mapel, kelas=kelas,
                                         nama_sekolah=namasekolah, tahun_ajar=tahunajar)
                    sukses = True

                else:
                    input_jadwal_kbm = JadwalKbm(nama_user_id=id_user, nama_hari=namahari,
                                                 awal_jam=awaljam, akhir_jam=akhirjam,
                                                 mapel=mapel, kelas=kelas,
                                                 nama_sekolah=namasekolah, tahun_ajar=tahunajar
                                                 )
                    input_jadwal_kbm.save()

                    sukses = True

                return render(request, 'pages/user_input_jadwal_kbm.html', {'status_user': status_user,
                                                                           'sukses': sukses,
                                                                           'daftar_sekolah': daftar_sekolah,
                                                                           'daftar_kelas': daftar_kelas,
                                                                           'daftar_mapel': daftar_mapel})

            else:
                return render(request, 'pages/user_input_jadwal_kbm.html', {'status_user': status_user,
                                                                            'daftar_sekolah': daftar_sekolah,
                                                                            'daftar_kelas': daftar_kelas,
                                                                            'daftar_mapel': daftar_mapel})

    return HttpResponseRedirect('home')


@login_required
def user_jadwal_kbm(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            last_tp = JadwalKbm.objects.filter(nama_user_id=id_user).values_list('tahun_ajar', flat=True).last()
            print("TP", last_tp)
            tahun = last_tp

            jadwalkbm_senin = JadwalKbm.objects.filter(Q(nama_user_id=id_user) & Q(tahun_ajar=last_tp) & Q(nama_hari='Senin'))
            jadwalkbm_selasa = JadwalKbm.objects.filter(Q(nama_user_id=id_user) & Q(tahun_ajar=last_tp) & Q(nama_hari='Selasa'))
            jadwalkbm_rabu = JadwalKbm.objects.filter(Q(nama_user_id=id_user) & Q(tahun_ajar=last_tp) & Q(nama_hari='Rabu'))
            jadwalkbm_kamis = JadwalKbm.objects.filter(Q(nama_user_id=id_user) & Q(tahun_ajar=last_tp) & Q(nama_hari='Kamis'))
            jadwalkbm_jumat = JadwalKbm.objects.filter(Q(nama_user_id=id_user) & Q(tahun_ajar=last_tp) & Q(nama_hari='Jumat'))
            jadwalkbm_sabtu = JadwalKbm.objects.filter(Q(nama_user_id=id_user) & Q(tahun_ajar=last_tp) & Q(nama_hari='Sabtu'))

            if request.method == "POST":

                tp = request.POST.get('tahunajar')

                if tp:
                    return redirect('zonaguruapps:user_jadwal_kbm_filter', tp)

                else:
                    return redirect('zonaguruapps:user_jadwal_kbm_filter', last_tp)

            return render(request, 'pages/user_jadwal_kbm.html', {'jadwalkbm_senin': jadwalkbm_senin,
                                                                  'jadwalkbm_selasa': jadwalkbm_selasa,
                                                                  'jadwalkbm_rabu': jadwalkbm_rabu,
                                                                  'jadwalkbm_kamis': jadwalkbm_kamis,
                                                                  'jadwalkbm_jumat': jadwalkbm_jumat,
                                                                  'jadwalkbm_sabtu': jadwalkbm_sabtu,
                                                                  'tahun': tahun})

    return HttpResponseRedirect('home')


@login_required
def user_jadwal_kbm_filter(request, tp):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            tahun= tp
            jadwal_kbm_tp = JadwalKbm.objects.filter(Q(nama_user_id=id_user) & Q(tahun_ajar=tahun))

            jadwalkbm_senin = jadwal_kbm_tp.filter(nama_hari='Senin')
            jadwalkbm_selasa = jadwal_kbm_tp.filter(nama_hari='Selasa')
            jadwalkbm_rabu = jadwal_kbm_tp.filter(nama_hari='Rabu')
            jadwalkbm_kamis = jadwal_kbm_tp.filter(nama_hari='Kamis')
            jadwalkbm_jumat = jadwal_kbm_tp.filter(nama_hari='Jumat')
            jadwalkbm_sabtu = jadwal_kbm_tp.filter(nama_hari='Sabtu')

            return render(request, 'pages/user_jadwal_kbm.html', {'jadwalkbm_senin': jadwalkbm_senin,
                                                                  'jadwalkbm_selasa': jadwalkbm_selasa,
                                                                  'jadwalkbm_rabu': jadwalkbm_rabu,
                                                                  'jadwalkbm_kamis': jadwalkbm_kamis,
                                                                  'jadwalkbm_jumat': jadwalkbm_jumat,
                                                                  'jadwalkbm_sabtu': jadwalkbm_sabtu,
                                                                  'tahun': tahun})

    return HttpResponseRedirect('home')


@login_required
def user_hapus_jadwal_kbm(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            if request.method == 'POST':

                iddata = request.POST.get('iddata')

                id_jadwal = JadwalKbm.objects.filter(id=iddata)
                id_jadwal.delete()

            return redirect('zonaguruapps:user_jadwal_kbm')

    return HttpResponseRedirect('home')


@login_required
def input_kbm(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            daftar_sekolah = NamaSekolah.objects.filter(nama_user_id=id_user)
            daftar_kelas = Kelas.objects.filter(nama_user_id=id_user)

            if request.method == 'POST':
                namasekolah = request.POST.get('sekolah')
                namakelas = request.POST.get('kelas')

                if namasekolah and namakelas:
                    return redirect('zonaguruapps:input_kbm_filter', namasekolah, namakelas)

                return render(request, 'pages/user_input_kbm.html', {'daftar_sekolah': daftar_sekolah,
                                                                 'daftar_kelas': daftar_kelas})

            return render(request, 'pages/user_input_kbm.html', {'daftar_sekolah': daftar_sekolah,
                                                                 'daftar_kelas': daftar_kelas})

    return HttpResponseRedirect('home')


@login_required
def input_kbm_filter(request, ns, nk):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            namasekolah = ns
            namakelas = nk
            daftar_sekolah = NamaSekolah.objects.filter(nama_user_id=id_user)
            daftar_kelas = Kelas.objects.filter(nama_user_id=id_user)

            daftar_nama_siswa = DataSiswa.objects.filter(Q(nama_user_id=id_user) & Q(nama_sekolah=ns) & Q(nama_kelas=nk)).values_list('nama_siswa', flat=True).order_by('nama_siswa')
            jumlah_siswa = len(daftar_nama_siswa)
            daftar_mapel = Mapel.objects.filter(nama_user_id=id_user)

            if request.method == 'POST':
                tanggal_kbm = request.POST.get('tanggalkbm')
                mata_pelajaran = request.POST.get('mapel')
                materi_pelajaran = request.POST.get('materi')
                namasiswa = request.POST.getlist('namasiswa')
                kehadiran = request.POST.getlist('kehadiran')
                keterangan = request.POST.getlist('keterangan')
                tahunajar = request.POST.get('tahunajar')
                semesterajar = request.POST.get('semesterajar')

                join_data = [namasiswa, kehadiran, keterangan]

                for index in range(jumlah_siswa):
                    data_tiap_siswa = [data[index] for data in join_data]

                    input_data_kbm = DataKbm(nama_user_id=id_user, tanggal=tanggal_kbm,
                                             materi=materi_pelajaran,
                                             mapel=mata_pelajaran,
                                             nama_sekolah=namasekolah, kelas=nk,
                                             nama_siswa=data_tiap_siswa[0],
                                             tahun_ajar=tahunajar,
                                             semester_ajar=semesterajar, kehadiran=data_tiap_siswa[1],
                                             keterangan=data_tiap_siswa[2])

                    input_data_kbm.save()

                sukses = True

                return render(request, 'pages/user_input_kbm_filter.html', {'daftar_nama_siswa': daftar_nama_siswa,
                                                                            'sukses': sukses, 'namasekolah': namasekolah,
                                                                            'daftar_mapel': daftar_mapel,
                                                                            'namakelas': namakelas,
                                                                            'daftar_sekolah': daftar_sekolah,
                                                                            'daftar_kelas': daftar_kelas})

            return render(request, 'pages/user_input_kbm_filter.html', {'daftar_nama_siswa': daftar_nama_siswa,
                                                                        'namasekolah': namasekolah,
                                                                        'daftar_mapel': daftar_mapel,
                                                                        'namakelas': namakelas,
                                                                        'daftar_sekolah': daftar_sekolah,
                                                                        'daftar_kelas': daftar_kelas
                                                                        })

    return HttpResponseRedirect('home')


@login_required
def user_daftar_kbm(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            filter_kbm = DataKbm.objects.filter(nama_user_id=id_user)
            tp_terakhir = filter_kbm.values_list('tahun_ajar', flat=True).last()
            sm_terakhir = filter_kbm.values_list('semester_ajar', flat=True).last()

            if request.method == 'POST':
                tahunajar = request.POST.get('tahunajar')
                semester = request.POST.get('semester')

                if tahunajar and semester:
                    return redirect('zonaguruapps:user_daftar_kbm_filter', tahunajar, semester)

                else:
                    return redirect('zonaguruapps:user_daftar_kbm_filter', tp_terakhir, sm_terakhir)

            else:
                return redirect('zonaguruapps:user_daftar_kbm_filter', tp_terakhir, sm_terakhir)

        else:
            return render(request, 'pages/user_daftar_kbm.html', {})

    return HttpResponseRedirect('home')


@login_required
def user_daftar_kbm_filter(request, tp, sm):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            global total_hadir, total_alpa, total_izin, total_sakit

            data_kbm_siswa = DataKbm.objects.filter(tahun_ajar=tp, semester_ajar=sm, nama_user_id=id_user).values('tanggal', 'nama_sekolah', 'kelas', 'mapel', 'materi', 'tahun_ajar', 'semester_ajar').annotate(Sum('kehadiran')).order_by('-tanggal')
            kehadiran_siswa = DataKbm.objects.filter(tahun_ajar=tp, semester_ajar=sm, nama_user_id=id_user).values_list('kehadiran', flat=True)
            dict_data_kehadiran = Counter(kehadiran_siswa)

            if data_kbm_siswa:

                try:
                    total_hadir = dict_data_kehadiran.get('Hadir', 0)
                    total_alpa = dict_data_kehadiran.get('Alpa', 0)
                    total_izin = dict_data_kehadiran.get('Izin', 0)
                    total_sakit = dict_data_kehadiran.get('Sakit', 0)

                except TypeError:
                    total_hadir = 0
                    total_alpa = 0
                    total_izin = 0
                    total_sakit = 0

                paginator = Paginator(data_kbm_siswa, 10)
                page = request.GET.get('page')
                try:
                    posts = paginator.page(page)
                except PageNotAnInteger:
                    posts = paginator.page(1)
                except EmptyPage:
                    posts = paginator.page(paginator.num_pages)

                return render(request, 'pages/user_daftar_kbm.html', {'posts': posts, 'tp': tp, 'sm': sm,
                                                                      'total_hadir': total_hadir, 'total_alpa': total_alpa,
                                                                      'total_izin': total_izin, 'total_sakit': total_sakit})

            else:
                data_kosong = True
                return render(request, 'pages/user_daftar_kbm.html', {'tp': tp, 'sm': sm, 'data_kosong': data_kosong})

    return HttpResponseRedirect('home')


@login_required
def download_daftar_kbm(request, tp, sm):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:
            kbm_siswa = DataKbm.objects.filter(nama_user_id=id_user, tahun_ajar=tp,
                                               semester_ajar=sm).order_by('nama_siswa')

            if kbm_siswa:

                response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
                response['Content-Disposition'] = 'attachment; filename="Kbm %s tahun %s semester %s.xlsx"' % ('', tp, sm)

                workbook = openpyxl.Workbook()
                worksheet = workbook.active

                header = ['Tanggal', 'Sekolah', 'Kelas', 'Pelajaran', 'Materi', 'Tahun', 'Semester', 'Nilai']
                for col_num, column_title in enumerate(header, 1):
                    cell = worksheet.cell(row=1, column=col_num)
                    cell.value = column_title

                daftar_kbm = kbm_siswa.values_list('tanggal', 'tahun_ajar', 'semester_ajar',
                                                   'nama_sekolah', 'kelas', 'mapel', 'materi',
                                                   'nama_siswa', 'kehadiran', 'keterangan')

                for row_num, row in enumerate(daftar_kbm, 1):
                    for col_num, cell_value in enumerate(row, 1):
                        cell = worksheet.cell(row=row_num + 1, column=col_num)
                        cell.value = cell_value

                workbook.save(response)

                return response

    return HttpResponseRedirect('home')


@login_required
def user_daftar_kbm_detail(request, tp, sm, tgl, kls, mpl, mtr):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            tanggal = datetime.strptime(tgl, '%Y-%m-%d').date()
            tgl_kbm = format_date(tanggal, format='long', locale='id')

            filter_kbm_siswa = DataKbm.objects.all().filter(nama_user_id=id_user, tanggal=tgl, kelas=kls, mapel=mpl).order_by('nama_siswa')
            daftar_nama_siswa = filter_kbm_siswa.values_list('nama_siswa', flat=True)
            daftar_kehadiran_siswa = filter_kbm_siswa.values_list('kehadiran', flat=True)
            daftar_keterangan = filter_kbm_siswa.values_list('keterangan', flat=True)
            join_data = zip(daftar_nama_siswa, daftar_kehadiran_siswa, daftar_keterangan)
            join_data_kbm = sorted(join_data, key=lambda i: i[0])

            return render(request, 'pages/user_daftar_kbm.html', {'join_data_kbm': join_data_kbm, 'tp': tp, 'sm': sm,
                                                                  'tgl_kbm': tgl_kbm, 'kls': kls, 'mpl': mpl, 'mtr': mtr})

    return HttpResponseRedirect('home')


@login_required
def user_hapus_kbm(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            if request.method == 'POST':

                tapel = request.POST.get('tapel')
                smstr = request.POST.get('smstr')
                tgl = request.POST.get('tanggal')
                sekolah = request.POST.get('sekolah')
                kls = request.POST.get('kls')
                mapel = request.POST.get('mapel')
                materi = request.POST.get('materi')

                tanggal = datetime.strptime(tgl, '%b %d, %Y').date()

                data_kbm_filter = DataKbm.objects.filter(nama_user_id=id_user, tahun_ajar=tapel, semester_ajar=smstr,
                                                         tanggal=tanggal, nama_sekolah=sekolah, kelas=kls, mapel=mapel,
                                                         materi=materi)

                for data in data_kbm_filter:
                    data.delete()

            return redirect('zonaguruapps:user_daftar_kbm')

    return HttpResponseRedirect('home')


@login_required
def input_penilaian_kbm(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            daftar_sekolah = NamaSekolah.objects.filter(nama_user_id=id_user)
            daftar_kelas = Kelas.objects.filter(nama_user_id=id_user)

            if request.method == 'POST':
                namasekolah = request.POST.get('sekolah')
                namakelas = request.POST.get('kelas')

                if namasekolah and namakelas:
                    return redirect('zonaguruapps:penilaian_kbm_filter', namasekolah, namakelas)

                return render(request, 'pages/user_input_penilaian_kbm.html', {'daftar_sekolah': daftar_sekolah,
                                                                               'daftar_kelas': daftar_kelas})

            return render(request, 'pages/user_input_penilaian_kbm.html', {'daftar_sekolah': daftar_sekolah,
                                                                           'daftar_kelas': daftar_kelas})

    return HttpResponseRedirect('home')


@login_required
def input_penilaian_kbm_filter(request, ns, nk):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            namasekolah = ns
            namakelas = nk
            daftar_sekolah = NamaSekolah.objects.filter(nama_user_id=id_user)
            daftar_kelas = Kelas.objects.filter(nama_user_id=id_user)

            daftar_nama_siswa = DataSiswa.objects.filter(Q(nama_user_id=id_user) & Q(nama_sekolah=ns) & Q(nama_kelas=nk)).values_list('nama_siswa', flat=True).order_by('nama_siswa')
            jumlah_siswa = len(daftar_nama_siswa)
            daftar_mapel = Mapel.objects.filter(nama_user_id=id_user)

            if request.method == 'POST':

                tanggal_kbm = request.POST.get('tanggalkbm')
                mata_pelajaran = request.POST.get('mapel')
                namatugas = request.POST.get('namatugas')
                jenisnilai = request.POST.get('jenisnilai')
                namasiswa = request.POST.getlist('namasiswa')
                nilai = request.POST.getlist('nilai')
                tahunajar = request.POST.get('tahunajar')
                semesterajar = request.POST.get('semester')

                join_data = [namasiswa, nilai]

                for index in range(jumlah_siswa):
                    data_tiap_siswa = [data[index] for data in join_data]

                    input_nilai_kbm = NilaiKbm(nama_user_id=id_user, tanggal=tanggal_kbm,
                                               nama_tugas=namatugas,
                                               jenis_nilai=jenisnilai,
                                               mapel=mata_pelajaran,
                                               nama_sekolah=namasekolah, kelas=nk,
                                               nama_siswa=data_tiap_siswa[0],
                                               tahun_ajar=tahunajar,
                                               semester_ajar=semesterajar,
                                               nilai=data_tiap_siswa[1])

                    input_nilai_kbm.save()

                sukses = True

                return render(request, 'pages/user_input_penilaian_kbm_filter.html', {'daftar_nama_siswa': daftar_nama_siswa,
                                                                                      'sukses': sukses, 'namasekolah': namasekolah,
                                                                                      'daftar_mapel': daftar_mapel,
                                                                                      'namakelas': namakelas,
                                                                                      'daftar_sekolah': daftar_sekolah,
                                                                                      'daftar_kelas': daftar_kelas})

            return render(request, 'pages/user_input_penilaian_kbm_filter.html', {'daftar_nama_siswa': daftar_nama_siswa,
                                                                                  'namasekolah': namasekolah,
                                                                                  'daftar_mapel': daftar_mapel,
                                                                                  'namakelas': namakelas,
                                                                                  'daftar_sekolah': daftar_sekolah,
                                                                                  'daftar_kelas': daftar_kelas})

    return HttpResponseRedirect('home')


@login_required
def daftar_nilai_kbm(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()
        free_user = StatusUser.objects.filter(user_id=id_user).values_list('is_free', flat=True).first()
        premium_user = StatusUser.objects.filter(user_id=id_user).values_list('is_premium', flat=True).first()

        if status_user:

            filter_kbm = NilaiKbm.objects.filter(nama_user_id=id_user)

            if request.method == 'POST':

                tahunajar = request.POST.get('tahunajar')
                semester = request.POST.get('semester')

                #if tahunajar and semester:

                data_nilai_siswa = NilaiKbm.objects.filter(tahun_ajar=tahunajar, semester_ajar=semester, nama_user_id=id_user).values(
                    'tanggal', 'nama_sekolah', 'kelas', 'mapel', 'nama_tugas', 'tahun_ajar', 'semester_ajar',
                    'jenis_nilai').annotate(Sum('nilai')).order_by('-tanggal')

                #if data_nilai_siswa:

                paginator = Paginator(data_nilai_siswa, 10)
                page = request.GET.get('page')
                try:
                    posts = paginator.page(page)
                except PageNotAnInteger:
                    posts = paginator.page(1)
                except EmptyPage:
                    posts = paginator.page(paginator.num_pages)

                return render(request, 'pages/user_daftar_nilai_kbm.html', {'posts': posts,
                                                                            'tahunajar': tahunajar,
                                                                            'semester': semester,
                                                                            'free_user': free_user,
                                                                            'premium_user': premium_user
                                                                            })

            else:
                tahunajar = filter_kbm.values_list('tahun_ajar', flat=True).last()
                semester = filter_kbm.values_list('semester_ajar', flat=True).last()
                print("THAUN", tahunajar, semester)

                data_nilai_siswa = NilaiKbm.objects.filter(tahun_ajar=tahunajar, semester_ajar=semester, nama_user_id=id_user).values(
                    'tanggal', 'nama_sekolah', 'kelas', 'mapel', 'nama_tugas', 'tahun_ajar', 'semester_ajar',
                    'jenis_nilai').annotate(Sum('nilai')).order_by('-tanggal')

                paginator = Paginator(data_nilai_siswa, 10)
                page = request.GET.get('page')
                try:
                    posts = paginator.page(page)
                except PageNotAnInteger:
                    posts = paginator.page(1)
                except EmptyPage:
                    posts = paginator.page(paginator.num_pages)

                return render(request, 'pages/user_daftar_nilai_kbm.html', {'posts': posts,
                                                                            'tahunajar': tahunajar,
                                                                            'semester': semester,
                                                                            'free_user': free_user,
                                                                            'premium_user': premium_user
                                                                            })

        else:
            return render(request, 'pages/user_daftar_nilai_kbm.html', {'free_user': free_user,
                                                                        'premium_user': premium_user})

    return HttpResponseRedirect('home')


@login_required
def daftar_nilai_kbm_detail(request, tgl, ns, kls, mpl, nt, jn):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:
            detail_nilai_siswa = NilaiKbm.objects.filter(nama_user_id=id_user, tanggal=tgl, nama_sekolah=ns, kelas=kls,
                                                       mapel=mpl, nama_tugas=nt, jenis_nilai=jn).order_by('nama_siswa')

            if detail_nilai_siswa:

                return render(request, 'pages/user_daftar_nilai_kbm_detail.html', {'detail_nilai_siswa': detail_nilai_siswa})

    return HttpResponseRedirect('home')


@login_required
def hapus_nilai_kbm(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            if request.method == 'POST':

                tgl = request.POST.get('tanggal')
                sekolah = request.POST.get('sekolah')
                kls = request.POST.get('kls')
                mpl = request.POST.get('mapel')
                nt = request.POST.get('namatugas')
                jn = request.POST.get('jenisnilai')

                tanggal = datetime.strptime(tgl, '%b %d, %Y').date()

                nilai_kbm_filter = NilaiKbm.objects.filter(nama_user_id=id_user, tanggal=tanggal, nama_sekolah=sekolah,
                                                           kelas=kls, mapel=mpl, nama_tugas=nt, jenis_nilai=jn)

                for nilai in nilai_kbm_filter:
                    nilai.delete()

            return redirect('zonaguruapps:user_daftar_nilai')

    return HttpResponseRedirect('home')


@login_required
def edit_nilai_kbm(request, tgl, ns, kls, mpl, nt, jn):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            daftar_nilai_siswa = NilaiKbm.objects.filter(nama_user_id=id_user, tanggal=tgl, nama_sekolah=ns, kelas=kls,
                                                         mapel=mpl, nama_tugas=nt, jenis_nilai=jn).order_by('nama_siswa')
            daftar_mapel = Mapel.objects.filter(nama_user_id=id_user)

            list_id_daftar_nilai = daftar_nilai_siswa.values_list('id', flat=True)

            if request.method == 'POST':
                nilai_update = request.POST.getlist('nilai')
                jenisnilai_update = request.POST.get('jenisnilai')
                namatugas = request.POST.get('namatugas')
                mata_pelajaran = request.POST.get('mapel')
                tahun = request.POST.get('tahunajar')
                semester = request.POST.get('semester')

                for index in range(len(list_id_daftar_nilai)):
                    nilai_siswa = NilaiKbm.objects.filter(id=list_id_daftar_nilai[index])
                    nilai_siswa.update(tahun_ajar=tahun, semester_ajar=semester, mapel=mata_pelajaran,
                                       jenis_nilai=jenisnilai_update, nama_tugas=namatugas, nilai=nilai_update[index])
                    print("LIAT ID ", nilai_siswa.first())

                detail_nilai_siswa = daftar_nilai_siswa

                return render(request, 'pages/user_daftar_nilai_kbm_detail.html', {'detail_nilai_siswa': detail_nilai_siswa,
                                                                                   'tgl': tgl, 'ns': ns, 'kls': kls, 'mpl': mpl,
                                                                                   'nt': nt, 'jn': jn})

            return render(request, 'pages/user_edit_nilai_kbm.html', {'daftar_nilai_siswa': daftar_nilai_siswa,
                                                                      'tgl': tgl, 'ns': ns, 'kls': kls, 'mpl': mpl,
                                                                      'nt': nt, 'jn': jn, 'daftar_mapel': daftar_mapel})

    return HttpResponseRedirect('home')


@login_required
def download_nilai_kbm(request, tgl, ns, kls, mpl, nt, jn):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:
            nilai_siswa = NilaiKbm.objects.filter(nama_user_id=id_user, tanggal=tgl, nama_sekolah=ns, kelas=kls,
                                                  mapel=mpl, nama_tugas=nt, jenis_nilai=jn).order_by('nama_siswa')

            if nilai_siswa:

                response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
                response['Content-Disposition'] = 'attachment; filename="Nilai %s kelas %s mapel %s.xlsx"' % ('', kls, mpl)

                workbook = openpyxl.Workbook()
                worksheet = workbook.active

                header = ['Nama Siswa', 'Nama Sekolah', 'Kelas', 'Pelajaran', 'Tugas', 'Tahun', 'Semester', 'Nilai']
                for col_num, column_title in enumerate(header, 1):
                    cell = worksheet.cell(row=1, column=col_num)
                    cell.value = column_title

                daftar_nilai = nilai_siswa.values_list('nama_siswa', 'nama_sekolah', 'kelas', 'mapel',
                                                       'nama_tugas', 'tahun_ajar', 'semester_ajar', 'nilai')

                for row_num, row in enumerate(daftar_nilai, 1):
                    for col_num, cell_value in enumerate(row, 1):
                        cell = worksheet.cell(row=row_num + 1, column=col_num)
                        cell.value = cell_value

                workbook.save(response)

                return response

    return HttpResponseRedirect('home')


@login_required
def user_daftar_kehadiran_kbm(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            filter_kbm = DataKbm.objects.filter(nama_user_id=id_user)
            taw = filter_kbm.values_list('tanggal', flat=True).first()
            tak = filter_kbm.values_list('tanggal', flat=True).last()
            last_kbm = filter_kbm.filter(tanggal__gte=taw, tanggal__lte=tak).values_list('nama_siswa', 'kehadiran')

            sorted_kbm = defaultdict(list)
            for key, value in last_kbm:
                sorted_kbm[key].append(value)

            daftar_kehadiran = defaultdict(list)
            for nama, absen in sorted_kbm.items():
                daftar_kehadiran[nama].append(Counter(absen))

            dict_kehadiran = tuple(daftar_kehadiran.items())

            paginator = Paginator(dict_kehadiran, 5)
            page = request.GET.get('page')
            try:
                posts = paginator.page(page)
            except PageNotAnInteger:
                posts = paginator.page(1)
            except EmptyPage:
                posts = paginator.page(paginator.num_pages)

            if 'tanggal' in request.POST:
                tanggalawal = request.POST.get('tanggalawal')
                tanggalakhir = request.POST.get('tanggalakhir')

                if tanggalawal and tanggalakhir:
                    return redirect('zonaguruapps:user_kehadiran_kbm_filter_tanggal', tanggalawal, tanggalakhir)

                return render(request, 'pages/user_daftar_kehadiran_kbm.html', {'tanggalawal': tanggalawal, 'tanggalakhir': tanggalakhir})

            elif 'nama' in request.POST:
                namasantri = request.POST.get('namasantri')

                if namasantri:
                    return redirect('zonaguruapps:user_kehadiran_kbm_filter_nama', namasantri)

                return render(request, 'pages/user_daftar_kehadiran_kbm.html',{})

            return render(request, 'pages/user_daftar_kehadiran_kbm.html', {'posts': posts, 'taw': taw, 'tak':tak})

    return HttpResponseRedirect('home')


@login_required
def user_daftar_kehadiran_kbm_filter_tanggal(request, taw, tak):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            filter_kbm = DataKbm.objects.filter(nama_user_id=id_user)
            last_kbm = filter_kbm.filter(tanggal__gte=taw, tanggal__lte=tak).values_list('nama_siswa', 'kehadiran')

            if last_kbm:
                sorted_kbm = defaultdict(list)
                for key, value in last_kbm:
                    sorted_kbm[key].append(value)

                daftar_kehadiran = defaultdict(list)
                for nama, absen in sorted_kbm.items():
                    daftar_kehadiran[nama].append(Counter(absen))

                dict_kehadiran = tuple(daftar_kehadiran.items())

                paginator = Paginator(dict_kehadiran, 5)
                page = request.GET.get('page')
                try:
                    posts = paginator.page(page)
                except PageNotAnInteger:
                    posts = paginator.page(1)
                except EmptyPage:
                    posts = paginator.page(paginator.num_pages)

                return render(request, 'pages/user_daftar_kehadiran_kbm.html', {'posts': posts, 'taw': taw, 'tak':tak})

            else:
                kosong = True
                return render(request, 'pages/user_daftar_kehadiran_kbm.html', {'kosong': kosong, 'taw': taw, 'tak':tak})

    return HttpResponseRedirect('home')


@login_required
def user_daftar_kehadiran_kbm_filter_nama(request, ns):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            filter_kbm = DataKbm.objects.filter(nama_user_id=id_user)
            last_kbm = filter_kbm.filter(nama_siswa__icontains=ns).values_list('nama_siswa', 'kehadiran')

            if last_kbm:
                sorted_kbm = defaultdict(list)
                for key, value in last_kbm:
                    sorted_kbm[key].append(value)

                daftar_kehadiran = defaultdict(list)
                for nama, absen in sorted_kbm.items():
                    daftar_kehadiran[nama].append(Counter(absen))

                dict_kehadiran = tuple(daftar_kehadiran.items())

                paginator = Paginator(dict_kehadiran, 5)
                page = request.GET.get('page')
                try:
                    posts = paginator.page(page)
                except PageNotAnInteger:
                    posts = paginator.page(1)
                except EmptyPage:
                    posts = paginator.page(paginator.num_pages)

                return render(request, 'pages/user_daftar_kehadiran_kbm.html', {'posts': posts, 'ns': ns})

            else:
                kosong = True
                return render(request, 'pages/user_daftar_kehadiran_kbm.html', {'kosong': kosong})

    return HttpResponseRedirect('home')


@login_required
def download_kehadiran_kbm(request, taw, tak):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            filter_kbm = DataKbm.objects.filter(nama_user_id=id_user)
            last_kbm = filter_kbm.filter(tanggal__gte=taw, tanggal__lte=tak).values_list('nama_siswa', 'kehadiran')

            if last_kbm:

                sorted_kbm = defaultdict(list)
                for key, value in last_kbm:
                    sorted_kbm[key].append(value)

                daftar_kehadiran = defaultdict(list)
                for nama, absen in sorted_kbm.items():
                    daftar_kehadiran[nama].append(Counter(absen))

                list_taw = []
                list_tak = []
                list_nama = []
                list_hadir = []
                list_sakit = []
                list_izin = []
                list_alpa = []
                list_presentase = []

                for n in daftar_kehadiran.items():
                    list_nama.append(n[0])
                    list_taw.append(taw)
                    list_tak.append(tak)

                    for value in n[1]:
                        list_hadir.append(value['Hadir'])
                        list_sakit.append(value['Sakit'])
                        list_izin.append(value['Izin'])
                        list_alpa.append(value['Alpa'])
                        total = value['Hadir'] + value['Sakit'] + value['Izin'] + value['Alpa']
                        presentase = str((value['Hadir'] / total) * 100) + '%'
                        list_presentase.append(presentase)

                list_kehadiran = list(zip(list_taw, list_tak, list_nama, list_hadir, list_sakit, list_izin, list_alpa, list_presentase))

                response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
                response['Content-Disposition'] = 'attachment; filename="Absensi %s tanggalawal %s tanggalakhir %s.xlsx"' % ('', taw, tak)

                workbook = openpyxl.Workbook()
                worksheet = workbook.active

                header = ['Tanggal Awal', 'Tanggal Akhir', 'Nama Siswa', 'Hadir', 'Sakit', 'Izin', 'Alpa', 'Presentase']
                for col_num, column_title in enumerate(header, 1):
                    cell = worksheet.cell(row=1, column=col_num)
                    cell.value = column_title

                for row_num, row in enumerate(list_kehadiran, 1):
                    for col_num, cell_value in enumerate(row, 1):
                        cell = worksheet.cell(row=row_num + 1, column=col_num)
                        cell.value = cell_value

                workbook.save(response)

                return response

    return HttpResponseRedirect('home')


@login_required
def download_kehadiran_kbm_filter_nama(request, ns):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            filter_kbm = DataKbm.objects.filter(nama_user_id=id_user)
            last_kbm = filter_kbm.filter(nama_siswa__icontains=ns).values_list('nama_siswa', 'kehadiran')

            if last_kbm:

                sorted_kbm = defaultdict(list)
                for key, value in last_kbm:
                    sorted_kbm[key].append(value)

                daftar_kehadiran = defaultdict(list)
                for nama, absen in sorted_kbm.items():
                    daftar_kehadiran[nama].append(Counter(absen))

                list_nama = []
                list_hadir = []
                list_sakit = []
                list_izin = []
                list_alpa = []
                list_presentase = []

                for n in daftar_kehadiran.items():
                    list_nama.append(n[0])

                    for value in n[1]:
                        list_hadir.append(value['Hadir'])
                        list_sakit.append(value['Sakit'])
                        list_izin.append(value['Izin'])
                        list_alpa.append(value['Alpa'])
                        total = value['Hadir'] + value['Sakit'] + value['Izin'] + value['Alpa']
                        presentase = str((value['Hadir'] / total) * 100) + '%'
                        list_presentase.append(presentase)

                list_kehadiran = list(zip(list_nama, list_hadir, list_sakit, list_izin, list_alpa, list_presentase))

                response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
                response['Content-Disposition'] = 'attachment; filename="Absensi %s nama %s.xlsx"' % ('', ns)

                workbook = openpyxl.Workbook()
                worksheet = workbook.active

                header = ['Nama Siswa', 'Hadir', 'Sakit', 'Izin', 'Alpa', 'Presentase']
                for col_num, column_title in enumerate(header, 1):
                    cell = worksheet.cell(row=1, column=col_num)
                    cell.value = column_title

                for row_num, row in enumerate(list_kehadiran, 1):
                    for col_num, cell_value in enumerate(row, 1):
                        cell = worksheet.cell(row=row_num + 1, column=col_num)
                        cell.value = cell_value

                workbook.save(response)

                return response

    return HttpResponseRedirect('home')


@login_required
def upload_prosem(request):
    pass


@login_required
def user_daftar_prosem(request):
    pass


@login_required
def user_daftar_prosem_filter(request):
    pass


@login_required
def user_hapus_prosem(request):
    pass


@login_required
def nilai_rapor(request):
    pass


@login_required
def nilai_rapor_filter(request):
    pass


@login_required
def daftar_nilai_rapor_kbm(request):
    pass


@login_required
def daftar_nilai_rapor_kbm_filter(request):
    pass



@login_required
def user_input_tahfizh(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            daftar_sekolah = NamaSekolah.objects.filter(nama_user_id=id_user)
            daftar_kelas = Kelas.objects.filter(nama_user_id=id_user)

            if request.method == 'POST':
                namasekolah = request.POST.get('sekolah')
                namakelas = request.POST.get('kelas')

                if namasekolah and namakelas:
                    return redirect('zonaguruapps:input_tahfizh_filter', namasekolah, namakelas)

                return render(request, 'pages/user_input_tahfizh.html', {'daftar_sekolah': daftar_sekolah,
                                                                         'daftar_kelas': daftar_kelas})

            return render(request, 'pages/user_input_tahfizh.html', {'daftar_sekolah': daftar_sekolah,
                                                                     'daftar_kelas': daftar_kelas})

    return HttpResponseRedirect('home')


@login_required
def user_input_tahfizh_filter(request, ns, nk):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            namasekolah = ns
            namakelas = nk
            daftar_sekolah = NamaSekolah.objects.filter(nama_user_id=id_user)
            daftar_kelas = Kelas.objects.filter(nama_user_id=id_user)

            daftar_nama_siswa = DataSiswa.objects.filter(Q(nama_user_id=id_user) & Q(nama_sekolah=ns) & Q(nama_kelas=nk)).values_list('nama_siswa', flat=True).order_by('nama_siswa')
            jumlah_siswa = len(daftar_nama_siswa)

            if request.method == 'POST':

                namasiswa = request.POST.getlist('namasiswa')
                tanggal = request.POST.get('tanggaltahfizh')
                waktu_halaqoh = request.POST.get('awaljam')
                namasuratawal = request.POST.getlist('namasuratawal')
                namasuratakhir = request.POST.getlist('namasuratakhir')
                kehadiran = request.POST.getlist('kehadiran')
                ayatawal = list(map(int, request.POST.getlist('ayatawal')))
                ayatakhir = list(map(int, request.POST.getlist('ayatakhir')))
                jumlahayat = list(map(int, request.POST.getlist('jumlahayat')))
                jumlahhalaman = list(map(int, request.POST.getlist('jumlahhalaman')))

                join_data = [namasiswa, namasuratawal, ayatawal, namasuratakhir, ayatakhir, jumlahayat, jumlahhalaman, kehadiran]
                print('join data', join_data)

                for index in range(jumlah_siswa):
                    data_tiap_siswa = [data[index] for data in join_data]
                    inputdata = DataTahfizh(nama_user_id=id_user, tanggal=tanggal,
                                            waktu=waktu_halaqoh,
                                            nama_sekolah=namasekolah,
                                            kelas_halaqoh=namakelas,
                                            nama_siswa=data_tiap_siswa[0],
                                            nama_surat_awal=data_tiap_siswa[1],
                                            awal_ayat=data_tiap_siswa[2],
                                            nama_surat_akhir=data_tiap_siswa[3],
                                            akhir_ayat=data_tiap_siswa[4],
                                            jumlah_ayat=data_tiap_siswa[5],
                                            jumlah_halaman=data_tiap_siswa[6],
                                            kehadiran=data_tiap_siswa[7])
                    inputdata.save()

                sukses = True
                return render(request, 'pages/user_input_tahfizh_filter.html', {'sukses': sukses,
                                                                                'daftar_nama_siswa': daftar_nama_siswa,
                                                                                'daftar_sekolah': daftar_sekolah,
                                                                                'daftar_kelas': daftar_kelas,
                                                                                'namasekolah': namasekolah,
                                                                                'namakelas': namakelas,
                                                                                })

            return render(request, 'pages/user_input_tahfizh_filter.html', {'daftar_nama_siswa': daftar_nama_siswa,
                                                                            'daftar_sekolah': daftar_sekolah,
                                                                            'daftar_kelas': daftar_kelas,
                                                                            'namasekolah': namasekolah,
                                                                            'namakelas': namakelas,
                                                                            })

    return HttpResponseRedirect('home')


@login_required
def user_daftar_tahfizh(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()
        free_user = StatusUser.objects.filter(user_id=id_user).values_list('is_free', flat=True).first()
        premium_user = StatusUser.objects.filter(user_id=id_user).values_list('is_premium', flat=True).first()

        if status_user:

            filter_tahfizh = DataTahfizh.objects.filter(nama_user_id=id_user)

            if request.method == 'POST':

                taw = request.POST.get('tanggalawal')
                tak = request.POST.get('tanggalakhir')

                data_tahfizh_siswa = filter_tahfizh.filter(tanggal__gte=taw, tanggal__lte=tak)
                tahfizh_siswa_list = data_tahfizh_siswa.values('tanggal', 'waktu', 'nama_sekolah', 'kelas_halaqoh').annotate(Sum('kelas_halaqoh')).order_by('-tanggal')

                paginator = Paginator(tahfizh_siswa_list, 10)
                page = request.GET.get('page')
                try:
                    posts = paginator.page(page)
                except PageNotAnInteger:
                    posts = paginator.page(1)
                except EmptyPage:
                    posts = paginator.page(paginator.num_pages)

                return render(request, 'pages/user_daftar_tahfizh.html', {'posts': posts,
                                                                            'taw': taw,
                                                                            'tak': tak,
                                                                            'free_user': free_user,
                                                                            'premium_user': premium_user
                                                                            })

            else:

                tahfizh_siswa_list = filter_tahfizh.values('tanggal', 'waktu', 'nama_sekolah', 'kelas_halaqoh').annotate(Sum('kehadiran')).order_by('-tanggal')
                paginator = Paginator(tahfizh_siswa_list, 10)
                page = request.GET.get('page')
                try:
                    posts = paginator.page(page)
                except PageNotAnInteger:
                    posts = paginator.page(1)
                except EmptyPage:
                    posts = paginator.page(paginator.num_pages)

                return render(request, 'pages/user_daftar_tahfizh.html', {'posts': posts,
                                                                          'free_user': free_user,
                                                                          'premium_user': premium_user})

        else:
            return render(request, 'pages/user_daftar_tahfizh.html', {'free_user': free_user, 'premium_user': premium_user})

    return HttpResponseRedirect('home')


@login_required
def user_daftar_tahfizh_filter(request, taw, tak):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            data_tahfizh_siswa = DataTahfizh.objects.filter(tanggal__gte=taw, tanggal__lte=tak, nama_user_id=id_user)
            tahfizh_siswa_list = data_tahfizh_siswa.values('tanggal', 'nama_sekolah', 'kelas_halaqoh').annotate(Sum('kehadiran')).order_by('-tanggal')
            kehadiran_siswa = data_tahfizh_siswa.values_list('kehadiran', flat=True)

            if data_tahfizh_siswa:

                paginator = Paginator(tahfizh_siswa_list, 10)
                page = request.GET.get('page')
                try:
                    posts = paginator.page(page)
                except PageNotAnInteger:
                    posts = paginator.page(1)
                except EmptyPage:
                    posts = paginator.page(paginator.num_pages)

                return render(request, 'pages/user_daftar_tahfizh.html', {'posts': posts, 'taw': taw, 'tak': tak})

            else:
                data_kosong = True
                return render(request, 'pages/user_daftar_tahfizh.html', {'taw': taw, 'tak': tak, 'data_kosong': data_kosong})

    return HttpResponseRedirect('home')


@login_required
def daftar_tahfizh_detail(request, tgl, wkt, ns, hlq):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:
            detail_tahfizh_siswa = DataTahfizh.objects.filter(nama_user_id=id_user, tanggal=tgl, waktu=wkt, nama_sekolah=ns, kelas_halaqoh=hlq).order_by('nama_siswa')

            if detail_tahfizh_siswa:
                return render(request, 'pages/user_daftar_tahfizh_detail.html', {'detail_tahfizh_siswa': detail_tahfizh_siswa})

    return HttpResponseRedirect('home')


@login_required
def user_ubah_tahfizh(request, tgl, wkt, ns, hlq):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            daftar_tahfizh_siswa = DataTahfizh.objects.filter(nama_user_id=id_user, tanggal=tgl, waktu=wkt, nama_sekolah=ns, kelas_halaqoh=hlq).order_by('nama_siswa')
            list_id_daftar_tahfizh = daftar_tahfizh_siswa.values_list('id', flat=True)

            if request.method == 'POST':

                namasiswa = request.POST.getlist('namasiswa')
                tanggal = request.POST.get('tanggaltahfizh')
                waktu_halaqoh = request.POST.get('awaljam')
                namasuratawal = request.POST.getlist('namasuratawal')
                namasuratakhir = request.POST.getlist('namasuratakhir')
                kehadiran = request.POST.getlist('kehadiran')
                ayatawal = list(map(int, request.POST.getlist('ayatawal')))
                ayatakhir = list(map(int, request.POST.getlist('ayatakhir')))
                jumlahayat = list(map(int, request.POST.getlist('jumlahayat')))
                jumlahhalaman = list(map(int, request.POST.getlist('jumlahhalaman')))

                join_data = [namasiswa, namasuratawal, ayatawal, namasuratakhir, ayatakhir, jumlahayat, jumlahhalaman, kehadiran]

                for index in range(len(list_id_daftar_tahfizh)):
                    data_tiap_siswa = [data[index] for data in join_data]
                    tahfizh_siswa = DataTahfizh.objects.filter(id=list_id_daftar_tahfizh[index])
                    tahfizh_siswa.update(tanggal=tanggal, waktu=waktu_halaqoh, nama_sekolah=ns,
                                         kelas_halaqoh=hlq, nama_siswa=data_tiap_siswa[0],
                                         nama_surat_awal=data_tiap_siswa[1], awal_ayat=data_tiap_siswa[2],
                                         nama_surat_akhir=data_tiap_siswa[3], akhir_ayat=data_tiap_siswa[4],
                                         jumlah_ayat=data_tiap_siswa[5], jumlah_halaman=data_tiap_siswa[6],
                                         kehadiran=data_tiap_siswa[7])

                sukses = True

                return render(request, 'pages/user_ubah_tahfizh.html', {'sukses': sukses, 'tgl': tgl, 'ns': ns, 'wkt': wkt, 'hlq': hlq})

            return render(request, 'pages/user_ubah_tahfizh.html', {'daftar_tahfizh_siswa': daftar_tahfizh_siswa,
                                                                    'tgl': tgl, 'ns': ns, 'wkt': wkt, 'hlq': hlq})

    return HttpResponseRedirect('home')


@login_required
def hapus_daftar_tahfizh(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            if request.method == 'POST':

                tgl = request.POST.get('tanggal')
                sekolah = request.POST.get('sekolah')
                wkt = request.POST.get('waktu')
                hlq = request.POST.get('halaqoh')
                print("WAKU", wkt)

                tanggal = datetime.strptime(tgl, '%b %d, %Y').date()

                data_tahfizh_filter = DataTahfizh.objects.filter(nama_user_id=id_user, tanggal=tanggal, waktu=wkt,
                                                                 nama_sekolah=sekolah, kelas_halaqoh=hlq)

                for data in data_tahfizh_filter:
                    data.delete()

            return redirect('zonaguruapps:daftar_tahfizh')

    return HttpResponseRedirect('home')


@login_required
def download_daftar_tahfizh(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:
            tahfizh_siswa = DataTahfizh.objects.filter(nama_user_id=id_user).order_by('nama_siswa')

            if tahfizh_siswa:

                today = date.today()

                response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
                response['Content-Disposition'] = 'attachment; filename="Download Tahfizh %s tanggal %s.xlsx"' % ('', today)

                workbook = openpyxl.Workbook()
                worksheet = workbook.active

                header = ['Tanggal', 'Waktu', 'Sekolah', 'Kelas/Halaqoh', 'Nama', 'Surat Awal', 'Ayat',
                          'Surat Akhir', 'Ayat', 'Jumlah Ayat', 'Jumlah Halaman', 'Kehadiran']
                for col_num, column_title in enumerate(header, 1):
                    cell = worksheet.cell(row=1, column=col_num)
                    cell.value = column_title

                daftar_tahfizh = tahfizh_siswa.values_list('tanggal', 'waktu', 'nama_sekolah', 'kelas_halaqoh', 'nama_siswa', 'nama_surat_awal',
                                                     'awal_ayat', 'nama_surat_akhir', 'akhir_ayat', 'jumlah_ayat', 'jumlah_halaman', 'kehadiran')

                for row_num, row in enumerate(daftar_tahfizh, 1):
                    for col_num, cell_value in enumerate(row, 1):
                        cell = worksheet.cell(row=row_num + 1, column=col_num)
                        cell.value = cell_value

                workbook.save(response)

                return response

    return HttpResponseRedirect('home')


@login_required
def user_daftar_kehadiran_tahfizh(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            filter_tahfizh = DataTahfizh.objects.filter(nama_user_id=id_user)
            taw = filter_tahfizh.values_list('tanggal', flat=True).first()
            tak = filter_tahfizh.values_list('tanggal', flat=True).last()
            last_kbm = filter_tahfizh.filter(tanggal__gte=taw, tanggal__lte=tak).values_list('nama_siswa', 'kehadiran')
            print("LAST KBM", last_kbm)

            sorted_tahfizh = defaultdict(list)
            for key, value in last_kbm:
                sorted_tahfizh[key].append(value)

            daftar_kehadiran = defaultdict(list)
            for nama, absen in sorted_tahfizh.items():
                daftar_kehadiran[nama].append(Counter(absen))

            dict_kehadiran = tuple(daftar_kehadiran.items())

            paginator = Paginator(dict_kehadiran, 5)
            page = request.GET.get('page')
            try:
                posts = paginator.page(page)
            except PageNotAnInteger:
                posts = paginator.page(1)
            except EmptyPage:
                posts = paginator.page(paginator.num_pages)

            if 'tanggal' in request.POST:
                tanggalawal = request.POST.get('tanggalawal')
                tanggalakhir = request.POST.get('tanggalakhir')

                if tanggalawal and tanggalakhir:
                    return redirect('zonaguruapps:user_kehadiran_tahfizh_filter_tanggal', tanggalawal, tanggalakhir)

                return render(request, 'pages/user_daftar_kehadiran_tahfizh.html', {'tanggalawal': tanggalawal, 'tanggalakhir': tanggalakhir})

            elif 'nama' in request.POST:
                namasantri = request.POST.get('namasantri')

                if namasantri:
                    return redirect('zonaguruapps:user_kehadiran_tahfizh_filter_nama', namasantri)

                return render(request, 'pages/user_daftar_kehadiran_tahfizh.html',{})

            return render(request, 'pages/user_daftar_kehadiran_tahfizh.html', {'posts': posts, 'taw': taw, 'tak':tak})

    return HttpResponseRedirect('home')


@login_required
def user_daftar_kehadiran_tahfizh_filter_tanggal(request, taw, tak):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            filter_tahfizh = DataTahfizh.objects.filter(nama_user_id=id_user)
            last_tahfizh = filter_tahfizh.filter(tanggal__gte=taw, tanggal__lte=tak).values_list('nama_siswa', 'kehadiran')

            if last_tahfizh:
                sorted_tahfizh = defaultdict(list)
                for key, value in last_tahfizh:
                    sorted_tahfizh[key].append(value)

                daftar_kehadiran = defaultdict(list)
                for nama, absen in sorted_tahfizh.items():
                    daftar_kehadiran[nama].append(Counter(absen))

                dict_kehadiran = tuple(daftar_kehadiran.items())

                paginator = Paginator(dict_kehadiran, 5)
                page = request.GET.get('page')
                try:
                    posts = paginator.page(page)
                except PageNotAnInteger:
                    posts = paginator.page(1)
                except EmptyPage:
                    posts = paginator.page(paginator.num_pages)

                return render(request, 'pages/user_daftar_kehadiran_tahfizh.html', {'posts': posts, 'taw': taw, 'tak':tak})

            else:
                kosong = True
                return render(request, 'pages/user_daftar_kehadiran_tahfizh.html', {'kosong': kosong, 'taw': taw, 'tak':tak})

    return HttpResponseRedirect('home')


@login_required
def user_daftar_kehadiran_tahfizh_filter_nama(request, ns):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            filter_tahfizh = DataTahfizh.objects.filter(nama_user_id=id_user)
            last_tahfizh = filter_tahfizh.filter(nama_siswa__icontains=ns).values_list('nama_siswa', 'kehadiran')

            if last_tahfizh:
                sorted_tahfizh = defaultdict(list)
                for key, value in last_tahfizh:
                    sorted_tahfizh[key].append(value)

                daftar_kehadiran = defaultdict(list)
                for nama, absen in sorted_tahfizh.items():
                    daftar_kehadiran[nama].append(Counter(absen))

                dict_kehadiran = tuple(daftar_kehadiran.items())

                paginator = Paginator(dict_kehadiran, 5)
                page = request.GET.get('page')
                try:
                    posts = paginator.page(page)
                except PageNotAnInteger:
                    posts = paginator.page(1)
                except EmptyPage:
                    posts = paginator.page(paginator.num_pages)

                return render(request, 'pages/user_daftar_kehadiran_tahfizh.html', {'posts': posts, 'ns': ns})

            else:
                kosong = True
                return render(request, 'pages/user_daftar_kehadiran_tahfizh.html', {'kosong': kosong})

    return HttpResponseRedirect('home')


@login_required
def download_kehadiran_tahfizh(request, taw, tak):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            filter_tahfizh = DataTahfizh.objects.filter(nama_user_id=id_user)
            last_tahfizh = filter_tahfizh.filter(tanggal__gte=taw, tanggal__lte=tak).values_list('nama_siswa', 'kehadiran')

            if last_tahfizh:

                sorted_tahfizh = defaultdict(list)
                for key, value in last_tahfizh:
                    sorted_tahfizh[key].append(value)

                daftar_kehadiran = defaultdict(list)
                for nama, absen in sorted_tahfizh.items():
                    daftar_kehadiran[nama].append(Counter(absen))

                list_taw = []
                list_tak = []
                list_nama = []
                list_hadir = []
                list_sakit = []
                list_izin = []
                list_alpa = []
                list_presentase = []

                for n in daftar_kehadiran.items():
                    list_nama.append(n[0])
                    list_taw.append(taw)
                    list_tak.append(tak)

                    for value in n[1]:
                        list_hadir.append(value['Tasmi'])
                        list_hadir.append(value['Tahsin'])
                        list_sakit.append(value['Sakit'])
                        list_izin.append(value['Izin'])
                        list_alpa.append(value['Alpa'])
                        total = value['Tasmi'] + value['Tahsin'] + value['Sakit'] + value['Izin'] + value['Alpa']
                        presentase = str(((value['Tasmi'] + value['Tahsin']) / total) * 100) + '%'
                        list_presentase.append(presentase)

                list_kehadiran = list(zip(list_taw, list_tak, list_nama, list_hadir, list_sakit, list_izin, list_alpa, list_presentase))

                response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
                response['Content-Disposition'] = 'attachment; filename="Absensi Tahfizh %s tanggalawal %s tanggalakhir %s.xlsx"' % ('', taw, tak)

                workbook = openpyxl.Workbook()
                worksheet = workbook.active

                header = ['Tanggal Awal', 'Tanggal Akhir', 'Nama Siswa', 'Hadir', 'Sakit', 'Izin', 'Alpa', 'Presentase']
                for col_num, column_title in enumerate(header, 1):
                    cell = worksheet.cell(row=1, column=col_num)
                    cell.value = column_title

                for row_num, row in enumerate(list_kehadiran, 1):
                    for col_num, cell_value in enumerate(row, 1):
                        cell = worksheet.cell(row=row_num + 1, column=col_num)
                        cell.value = cell_value

                workbook.save(response)

                return response

    return HttpResponseRedirect('home')


@login_required
def download_kehadiran_tahfizh_filter_nama(request, ns):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            filter_tahfizh = DataTahfizh.objects.filter(nama_user_id=id_user)
            last_tahfizh = filter_tahfizh.filter(nama_siswa__icontains=ns).values_list('nama_siswa', 'kehadiran')

            if last_tahfizh:

                sorted_tahfizh = defaultdict(list)
                for key, value in last_tahfizh:
                    sorted_tahfizh[key].append(value)

                daftar_kehadiran = defaultdict(list)
                for nama, absen in sorted_tahfizh.items():
                    daftar_kehadiran[nama].append(Counter(absen))

                list_nama = []
                list_hadir = []
                list_sakit = []
                list_izin = []
                list_alpa = []
                list_presentase = []

                for n in daftar_kehadiran.items():
                    list_nama.append(n[0])

                    for value in n[1]:
                        list_hadir.append(value['Tasmi'])
                        list_hadir.append(value['Tahsin'])
                        list_sakit.append(value['Sakit'])
                        list_izin.append(value['Izin'])
                        list_alpa.append(value['Alpa'])
                        total = value['Tasmi'] + value['Tahsin'] + value['Sakit'] + value['Izin'] + value['Alpa']
                        presentase = str(((value['Tasmi'] + value['Tahsin']) / total) * 100) + '%'
                        list_presentase.append(presentase)

                list_kehadiran = list(zip(list_nama, list_hadir, list_sakit, list_izin, list_alpa, list_presentase))

                response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
                response['Content-Disposition'] = 'attachment; filename="Absensi Tahfizh %s nama %s.xlsx"' % ('', ns)

                workbook = openpyxl.Workbook()
                worksheet = workbook.active

                header = ['Nama Siswa', 'Hadir', 'Sakit', 'Izin', 'Alpa', 'Presentase']
                for col_num, column_title in enumerate(header, 1):
                    cell = worksheet.cell(row=1, column=col_num)
                    cell.value = column_title

                for row_num, row in enumerate(list_kehadiran, 1):
                    for col_num, cell_value in enumerate(row, 1):
                        cell = worksheet.cell(row=row_num + 1, column=col_num)
                        cell.value = cell_value

                workbook.save(response)

                return response

    return HttpResponseRedirect('home')


@login_required
def user_input_ibadah_harian(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            daftar_sekolah = NamaSekolah.objects.filter(nama_user_id=id_user)
            daftar_kelas = Kelas.objects.filter(nama_user_id=id_user)

            if request.method == 'POST':
                namasekolah = request.POST.get('sekolah')
                namakelas = request.POST.get('kelas')

                if namasekolah and namakelas:
                    return redirect('zonaguruapps:input_ibadah_harian_filter', namasekolah, namakelas)

                return render(request, 'pages/user_input_ibadah_harian.html', {'daftar_sekolah': daftar_sekolah,
                                                                               'daftar_kelas': daftar_kelas})

            return render(request, 'pages/user_input_ibadah_harian.html', {'daftar_sekolah': daftar_sekolah,
                                                                           'daftar_kelas': daftar_kelas})

    return HttpResponseRedirect('home')


@login_required
def user_input_ibadah_harian_filter(request, ns, nk):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            namasekolah = ns
            namakelas = nk
            daftar_sekolah = NamaSekolah.objects.filter(nama_user_id=id_user)
            daftar_kelas = Kelas.objects.filter(nama_user_id=id_user)

            daftar_nama_siswa = DataSiswa.objects.filter(Q(nama_user_id=id_user) & Q(nama_sekolah=ns) & Q(nama_kelas=nk)).values_list('nama_siswa', flat=True).order_by('nama_siswa')

            if request.method == 'POST':
                namasiswa = request.POST.getlist('namasiswa')
                tanggal = request.POST.get('tanggalinput')
                subuh = request.POST.getlist('salatsubuh')
                dzuhur = request.POST.getlist('salatdzuhur')
                ashar = request.POST.getlist('salatashar')
                maghrib = request.POST.getlist('salatmaghrib')
                isya = request.POST.getlist('salatisya')
                tahajud = request.POST.getlist('salattahajud')
                duha = request.POST.getlist('salatduha')
                puasasunnah = request.POST.getlist('puasasunnah')

                join_data = list(map(list, itertools.zip_longest(namasiswa, subuh, dzuhur, ashar, maghrib, isya, tahajud, duha, puasasunnah, fillvalue=None)))

                #data_sudah_ada = IbadahHarian.objects.filter(Q(nama_user_id=id_user) & Q(tanggal=tgl) &
                #                                             Q(nama_sekolah=namasekolah) & Q(kelas_halaqoh=namakelas) & Q(nama_siswa__in=daftar_nama_siswa)).first()
                print('join data', join_data, subuh, isya)
                for d in join_data:
                    inputdata = IbadahHarian(
                                nama_user_id=id_user,
                                nama_sekolah=namasekolah,
                                kelas_halaqoh=namakelas,
                                tanggal=tanggal,
                                nama_siswa=d[0],
                                shalat_jamaah_subuh=d[1],
                                shalat_jamaah_zuhur=d[2],
                                shalat_jamaah_ashar=d[3],
                                shalat_jamaah_maghrib=d[4],
                                shalat_jamaah_isya=d[5],
                                tahajud=d[6],
                                dhuha=d[7],
                                puasa_sunnah=d[8]
                                )

                    inputdata.save()

                sukses = True
                return render(request, 'pages/user_input_ibadah_harian_filter.html', {'sukses': sukses,
                                                                                      'daftar_nama_siswa': daftar_nama_siswa,
                                                                                      'daftar_sekolah': daftar_sekolah,
                                                                                      'daftar_kelas': daftar_kelas,
                                                                                      'namasekolah': namasekolah,
                                                                                      'namakelas': namakelas})

            return render(request, 'pages/user_input_ibadah_harian_filter.html', {'daftar_nama_siswa': daftar_nama_siswa,
                                                                                  'daftar_sekolah': daftar_sekolah,
                                                                                  'daftar_kelas': daftar_kelas,
                                                                                  'namasekolah': namasekolah,
                                                                                  'namakelas': namakelas})

    return HttpResponseRedirect('home')


@login_required
def user_daftar_ibadah_harian(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()
        free_user = StatusUser.objects.filter(user_id=id_user).values_list('is_free', flat=True).first()
        premium_user = StatusUser.objects.filter(user_id=id_user).values_list('is_premium', flat=True).first()

        if status_user:

            filter_ibadah = IbadahHarian.objects.filter(nama_user_id=id_user)

            if request.method == 'POST':

                taw = request.POST.get('tanggalawal')
                tak = request.POST.get('tanggalakhir')

                data_ibadah_siswa = filter_ibadah.filter(tanggal__gte=taw, tanggal__lte=tak)
                ibadah_siswa_list = data_ibadah_siswa.values('tanggal', 'nama_sekolah', 'kelas_halaqoh').annotate(Sum('kelas_halaqoh')).order_by('-tanggal')

                paginator = Paginator(ibadah_siswa_list, 10)
                page = request.GET.get('page')
                try:
                    posts = paginator.page(page)
                except PageNotAnInteger:
                    posts = paginator.page(1)
                except EmptyPage:
                    posts = paginator.page(paginator.num_pages)

                return render(request, 'pages/user_daftar_ibadah.html', {'posts': posts, 'taw': taw,
                                                                         'tak': tak, 'free_user': free_user,
                                                                         'premium_user': premium_user
                                                                         })

            else:

                ibadah_siswa_list = filter_ibadah.values('tanggal', 'nama_sekolah', 'kelas_halaqoh').annotate(Sum('kelas_halaqoh')).order_by('-tanggal')
                paginator = Paginator(ibadah_siswa_list, 10)
                page = request.GET.get('page')
                try:
                    posts = paginator.page(page)
                except PageNotAnInteger:
                    posts = paginator.page(1)
                except EmptyPage:
                    posts = paginator.page(paginator.num_pages)

                return render(request, 'pages/user_daftar_ibadah.html', {'posts': posts,
                                                                         'free_user': free_user,
                                                                         'premium_user': premium_user})

        else:
            return render(request, 'pages/user_daftar_ibadah.html', {'free_user': free_user, 'premium_user': premium_user})

    return HttpResponseRedirect('home')


@login_required
def daftar_ibadah_harian_detail(request, tgl, ns, hlq):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:
            detail_ibadah_siswa = IbadahHarian.objects.filter(nama_user_id=id_user, tanggal=tgl, nama_sekolah=ns, kelas_halaqoh=hlq).order_by('nama_siswa')

            if detail_ibadah_siswa:
                return render(request, 'pages/user_daftar_ibadah_detail.html', {'detail_ibadah_siswa': detail_ibadah_siswa})

    return HttpResponseRedirect('home')


@login_required
def user_ubah_ibadah_harian(request, tgl, ns, hlq):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            daftar_ibadah_siswa = IbadahHarian.objects.filter(nama_user_id=id_user, tanggal=tgl, nama_sekolah=ns, kelas_halaqoh=hlq)

            list_id_daftar_ibadah = daftar_ibadah_siswa.values_list('id', flat=True)

            if request.method == 'POST':
                namasiswa = request.POST.getlist('namasiswa')
                tanggal = request.POST.get('tanggalinput')
                subuh = request.POST.getlist('salatsubuh')
                dzuhur = request.POST.getlist('salatdzuhur')
                ashar = request.POST.getlist('salatashar')
                maghrib = request.POST.getlist('salatmaghrib')
                isya = request.POST.getlist('salatisya')
                tahajud = request.POST.getlist('salattahajud')
                duha = request.POST.getlist('salatduha')
                puasasunnah = request.POST.getlist('puasasunnah')

                join_data = [namasiswa, subuh, dzuhur, ashar, maghrib, isya, tahajud, duha, puasasunnah]

                for index in range(len(list_id_daftar_ibadah)):
                    data_tiap_siswa = [data[index] for data in join_data]
                    ibadah_siswa = IbadahHarian.objects.filter(id=list_id_daftar_ibadah[index])
                    ibadah_siswa.update(
                        nama_user_id=id_user,
                        nama_sekolah=ns,
                        kelas_halaqoh=hlq,
                        tanggal=tanggal,
                        nama_siswa=data_tiap_siswa[0],
                        shalat_jamaah_subuh=data_tiap_siswa[1],
                        shalat_jamaah_zuhur=data_tiap_siswa[2],
                        shalat_jamaah_ashar=data_tiap_siswa[3],
                        shalat_jamaah_maghrib=data_tiap_siswa[4],
                        shalat_jamaah_isya=data_tiap_siswa[5],
                        tahajud=data_tiap_siswa[6],
                        dhuha=data_tiap_siswa[7],
                        puasa_sunnah=data_tiap_siswa[8]
                    )

                sukses = True
                return render(request, 'pages/user_ubah_ibadah_harian.html', {'sukses': sukses,
                                                                              'ns': ns, 'tgl': tgl, 'hlq': hlq})

            return render(request, 'pages/user_ubah_ibadah_harian.html', {'daftar_ibadah_siswa': daftar_ibadah_siswa,
                                                                          'ns': ns, 'tgl': tgl, 'hlq': hlq})

    return HttpResponseRedirect('home')


@login_required
def user_daftar_ibadah_filter(request, taw, tak):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            data_ibadah_siswa = IbadahHarian.objects.filter(tanggal__gte=taw, tanggal__lte=tak, nama_user_id=id_user)
            ibadah_siswa_list = data_ibadah_siswa.values('tanggal', 'nama_sekolah', 'kelas_halaqoh').annotate(Sum('kelas_halaqoh')).order_by('-tanggal')

            if data_ibadah_siswa:

                paginator = Paginator(ibadah_siswa_list, 10)
                page = request.GET.get('page')
                try:
                    posts = paginator.page(page)
                except PageNotAnInteger:
                    posts = paginator.page(1)
                except EmptyPage:
                    posts = paginator.page(paginator.num_pages)

                return render(request, 'pages/user_daftar_ibadah.html', {'posts': posts, 'taw': taw, 'tak': tak})

            else:
                data_kosong = True
                return render(request, 'pages/user_daftar_ibadah.html', {'taw': taw, 'tak': tak, 'data_kosong': data_kosong})

    return HttpResponseRedirect('home')


@login_required
def hapus_daftar_ibadah(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            if request.method == 'POST':

                tgl = request.POST.get('tanggal')
                sekolah = request.POST.get('sekolah')
                hlq = request.POST.get('halaqoh')

                tanggal = datetime.strptime(tgl, '%b %d, %Y').date()

                data_ibadah_filter = IbadahHarian.objects.filter(nama_user_id=id_user, tanggal=tanggal,
                                                                 nama_sekolah=sekolah, kelas_halaqoh=hlq)

                for data in data_ibadah_filter:
                    data.delete()

            return redirect('zonaguruapps:daftar_ibadah_harian')

    return HttpResponseRedirect('home')


@login_required
def download_daftar_ibadah(request, taw, tak):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:
            ibadah_siswa = IbadahHarian.objects.filter(nama_user_id=id_user, tanggal__gte=taw, tanggal__lte=tak).order_by('nama_siswa')

            if ibadah_siswa:

                today = date.today()

                response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
                response['Content-Disposition'] = 'attachment; filename="Download Ibadah Siswa %s tanggal %s.xlsx"' % ('', today)

                workbook = openpyxl.Workbook()
                worksheet = workbook.active

                header = ['Tanggal', 'Sekolah', 'Kelas/Halaqoh', 'Nama', 'Subuh', 'Zuhur',
                          'Ashar', 'Maghrib', 'Isya', 'Tahajud', 'Dhuha', 'Puasa Sunnah']
                for col_num, column_title in enumerate(header, 1):
                    cell = worksheet.cell(row=1, column=col_num)
                    cell.value = column_title

                daftar_ibadah = ibadah_siswa.values_list('tanggal', 'nama_sekolah', 'kelas_halaqoh', 'nama_siswa', 'shalat_jamaah_subuh',
                                                         'shalat_jamaah_zuhur', 'shalat_jamaah_ashar', 'shalat_jamaah_maghrib',
                                                         'shalat_jamaah_isya', 'tahajud', 'dhuha', 'puasa_sunnah')

                for row_num, row in enumerate(daftar_ibadah, 1):
                    for col_num, cell_value in enumerate(row, 1):
                        cell = worksheet.cell(row=row_num + 1, column=col_num)
                        cell.value = cell_value

                workbook.save(response)

                return response

    return HttpResponseRedirect('home')


@login_required
def download_daftar_ibadah_nama(request, ns):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:
            ibadah_siswa = IbadahHarian.objects.filter(nama_user_id=id_user, nama_siswa__icontains=ns)

            if ibadah_siswa:

                today = date.today()

                response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
                response['Content-Disposition'] = 'attachment; filename="Download Ibadah %s nama %s.xlsx"' % ('', ns)

                workbook = openpyxl.Workbook()
                worksheet = workbook.active

                header = ['Tanggal', 'Sekolah', 'Kelas/Halaqoh', 'Nama', 'Subuh', 'Zuhur',
                          'Ashar', 'Maghrib', 'Isya', 'Tahajud', 'Dhuha', 'Puasa Sunnah']
                for col_num, column_title in enumerate(header, 1):
                    cell = worksheet.cell(row=1, column=col_num)
                    cell.value = column_title

                daftar_ibadah = ibadah_siswa.values_list('tanggal', 'nama_sekolah', 'kelas_halaqoh', 'nama_siswa', 'shalat_jamaah_subuh',
                                                         'shalat_jamaah_zuhur', 'shalat_jamaah_ashar', 'shalat_jamaah_maghrib',
                                                         'shalat_jamaah_isya', 'tahajud', 'dhuha', 'puasa_sunnah')

                for row_num, row in enumerate(daftar_ibadah, 1):
                    for col_num, cell_value in enumerate(row, 1):
                        cell = worksheet.cell(row=row_num + 1, column=col_num)
                        cell.value = cell_value

                workbook.save(response)

                return response

    return HttpResponseRedirect('home')


@login_required
def user_statistik_ibadah_harian(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            filter_ibadah = IbadahHarian.objects.filter(nama_user_id=id_user)
            taw = filter_ibadah.values_list('tanggal', flat=True).first()
            tak = filter_ibadah.values_list('tanggal', flat=True).last()
            subuh_count = Case(
                When(dhuha=0, then=0),
                default='shalat_jamaah_subuh',
                output_field=CharField(),
            )
            zuhur_count = Case(
                When(dhuha=0, then=0),
                default='shalat_jamaah_zuhur',
                output_field=CharField(),
            )
            ashar_count = Case(
                When(dhuha=0, then=0),
                default='shalat_jamaah_ashar',
                output_field=CharField(),
            )
            maghrib_count = Case(
                When(dhuha=0, then=0),
                default='shalat_jamaah_maghrib',
                output_field=CharField(),
            )
            isya_count = Case(
                When(dhuha=0, then=0),
                default='shalat_jamaah_isya',
                output_field=CharField(),
            )
            dhuha_count = Case(
                When(dhuha=0, then=0),
                default='dhuha',
                output_field=CharField(),
            )
            tahajud_count = Case(
                When(tahajud=0, then=0),
                default='tahajud',
                output_field=CharField(),
            )
            puasa_count = Case(
                When(tahajud=0, then=0),
                default='puasa_sunnah',
                output_field=CharField(),
            )
            last_ibadah = filter_ibadah.values('nama_siswa').annotate(shalat_jamaah_subuh=subuh_count,
                                                                      shalat_jamaah_zuhur=zuhur_count,
                                                                      shalat_jamaah_ashar=ashar_count,
                                                                      shalat_jamaah_maghrib=maghrib_count,
                                                                      shalat_jamaah_isya=isya_count,
                                                                      tahajud=tahajud_count,
                                                                      dhuha=dhuha_count,
                                                                      puasa_sunnah=puasa_count).order_by('nama_siswa')
            print("LAST KBM", last_ibadah)

            sorted_ibadah = defaultdict(list)
            for item in last_ibadah:
                sorted_ibadah[item['nama_siswa']].append('J' + item['shalat_jamaah_subuh'])
                sorted_ibadah[item['nama_siswa']].append('J' + item['shalat_jamaah_zuhur'])
                sorted_ibadah[item['nama_siswa']].append('J' + item['shalat_jamaah_ashar'])
                sorted_ibadah[item['nama_siswa']].append('J' + item['shalat_jamaah_maghrib'])
                sorted_ibadah[item['nama_siswa']].append('J' + item['shalat_jamaah_isya'])
                sorted_ibadah[item['nama_siswa']].append('T'+item['tahajud'])
                sorted_ibadah[item['nama_siswa']].append('D'+item['dhuha'])
                sorted_ibadah[item['nama_siswa']].append('P' + item['puasa_sunnah'])

            daftar_statistik = defaultdict(list)
            for keys, values in sorted_ibadah.items():
                daftar_statistik[keys].append(values.count('JYa'))
                daftar_statistik[keys].append(values.count('TYa'))
                daftar_statistik[keys].append(values.count('DYa'))
                daftar_statistik[keys].append(values.count('PYa'))

            paginator = Paginator(list(daftar_statistik.items()), 5)
            page = request.GET.get('page')
            try:
                posts = paginator.page(page)
            except PageNotAnInteger:
                posts = paginator.page(1)
            except EmptyPage:
                posts = paginator.page(paginator.num_pages)

            if 'tanggal' in request.POST:
                tanggalawal = request.POST.get('tanggalawal')
                tanggalakhir = request.POST.get('tanggalakhir')

                if tanggalawal and tanggalakhir:
                    return redirect('zonaguruapps:statistik_ibadah_harian_filter_tanggal', tanggalawal, tanggalakhir)

                return render(request, 'pages/user_statistik_ibadah_harian.html', {'tanggalawal': tanggalawal, 'tanggalakhir': tanggalakhir})

            elif 'nama' in request.POST:
                namasantri = request.POST.get('namasantri')

                if namasantri:
                    return redirect('zonaguruapps:statistik_ibadah_harian_filter_nama', namasantri)

                return render(request, 'pages/user_statistik_ibadah_harian.html',{})

            return render(request, 'pages/user_statistik_ibadah_harian.html', {'posts': posts, 'taw': taw, 'tak':tak})

    return HttpResponseRedirect('home')


@login_required
def user_statistik_ibadah_harian_tanggal(request, taw, tak):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            filter_ibadah = IbadahHarian.objects.filter(nama_user_id=id_user, tanggal__gte=taw, tanggal__lte=tak)

            if filter_ibadah:
                subuh_count = Case(
                    When(dhuha=0, then=0),
                    default='shalat_jamaah_subuh',
                    output_field=CharField(),
                )
                zuhur_count = Case(
                    When(dhuha=0, then=0),
                    default='shalat_jamaah_zuhur',
                    output_field=CharField(),
                )
                ashar_count = Case(
                    When(dhuha=0, then=0),
                    default='shalat_jamaah_ashar',
                    output_field=CharField(),
                )
                maghrib_count = Case(
                    When(dhuha=0, then=0),
                    default='shalat_jamaah_maghrib',
                    output_field=CharField(),
                )
                isya_count = Case(
                    When(dhuha=0, then=0),
                    default='shalat_jamaah_isya',
                    output_field=CharField(),
                )
                dhuha_count = Case(
                    When(dhuha=0, then=0),
                    default='dhuha',
                    output_field=CharField(),
                )
                tahajud_count = Case(
                    When(tahajud=0, then=0),
                    default='tahajud',
                    output_field=CharField(),
                )
                puasa_count = Case(
                    When(tahajud=0, then=0),
                    default='puasa_sunnah',
                    output_field=CharField(),
                )
                last_ibadah = filter_ibadah.values('nama_siswa').annotate(shalat_jamaah_subuh=subuh_count,
                                                                          shalat_jamaah_zuhur=zuhur_count,
                                                                          shalat_jamaah_ashar=ashar_count,
                                                                          shalat_jamaah_maghrib=maghrib_count,
                                                                          shalat_jamaah_isya=isya_count,
                                                                          tahajud=tahajud_count,
                                                                          dhuha=dhuha_count,
                                                                          puasa_sunnah=puasa_count).order_by('nama_siswa')
                print("LAST KBM", last_ibadah)

                sorted_ibadah = defaultdict(list)
                for item in last_ibadah:
                    sorted_ibadah[item['nama_siswa']].append('J' + item['shalat_jamaah_subuh'])
                    sorted_ibadah[item['nama_siswa']].append('J' + item['shalat_jamaah_zuhur'])
                    sorted_ibadah[item['nama_siswa']].append('J' + item['shalat_jamaah_ashar'])
                    sorted_ibadah[item['nama_siswa']].append('J' + item['shalat_jamaah_maghrib'])
                    sorted_ibadah[item['nama_siswa']].append('J' + item['shalat_jamaah_isya'])
                    sorted_ibadah[item['nama_siswa']].append('T'+item['tahajud'])
                    sorted_ibadah[item['nama_siswa']].append('D'+item['dhuha'])
                    sorted_ibadah[item['nama_siswa']].append('P' + item['puasa_sunnah'])

                daftar_statistik = defaultdict(list)
                for keys, values in sorted_ibadah.items():
                    daftar_statistik[keys].append(values.count('JYa'))
                    daftar_statistik[keys].append(values.count('TYa'))
                    daftar_statistik[keys].append(values.count('DYa'))
                    daftar_statistik[keys].append(values.count('PYa'))

                paginator = Paginator(list(daftar_statistik.items()), 5)
                page = request.GET.get('page')
                try:
                    posts = paginator.page(page)
                except PageNotAnInteger:
                    posts = paginator.page(1)
                except EmptyPage:
                    posts = paginator.page(paginator.num_pages)

                return render(request, 'pages/user_statistik_ibadah_harian.html', {'posts': posts, 'taw': taw, 'tak': tak})

            else:
                kosong = True
                return render(request, 'pages/user_statistik_ibadah_harian.html', {'kosong': kosong})

    return HttpResponseRedirect('home')


@login_required
def user_statistik_ibadah_harian_nama(request, ns):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            filter_ibadah = IbadahHarian.objects.filter(nama_user_id=id_user, nama_siswa__icontains=ns)
            print("FILTER IBADAH", filter_ibadah)

            if filter_ibadah:
                subuh_count = Case(
                    When(dhuha=0, then=0),
                    default='shalat_jamaah_subuh',
                    output_field=CharField(),
                )
                zuhur_count = Case(
                    When(dhuha=0, then=0),
                    default='shalat_jamaah_zuhur',
                    output_field=CharField(),
                )
                ashar_count = Case(
                    When(dhuha=0, then=0),
                    default='shalat_jamaah_ashar',
                    output_field=CharField(),
                )
                maghrib_count = Case(
                    When(dhuha=0, then=0),
                    default='shalat_jamaah_maghrib',
                    output_field=CharField(),
                )
                isya_count = Case(
                    When(dhuha=0, then=0),
                    default='shalat_jamaah_isya',
                    output_field=CharField(),
                )
                dhuha_count = Case(
                    When(dhuha=0, then=0),
                    default='dhuha',
                    output_field=CharField(),
                )
                tahajud_count = Case(
                    When(tahajud=0, then=0),
                    default='tahajud',
                    output_field=CharField(),
                )
                puasa_count = Case(
                    When(tahajud=0, then=0),
                    default='puasa_sunnah',
                    output_field=CharField(),
                )
                last_ibadah = filter_ibadah.values('nama_siswa').annotate(shalat_jamaah_subuh=subuh_count,
                                                                          shalat_jamaah_zuhur=zuhur_count,
                                                                          shalat_jamaah_ashar=ashar_count,
                                                                          shalat_jamaah_maghrib=maghrib_count,
                                                                          shalat_jamaah_isya=isya_count,
                                                                          tahajud=tahajud_count,
                                                                          dhuha=dhuha_count,
                                                                          puasa_sunnah=puasa_count).order_by('nama_siswa')

                sorted_ibadah = defaultdict(list)
                for item in last_ibadah:
                    sorted_ibadah[item['nama_siswa']].append('J' + item['shalat_jamaah_subuh'])
                    sorted_ibadah[item['nama_siswa']].append('J' + item['shalat_jamaah_zuhur'])
                    sorted_ibadah[item['nama_siswa']].append('J' + item['shalat_jamaah_ashar'])
                    sorted_ibadah[item['nama_siswa']].append('J' + item['shalat_jamaah_maghrib'])
                    sorted_ibadah[item['nama_siswa']].append('J' + item['shalat_jamaah_isya'])
                    sorted_ibadah[item['nama_siswa']].append('T'+item['tahajud'])
                    sorted_ibadah[item['nama_siswa']].append('D'+item['dhuha'])
                    sorted_ibadah[item['nama_siswa']].append('P' + item['puasa_sunnah'])

                daftar_statistik = defaultdict(list)
                for keys, values in sorted_ibadah.items():
                    daftar_statistik[keys].append(values.count('JYa'))
                    daftar_statistik[keys].append(values.count('TYa'))
                    daftar_statistik[keys].append(values.count('DYa'))
                    daftar_statistik[keys].append(values.count('PYa'))

                paginator = Paginator(list(daftar_statistik.items()), 5)
                page = request.GET.get('page')
                try:
                    posts = paginator.page(page)
                except PageNotAnInteger:
                    posts = paginator.page(1)
                except EmptyPage:
                    posts = paginator.page(paginator.num_pages)

                return render(request, 'pages/user_statistik_ibadah_harian.html', {'posts': posts, 'ns': ns})

            else:
                kosong = True
                print("KOSONG")
                return render(request, 'pages/user_statistik_ibadah_harian.html', {'kosong': kosong})

    return HttpResponseRedirect('home')



@login_required
def input_absensi_ekskul(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            daftar_sekolah = NamaSekolah.objects.filter(nama_user_id=id_user)
            daftar_ekskul = Ekskul.objects.filter(nama_user_id=id_user)

            if request.method == 'POST':
                nama_sekolah = request.POST.get('sekolah')
                nama_ekskul = request.POST.get('ekskul')

                if nama_sekolah and nama_ekskul:
                    return redirect('zonaguruapps:absensi_ekskul_filter', nama_sekolah, nama_ekskul)

                return render(request, 'pages/user_input_absensi_ekskul.html', {'daftar_ekskul': daftar_ekskul,
                                                                                'daftar_sekolah': daftar_sekolah})

            return render(request, 'pages/user_input_absensi_ekskul.html', {'daftar_ekskul': daftar_ekskul,
                                                                            'daftar_sekolah': daftar_sekolah})

    return HttpResponseRedirect('home')


@login_required
def input_absensi_ekskul_filter(request, ns, ne):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            namasekolah = ns
            namaekskul = ne

            daftar_sekolah = NamaSekolah.objects.filter(nama_user_id=id_user)
            daftar_ekskul = Ekskul.objects.filter(nama_user_id=id_user)
            daftar_kelas = Kelas.objects.filter(nama_user_id=id_user)
            daftar_siswa_sekolah = DataSiswa.objects.filter(nama_user_id=id_user, nama_sekolah=namasekolah)
            daftar_siswa = daftar_siswa_sekolah.filter(Q(nama_ekskul1=namaekskul) | Q(nama_ekskul2=namaekskul) | Q(nama_ekskul3=namaekskul))
            jumlah_siswa = list(daftar_siswa.values_list('nama_siswa', flat=True))

            if request.method == 'POST':
                tanggal = request.POST.get('tanggal')
                kelas = request.POST.getlist('kelas')
                namasiswa = request.POST.getlist('namasantri')
                kehadiran = request.POST.getlist('kehadiran')
                ket_ekskul = request.POST.getlist('ketekskul')
                tahunajar = request.POST.get('tahunajar')
                semesterajar = request.POST.get('semester')
                materiajar = request.POST.get('materi')

                join_data = [namasiswa, kehadiran, ket_ekskul, kelas]

                for index in range(len(jumlah_siswa)):
                    data_tiap_santri = [data[index] for data in join_data]
  
                    input_kehadiran_ekskul_santri = DataEkskul(nama_user_id=id_user, nama_sekolah=namasekolah,
                                                               tanggal=tanggal, nama_siswa=data_tiap_santri[0],
                                                               nama_ekskul=namaekskul,
                                                               materi=materiajar,
                                                               kehadiran=data_tiap_santri[1],
                                                               keterangan=data_tiap_santri[2],
                                                               tahun_ajar=tahunajar, semester_ajar=semesterajar,
                                                               kelas=data_tiap_santri[3])

                    input_kehadiran_ekskul_santri.save()

                sukses = True

                return render(request, 'pages/user_input_absensi_ekskul_filter.html', {'sukses': sukses,
                                                                                       'namasekolah': namasekolah,
                                                                                       'namaekskul': namaekskul,
                                                                                       'daftar_kelas': daftar_kelas,
                                                                                       'daftar_siswa': daftar_siswa})

            return render(request, 'pages/user_input_absensi_ekskul_filter.html', {'daftar_kelas': daftar_kelas,
                                                                                   'namasekolah': namasekolah,
                                                                                   'namaekskul': namaekskul,
                                                                                   'daftar_sekolah': daftar_sekolah,
                                                                                   'daftar_ekskul': daftar_ekskul,
                                                                                   'daftar_siswa': daftar_siswa})

    return HttpResponseRedirect('home')


@login_required
def daftar_absensi_ekskul(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            daftar_ekskul = Ekskul.objects.filter(nama_user_id=id_user)

            if request.method == 'POST':
                tapel = request.POST.get('tahunajar')
                semester = request.POST.get('semester')
                namaekskul = request.POST.get('ekskul')

                if tapel and namaekskul:
                    return redirect('zonaguruapps:daftar_absensi_ekskul_filter', tapel, semester, namaekskul)

                return render(request, 'pages/user_daftar_ekskul.html', {'daftar_ekskul': daftar_ekskul})

            return render(request, 'pages/user_daftar_ekskul.html', {'daftar_ekskul': daftar_ekskul})

    return HttpResponseRedirect('home')


@login_required
def daftar_absensi_ekskul_filter(request, tp, sm, ne):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            tapel = tp
            semester = sm
            namaekskul = ne

            #daftar_sekolah = NamaSekolah.objects.filter(nama_user_id=id_user)
            daftar_ekskul = Ekskul.objects.filter(nama_user_id=id_user)
            data_ekskul = DataEkskul.objects.filter(tahun_ajar=tp, semester_ajar=sm, nama_user_id=id_user, nama_ekskul=namaekskul)\
                .values('tanggal', 'nama_sekolah', 'kelas', 'nama_ekskul', 'materi', 'tahun_ajar', 'semester_ajar')\
                .annotate(Sum('kehadiran')).order_by('-tanggal')

            if data_ekskul:
                paginator = Paginator(data_ekskul, 10)
                page = request.GET.get('page')
                try:
                    posts = paginator.page(page)
                except PageNotAnInteger:
                    posts = paginator.page(1)
                except EmptyPage:
                    posts = paginator.page(paginator.num_pages)

                return render(request, 'pages/user_daftar_ekskul.html', {'posts': posts, 'daftar_ekskul': daftar_ekskul,
                                                                         'tapel': tapel, 'semester': semester,
                                                                         'namaekskul': namaekskul})
            else:
                data_kosong = True
                return render(request, 'pages/user_daftar_ekskul.html', {'tapel': tapel, 'semester': semester,
                                                                         'namaekskul': namaekskul,
                                                                         'daftar_ekskul': daftar_ekskul,
                                                                         'data_kosong': data_kosong})

    return HttpResponseRedirect('home')


@login_required
def daftar_absensi_ekskul_detail(request, tp, sm, tgl, ns, kls, ne, mtr):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            daftar_ekskul = Ekskul.objects.filter(nama_user_id=id_user)

            tanggal = datetime.strptime(tgl, '%Y-%m-%d').date()
            tgl_ekskul = format_date(tanggal, format='long', locale='id')

            filter_ekskul_siswa = DataEkskul.objects.all().filter(nama_user_id=id_user, tanggal=tgl,
                                                                  nama_sekolah=ns, kelas=kls,
                                                                  nama_ekskul=ne).order_by('nama_siswa')
            daftar_nama_siswa = filter_ekskul_siswa.values_list('nama_siswa', flat=True)
            daftar_kehadiran_siswa = filter_ekskul_siswa.values_list('kehadiran', flat=True)
            daftar_keterangan = filter_ekskul_siswa.values_list('keterangan', flat=True)
            join_data = zip(daftar_nama_siswa, daftar_kehadiran_siswa, daftar_keterangan)
            join_data_ekskul = sorted(join_data, key=lambda i: i[0])

            return render(request, 'pages/user_daftar_ekskul.html', {'join_data_ekskul': join_data_ekskul, 'tp': tp,
                                                                     'sm': sm, 'tgl_ekskul': tgl_ekskul, 'kls': kls, 'ne': ne,
                                                                     'mtr': mtr, 'daftar_ekskul': daftar_ekskul})

    return HttpResponseRedirect('home')


@login_required
def user_hapus_absensi_ekskul(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            if request.method == 'POST':

                tapel = request.POST.get('tapel')
                smstr = request.POST.get('smstr')
                tgl = request.POST.get('tanggal')
                sekolah = request.POST.get('sekolah')
                kls = request.POST.get('kls')
                namaekskul = request.POST.get('namaekskul')
                materi = request.POST.get('materi')

                tanggal = datetime.strptime(tgl, '%b %d, %Y').date()

                data_ekskul_filter = DataEkskul.objects.filter(nama_user_id=id_user, tahun_ajar=tapel, semester_ajar=smstr,
                                                               tanggal=tanggal, nama_sekolah=sekolah, kelas=kls,
                                                               nama_ekskul=namaekskul, materi=materi)
 
                for data in data_ekskul_filter:
                    data.delete()

            return redirect('zonaguruapps:daftar_absensi_ekskul')

    return HttpResponseRedirect('home')


@login_required
def penilaian_ekskul(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            daftar_ekskul = Ekskul.objects.filter(nama_user_id=id_user)
            daftar_kelas = Kelas.objects.filter(nama_user_id=id_user)
            daftar_sekolah = NamaSekolah.objects.filter(nama_user_id=id_user)

            if request.method == 'POST':

                sekolah = request.POST.get('sekolah')
                kelas = request.POST.get('kelas')
                ekskul = request.POST.get('ekskul')

                if sekolah and kelas and ekskul:
                    return redirect('zonaguruapps:penilaian_ekskul_filter', sekolah, kelas, ekskul)

                else:
                    return render(request, 'pages/user_penilaian_ekskul.html', {'daftar_ekskul': daftar_ekskul,
                                                                                'daftar_kelas': daftar_kelas,
                                                                                'daftar_sekolah': daftar_sekolah})

            return render(request, 'pages/user_penilaian_ekskul.html', {'daftar_ekskul': daftar_ekskul,
                                                                        'daftar_kelas': daftar_kelas,
                                                                        'daftar_sekolah': daftar_sekolah})

    return HttpResponseRedirect('home')


@login_required
def penilaian_ekskul_filter(request, ns, kls, ne):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            namasekolah = ns
            namakelas = kls
            namaekskul = ne

            daftar_ekskul = Ekskul.objects.filter(nama_user_id=id_user)
            daftar_kelas = Kelas.objects.filter(nama_user_id=id_user)
            daftar_sekolah = NamaSekolah.objects.filter(nama_user_id=id_user)

            daftar_siswa_sekolah = DataSiswa.objects.filter(nama_user_id=id_user, nama_sekolah=namasekolah)
            daftar_siswa = daftar_siswa_sekolah.filter(Q(nama_ekskul1=namaekskul) | Q(nama_ekskul2=namaekskul) | Q(nama_ekskul3=namaekskul))

            if daftar_siswa:

                if request.method == 'POST':
                    tanggal = request.POST.get('tanggal')
                    tahun = request.POST.get('tahunajar')
                    semester = request.POST.get('semesterajar')
                    jenisnilai = request.POST.get('jenisnilai')
                    namapenilaian = request.POST.get('namapenilaian')
                    namasiswa = request.POST.getlist('namasiswa')
                    nilaiekskul = request.POST.getlist('nilai')

                    join_data = [namasiswa, nilaiekskul]

                    for index in range(len(list(daftar_siswa))):
                        data_tiap_siswa = [data[index] for data in join_data]

                        input_nilai_ekskul = NilaiEkskul(nama_user_id=id_user, tanggal=tanggal,
                                                         nama_penilaian=namapenilaian,
                                                         jenis_nilai=jenisnilai,
                                                         nama_ekskul=namaekskul,
                                                         nama_sekolah=namasekolah, kelas=namakelas,
                                                         nama_siswa=data_tiap_siswa[0],
                                                         tahun_ajar=tahun,
                                                         semester_ajar=semester,
                                                         nilai=data_tiap_siswa[1])

                        input_nilai_ekskul.save()

                    sukses = True

                    return render(request, 'pages/user_penilaian_ekskul_filter.html', {'daftar_ekskul': daftar_ekskul,
                                                                                       'daftar_kelas': daftar_kelas,
                                                                                       'daftar_sekolah': daftar_sekolah,
                                                                                       'namasekolah': namasekolah,
                                                                                       'namakelas': namakelas,
                                                                                       'namaekskul': namaekskul,
                                                                                       'daftar_siswa': daftar_siswa,
                                                                                       'sukses': sukses})

                return render(request, 'pages/user_penilaian_ekskul_filter.html', {'daftar_ekskul': daftar_ekskul,
                                                                                   'daftar_kelas': daftar_kelas,
                                                                                   'daftar_sekolah': daftar_sekolah,
                                                                                   'namasekolah': namasekolah,
                                                                                   'namakelas': namakelas,
                                                                                   'namaekskul': namaekskul,
                                                                                   'daftar_siswa': daftar_siswa})

            else:
                data_kosong = True
                return render(request, 'pages/user_penilaian_ekskul_filter.html', {'daftar_ekskul': daftar_ekskul,
                                                                                   'daftar_kelas': daftar_kelas,
                                                                                   'daftar_sekolah': daftar_sekolah,
                                                                                   'namasekolah': namasekolah,
                                                                                   'namakelas': namakelas,
                                                                                   'namaekskul': namaekskul,
                                                                                   'data_kosong': data_kosong})

    return HttpResponseRedirect('home')


@login_required
def daftar_nilai_ekskul(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()
        free_user = StatusUser.objects.filter(user_id=id_user).values_list('is_free', flat=True).first()
        premium_user = StatusUser.objects.filter(user_id=id_user).values_list('is_premium', flat=True).first()

        if status_user:

            filter_ekskul = NilaiEkskul.objects.filter(nama_user_id=id_user)

            if request.method == 'POST':

                tahunajar = request.POST.get('tahunajar')
                semester = request.POST.get('semester')

                data_nilai_siswa = NilaiEkskul.objects.filter(tahun_ajar=tahunajar, semester_ajar=semester, nama_user_id=id_user).values(
                    'tanggal', 'nama_sekolah', 'kelas', 'nama_ekskul', 'nama_penilaian', 'tahun_ajar', 'semester_ajar',
                    'jenis_nilai').annotate(Sum('nilai')).order_by('-tanggal')

                paginator = Paginator(data_nilai_siswa, 10)
                page = request.GET.get('page')
                try:
                    posts = paginator.page(page)
                except PageNotAnInteger:
                    posts = paginator.page(1)
                except EmptyPage:
                    posts = paginator.page(paginator.num_pages)

                return render(request, 'pages/user_daftar_nilai_ekskul.html', {'posts': posts,
                                                                               'tahunajar': tahunajar,
                                                                               'semester': semester,
                                                                               'free_user': free_user,
                                                                               'premium_user': premium_user
                                                                               })

            else:
                tahunajar = filter_ekskul.values_list('tahun_ajar', flat=True).last()
                semester = filter_ekskul.values_list('semester_ajar', flat=True).last()
 
                data_nilai_siswa = NilaiEkskul.objects.filter(tahun_ajar=tahunajar, semester_ajar=semester, nama_user_id=id_user).values(
                    'tanggal', 'nama_sekolah', 'kelas', 'nama_ekskul', 'nama_penilaian', 'tahun_ajar', 'semester_ajar',
                    'jenis_nilai').annotate(Sum('nilai')).order_by('-tanggal')

                paginator = Paginator(data_nilai_siswa, 10)
                page = request.GET.get('page')
                try:
                    posts = paginator.page(page)
                except PageNotAnInteger:
                    posts = paginator.page(1)
                except EmptyPage:
                    posts = paginator.page(paginator.num_pages)

                return render(request, 'pages/user_daftar_nilai_ekskul.html', {'posts': posts,
                                                                               'tahunajar': tahunajar,
                                                                               'semester': semester,
                                                                               'free_user': free_user,
                                                                               'premium_user': premium_user
                                                                               })

        else:
            return render(request, 'pages/user_daftar_nilai_ekskul.html', {'free_user': free_user,
                                                                           'premium_user': premium_user})

    return HttpResponseRedirect('home')


@login_required
def daftar_nilai_ekskul_detail(request, tgl, ns, kls, ne, np, jn):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:
            detail_nilai_siswa = NilaiEkskul.objects.filter(nama_user_id=id_user, tanggal=tgl, nama_sekolah=ns, kelas=kls,
                                                            nama_ekskul=ne, nama_penilaian=np, jenis_nilai=jn).order_by('nama_siswa')

            if detail_nilai_siswa:

                return render(request, 'pages/user_daftar_nilai_ekskul_detail.html', {'detail_nilai_siswa': detail_nilai_siswa})

    return HttpResponseRedirect('home')


@login_required
def user_ubah_nilai_ekskul(request, tgl, ns, kls, ne, np, jn):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            daftar_nilai_siswa = NilaiEkskul.objects.filter(nama_user_id=id_user, tanggal=tgl, nama_sekolah=ns, kelas=kls,
                                                            nama_ekskul=ne, nama_penilaian=np, jenis_nilai=jn).order_by('nama_siswa')
            daftar_mapel = Mapel.objects.filter(nama_user_id=id_user)
            list_id_daftar_nilai = daftar_nilai_siswa.values_list('id', flat=True)

            if request.method == 'POST':
                nilai_update = request.POST.getlist('nilai')
                jenisnilai_update = request.POST.get('jenisnilai')
                namanilai = request.POST.get('namanilai')
                namaekskul = request.POST.get('ekskul')
                tahun = request.POST.get('tahunajar')
                semester = request.POST.get('semesterajar')

                for index in range(len(list_id_daftar_nilai)):
                    nilai_siswa = NilaiEkskul.objects.filter(id=list_id_daftar_nilai[index])
                    nilai_siswa.update(tahun_ajar=tahun, semester_ajar=semester, nama_ekskul=namaekskul,
                                       jenis_nilai=jenisnilai_update, nama_penilaian=namanilai, nilai=nilai_update[index])
 
                detail_nilai_siswa = daftar_nilai_siswa

                sukses = True

                return render(request, 'pages/user_edit_nilai_ekskul.html', {'detail_nilai_siswa': detail_nilai_siswa,
                                                                             'tgl': tgl, 'ns': ns, 'kls': kls, 'ne': ne,
                                                                             'np': np, 'jn': jn, 'sukses': sukses})

            return render(request, 'pages/user_edit_nilai_ekskul.html', {'daftar_nilai_siswa': daftar_nilai_siswa,
                                                                         'tgl': tgl, 'ns': ns, 'kls': kls, 'ne': ne,
                                                                         'np': np, 'jn': jn, 'daftar_mapel': daftar_mapel})

    return HttpResponseRedirect('home')


@login_required
def hapus_nilai_ekskul(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            if request.method == 'POST':

                tgl = request.POST.get('tanggal')
                sekolah = request.POST.get('sekolah')
                kls = request.POST.get('kls')
                ne = request.POST.get('namaekskul')
                np = request.POST.get('namanilai')
                jn = request.POST.get('jenisnilai')

                tanggal = datetime.strptime(tgl, '%b %d, %Y').date()

                nilai_ekskul_filter = NilaiEkskul.objects.filter(nama_user_id=id_user, tanggal=tanggal, nama_sekolah=sekolah,
                                                         kelas=kls, nama_ekskul=ne, nama_penilaian=np, jenis_nilai=jn)

                for nilai in nilai_ekskul_filter:
                    nilai.delete()

            return redirect('zonaguruapps:daftar_nilai_ekskul')

    return HttpResponseRedirect('home')


@login_required
def download_nilai_ekskul(request, tgl, ns, kls, ne, np, jn):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:
            nilai_ekskul = NilaiEkskul.objects.filter(nama_user_id=id_user, tanggal=tgl, nama_sekolah=ns, kelas=kls,
                                                     nama_ekskul=ne, nama_penilaian=np, jenis_nilai=jn).order_by('nama_siswa')

            if nilai_ekskul:

                response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
                response['Content-Disposition'] = 'attachment; filename="Nilai %s kelas %s ekskul %s.xlsx"' % ('', kls, ne)

                workbook = openpyxl.Workbook()
                worksheet = workbook.active

                header = ['Nama Siswa', 'Nama Sekolah', 'Kelas', 'Nama Ekskul', 'Nama Penilaian', 'Tahun', 'Semester', 'Nilai']
                for col_num, column_title in enumerate(header, 1):
                    cell = worksheet.cell(row=1, column=col_num)
                    cell.value = column_title

                daftar_nilai = nilai_ekskul.values_list('nama_siswa', 'nama_sekolah', 'kelas', 'nama_ekskul',
                                                       'nama_penilaian', 'tahun_ajar', 'semester_ajar', 'nilai')

                for row_num, row in enumerate(daftar_nilai, 1):
                    for col_num, cell_value in enumerate(row, 1):
                        cell = worksheet.cell(row=row_num + 1, column=col_num)
                        cell.value = cell_value

                workbook.save(response)

                return response

    return HttpResponseRedirect('home')


@login_required
def tulis_catatan(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            if request.method == 'POST':
                tgl_catatan = request.POST.get('tanggal')
                jdl_catatan = request.POST.get('judul')
                catatan = request.POST.get('catatan')

                simpan_catatan = CatatanGuru(nama_user_id=id_user,
                                             tanggal=tgl_catatan,
                                             judul_catatan=jdl_catatan,
                                             isi_catatan=catatan)
                simpan_catatan.save()

                sukses = True

                return render(request, 'pages/user_buat_catatan.html', {'sukses': sukses})

            return render(request, 'pages/user_buat_catatan.html', {})

    return HttpResponseRedirect('home')


@login_required
def daftar_catatan(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            daftar_catatan = CatatanGuru.objects.all().filter(nama_user_id=id_user)

            paginator = Paginator(daftar_catatan, 6)
            page = request.GET.get('page')
            try:
                posts = paginator.page(page)
            except PageNotAnInteger:
                posts = paginator.page(1)
            except EmptyPage:
                posts = paginator.page(paginator.num_pages)

            if request.method == 'POST':

                cari_catatan = request.POST.get('caricatatan')

                daftar_catatan_filter = daftar_catatan.filter(Q(judul_catatan__icontains=cari_catatan) |
                                                               Q(isi_catatan__icontains=cari_catatan))

                paginator_filter = Paginator(daftar_catatan_filter, 10)
                page_filter = request.GET.get('page')
                try:
                    posts_filter = paginator_filter.page(page_filter)
                except PageNotAnInteger:
                    posts_filter = paginator_filter.page(1)
                except EmptyPage:
                    posts_filter = paginator_filter.page(paginator.num_pages)

                return render(request, 'pages/user_daftar_catatan.html',
                              {'posts_filter': posts_filter, 'id_user': id_user})

            return render(request, 'pages/user_daftar_catatan.html', {'posts': posts, 'id_user': id_user})

    return HttpResponseRedirect('home')


@login_required
def detail_catatan(request, idcatatan):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:
            detail_catatan_filter = CatatanGuru.objects.filter(id=idcatatan).first()

            return render(request, 'pages/user_detail_catatan.html', {'detail_catatan_filter': detail_catatan_filter})

    return HttpResponseRedirect('home')


@login_required
def ubah_catatan(request, idcatatan):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            id_data = idcatatan
            catatan_filter = CatatanGuru.objects.filter(id=id_data)
            user_catatan = catatan_filter.first()

            if request.method == 'POST':
                tanggal = request.POST.get('tanggal')
                judul = request.POST.get('judul')
                isi = request.POST.get('catatan')

                catatan_filter.update(nama_user_id=id_user, tanggal=tanggal,
                                      judul_catatan=judul, isi_catatan=isi)

                sukses = True

                return render(request, 'pages/user_ubah_catatan.html', {'sukses': sukses, 'id_data': id_data,
                                                                        'user_catatan': user_catatan})

            return render(request, 'pages/user_ubah_catatan.html', {'id_data': id_data, 'user_catatan': user_catatan})

    return HttpResponseRedirect('home')


@login_required
def hapus_catatan(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            if request.method == 'POST':

                id_cat = request.POST.get('idcat')

                catatan_filter = CatatanGuru.objects.filter(id=id_cat)

                catatan_filter.delete()

            return redirect('zonaguruapps:daftar_catatan')

    return HttpResponseRedirect('home')


@login_required
def kalender_kegiatan(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()
        free_user = StatusUser.objects.filter(user_id=id_user).values_list('is_free', flat=True).first()
        premium_user = StatusUser.objects.filter(user_id=id_user).values_list('is_premium', flat=True).first()

        if status_user:
            kegiatan_list = []
            kalender_kegiatan_list = []
            kalender_kegiatan_filter = KalendarKegiatan.objects.filter(nama_user_id=id_user)

            for keg in kalender_kegiatan_filter:
                kegiatan_list.append({
                    'title': keg.judul_kegiatan,
                    'start': datetime.strptime(str(keg.tanggal), "%Y-%m-%d").strftime("%Y-%m-%d") + 'T' + str(keg.waktu_awal),
                    'end': datetime.strptime(str(keg.tanggal_akhir), "%Y-%m-%d").strftime("%Y-%m-%d") + 'T' + str(keg.waktu_akhir),
                    'id': keg.id,
                    'extendedProps': {
                        'location': keg.lokasi,
                        'description': keg.deskripsi
                    },

                })

            #kegiatan = list(kalender_kegiatan_filter)
            kegiatan = json.dumps(kegiatan_list)

            kalender_kegiatan = json.dumps(kalender_kegiatan_list)

            if request.method == 'POST':
                tgl_awal = request.POST.get('tanggalmulai')
                tgl_akhir = request.POST.get('tanggalakhir')
                lok_kegiatan = request.POST.get('lokasi')
                awal_waktu = request.POST.get('awaljam')
                akhir_waktu = request.POST.get('akhirwaktu')
                judul = request.POST.get('judul')
                ket_kegiatan = request.POST.get('deskripsi')

                simpan_kegiatan = KalendarKegiatan(nama_user_id=id_user, tanggal=tgl_awal, tanggal_akhir=tgl_akhir,
                                                   lokasi=lok_kegiatan, waktu_awal=awal_waktu, waktu_akhir=akhir_waktu,
                                                   judul_kegiatan=judul, deskripsi=ket_kegiatan)
                simpan_kegiatan.save()

                sukses = True

                return render(request, 'pages/user_kalender_kegiatan.html', {'sukses': sukses})

            return render(request, 'pages/user_kalender_kegiatan.html', {'kegiatan': kegiatan, 'kalender_kegiatan': kalender_kegiatan,
                                                                         'free_user': free_user, 'premium_user': premium_user})

    return HttpResponseRedirect('home')


@login_required
def ubah_kalender_kegiatan(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            kegiatan_filter = KalendarKegiatan.objects.filter(nama_user_id=id_user)

            if request.method == 'POST':
                id_keg = request.POST.get('idkeg')
                tgl_awal = request.POST.get('tglkegawal')
                tgl_akhir = request.POST.get('tglkegakhir')
                lok_kegiatan = request.POST.get('lokkeg')
                awal_waktu = request.POST.get('awaljamkeg')
                akhir_waktu = request.POST.get('akhirjamkeg')
                judul = request.POST.get('judulkeg')
                ket_kegiatan = request.POST.get('deskeg')
                kegiatan_id = kegiatan_filter.filter(id=id_keg)

                kegiatan_id.update(tanggal=tgl_awal, tanggal_akhir=tgl_akhir,
                                   lokasi=lok_kegiatan, waktu_awal=awal_waktu,
                                   waktu_akhir=akhir_waktu, judul_kegiatan=judul,
                                   deskripsi=ket_kegiatan)

                sukses = True

                return render(request, 'pages/user_kalender_kegiatan.html', {'sukses': sukses})

    return HttpResponseRedirect('home')


@login_required
def hapus_kalender_kegiatan(request, id):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            id_keg = id

            kegiatan_filter = KalendarKegiatan.objects.filter(nama_user_id=id_user)
            keg_filter_by_id = kegiatan_filter.filter(id=id_keg)

            keg_filter_by_id.delete()

            return redirect("zonaguruapps:kalender_kegiatan")

    return HttpResponseRedirect('home')


@login_required
def media_ajar(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()
        free_user = StatusUser.objects.filter(user_id=id_user).values_list('is_free', flat=True)
        premium_user = StatusUser.objects.filter(user_id=id_user).values_list('is_premium', flat=True).first()
        print("STATUS", free_user, premium_user)

        if status_user:

            daftar_media = MediaAjar.objects.all()

            paginator = Paginator(daftar_media, 10)
            page = request.GET.get('page')
            try:
                posts = paginator.page(page)
            except PageNotAnInteger:
                posts = paginator.page(1)
            except EmptyPage:
                posts = paginator.page(paginator.num_pages)

            if request.method == 'POST':

                nama_judul_deskripsi = request.POST.get('carimedia')

                daftar_media_filter = MediaAjar.objects.filter(Q(judul_media__icontains=nama_judul_deskripsi) |
                                                               Q(sub_judul_media__icontains=nama_judul_deskripsi))

                paginator_filter = Paginator(daftar_media_filter, 10)
                page_filter = request.GET.get('page')
                try:
                    posts_filter = paginator_filter.page(page_filter)
                except PageNotAnInteger:
                    posts_filter = paginator_filter.page(1)
                except EmptyPage:
                    posts_filter = paginator_filter.page(paginator.num_pages)

                return render(request, 'pages/user_daftar_media_ajar.html', {'posts_filter': posts_filter, 'free_user': free_user,
                                                                             'premium_user': premium_user})

            return render(request, 'pages/user_daftar_media_ajar.html', {'posts': posts, 'free_user': free_user,
                                                                         'premium_user': premium_user})

    return HttpResponseRedirect('home')


@login_required
def download_media_ajar(request, mid):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:
            media_id = mid

            mediaajar = get_object_or_404(MediaAjar, pk=media_id)
            mediaajar_filepath = mediaajar.file_media.path
            response = FileResponse(open(mediaajar_filepath, 'rb'))
            response['Content-Type'] = 'application/octet-stream'
            response['Content-Disposition'] = f'attachment; filename="{mediaajar.judul_media}.pdf"'

            media_didonlod = MediaAjar.objects.filter(id=media_id)
            jumlah_donlod_awal = media_didonlod.values_list('jumlah_download', flat=True).first()
            media_didonlod.update(jumlah_download=(jumlah_donlod_awal+1))

            return response

    return HttpResponseRedirect('home')


@login_required
def daftar_loker(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            daftar_loker = DataLoker.objects.all()

            paginator = Paginator(daftar_loker, 6)
            page = request.GET.get('page')
            try:
                posts = paginator.page(page)
            except PageNotAnInteger:
                posts = paginator.page(1)
            except EmptyPage:
                posts = paginator.page(paginator.num_pages)

            if request.method == 'POST':

                cari_loker = request.POST.get('cariloker')

                daftar_loker_filter = DataLoker.objects.filter(Q(judul_loker__icontains=cari_loker) |
                                                               Q(kota__icontains=cari_loker) |
                                                               Q(provinsi__icontains=cari_loker))

                paginator_filter = Paginator(daftar_loker_filter, 10)
                page_filter = request.GET.get('page')
                try:
                    posts_filter = paginator_filter.page(page_filter)
                except PageNotAnInteger:
                    posts_filter = paginator_filter.page(1)
                except EmptyPage:
                    posts_filter = paginator_filter.page(paginator.num_pages)

                return render(request, 'pages/user_daftar_loker.html', {'posts_filter': posts_filter, 'id_user': id_user})

            return render(request, 'pages/user_daftar_loker.html', {'posts': posts, 'id_user': id_user})

    return HttpResponseRedirect('home')


@login_required
def detail_loker(request, idloker):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            detail_loker_filter = DataLoker.objects.filter(id=idloker).first()

            return render(request, 'pages/user_detail_loker.html', {'detail_loker_filter': detail_loker_filter})

    return HttpResponseRedirect('home')


@login_required
def buat_loker(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()
        free_user = StatusUser.objects.filter(user_id=id_user).values_list('is_free', flat=True)
        premium_user = StatusUser.objects.filter(user_id=id_user).values_list('is_premium', flat=True)

        if status_user:

            if request.method == 'POST':

                tanggal = request.POST.get('tanggal')
                judul = request.POST.get('judul')
                sekolah = request.POST.get('namasekolah')
                deskripsi = request.POST.get('deskripsi')
                nohp = request.POST.get('nohp')
                alamat = request.POST.get('alamat')
                kel = request.POST.get('kelurahan')
                kec = request.POST.get('kecamatan')
                kota = request.POST.get('kota')
                provinsi = request.POST.get('provinsi')

                simpan_data_loker = DataLoker(pemasang_loker_id=id_user, judul_loker=judul,
                                              nama_sekolah=sekolah, deskripsi=deskripsi,
                                              nomor_kontak=nohp, alamat_loker=alamat,
                                              kelurahan=kel, kecamatan=kec, kota=kota,
                                              provinsi=provinsi, tanggal=tanggal)
                simpan_data_loker.save()

                sukses = True

                return render(request, 'pages/user_buat_loker.html', {'sukses': sukses})

            return render(request, 'pages/user_buat_loker.html', {})

    return HttpResponseRedirect('home')


@login_required
def ubah_loker(request, idloker):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            id_data = idloker
            loker_filter = DataLoker.objects.filter(id=id_data)
            user_loker = loker_filter.first()

            if request.method == 'POST':

                tanggal = request.POST.get('tanggal')
                judul = request.POST.get('judul')
                sekolah = request.POST.get('namasekolah')
                deskripsi = request.POST.get('deskripsi')
                nohp = request.POST.get('nohp')
                alamat = request.POST.get('alamat')
                kel = request.POST.get('kelurahan')
                kec = request.POST.get('kecamatan')
                kota = request.POST.get('kota')
                provinsi = request.POST.get('provinsi')

                loker_filter.update(pemasang_loker_id=id_user, judul_loker=judul,
                                    nama_sekolah=sekolah, deskripsi=deskripsi,
                                    nomor_kontak=nohp, alamat_loker=alamat,
                                    kelurahan=kel, kecamatan=kec, kota=kota,
                                    provinsi=provinsi, tanggal=tanggal)

                sukses = True

                return render(request, 'pages/user_ubah_loker.html', {'sukses': sukses, 'user_loker': user_loker,
                                                                      'id_data': id_data})

            return render(request, 'pages/user_ubah_loker.html', {'user_loker': user_loker, 'id_data': id_data})

    return HttpResponseRedirect('home')


@login_required
def buat_cv(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()
        free_user = StatusUser.objects.filter(user_id=id_user).values_list('is_free', flat=True)
        premium_user = StatusUser.objects.filter(user_id=id_user).values_list('is_premium', flat=True).first()

        if status_user:

            if request.method == 'POST':

                judulpenawaran = request.POST.get('penawaran')
                deskripsipenawaran = request.POST.get('deskripsipenawaran')
                agama = request.POST.get('agama')
                negara = request.POST.get('negara')
                pendidikan = request.POST.get('pendidikan')
                organisasi = request.POST.get('organisasi')
                pengalaman = request.POST.get('pengalaman')
                keahlian = request.POST.get('keahlian')
                prestasi = request.POST.get('prestasi')

                simpan_data_cv = DataPenawaran(nama_user_id=id_user, judul_penawaran=judulpenawaran,
                                               deskripsi_penawaran=deskripsipenawaran, agama=agama,
                                               negara=negara, riwayat_pendidikan=pendidikan,
                                               riwayat_organisasi=organisasi, pengalaman_kerja=pengalaman,
                                               riwayat_prestasi=prestasi, keahlian=keahlian)
                simpan_data_cv.save()

                sukses = True

                return render(request, 'pages/user_buat_cv.html', {'sukses': sukses, 'premium_user': premium_user})

            return render(request, 'pages/user_buat_cv.html', {'premium_user': premium_user})

    return HttpResponseRedirect('home')


@login_required
def daftar_cv(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            daftar_cv = DataPenawaran.objects.all()

            paginator = Paginator(daftar_cv, 10)
            page = request.GET.get('page')
            try:
                posts = paginator.page(page)
            except PageNotAnInteger:
                posts = paginator.page(1)
            except EmptyPage:
                posts = paginator.page(paginator.num_pages)

            if request.method == 'POST':

                cari_cv = request.POST.get('caricv')

                daftar_cv_filter = DataPenawaran.objects.filter(Q(judul_penawaran__icontains=cari_cv) |
                                                               Q(kriwayat_pendidikan__icontains=cari_cv) |
                                                               Q(keahlian__icontains=cari_cv))

                paginator_filter = Paginator(daftar_cv_filter, 10)
                page_filter = request.GET.get('page')
                try:
                    posts_filter = paginator_filter.page(page_filter)
                except PageNotAnInteger:
                    posts_filter = paginator_filter.page(1)
                except EmptyPage:
                    posts_filter = paginator_filter.page(paginator.num_pages)

                return render(request, 'pages/user_daftar_cv.html', {'posts_filter': posts_filter, 'id_user': id_user})

            return render(request, 'pages/user_daftar_cv.html', {'posts': posts, 'id_user': id_user})

    return HttpResponseRedirect('home')


@login_required
def detail_cv(request, idcv):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            detail_cv_filter = DataPenawaran.objects.filter(id=idcv).first()
            profile_user = ProfileUser.objects.filter(profile_user_id=id_user)

            return render(request, 'pages/user_detail_cv.html', {'detail_cv_filter': detail_cv_filter})

    return HttpResponseRedirect('home')


@login_required
def ubah_cv(request, idcv):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            id_data = idcv
            cv_filter = DataPenawaran.objects.filter(id=id_data)
            user_cv = cv_filter.first()

            if request.method == 'POST':

                judulpenawaran = request.POST.get('penawaran')
                deskripsipenawaran = request.POST.get('deskripsipenawaran')
                agama = request.POST.get('agama')
                negara = request.POST.get('negara')
                pendidikan = request.POST.get('pendidikan')
                organisasi = request.POST.get('organisasi')
                pengalaman = request.POST.get('pengalaman')
                keahlian = request.POST.get('keahlian')
                prestasi = request.POST.get('prestasi')

                cv_filter.update(nama_user_id=id_user, judul_penawaran=judulpenawaran,
                                 deskripsi_penawaran=deskripsipenawaran, agama=agama,
                                 negara=negara, riwayat_pendidikan=pendidikan,
                                 riwayat_organisasi=organisasi, pengalaman_kerja=pengalaman,
                                 riwayat_prestasi=prestasi, keahlian=keahlian)

                sukses = True

                return render(request, 'pages/user_ubah_cv.html', {'sukses': sukses, 'id_data': id_data})

            return render(request, 'pages/user_ubah_cv.html', {'user_cv': user_cv, 'id_data': id_data})

    return HttpResponseRedirect('home')


@login_required
def pembayaran(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            free_user = StatusUser.objects.filter(user_id=id_user).values_list('is_free', flat=True).first()
            premium_user = StatusUser.objects.filter(user_id=id_user).values_list('is_premium', flat=True).first()
            profile_user = ProfileUser.objects.filter(profile_user_id=id_user)

            if request.method == 'POST':

                pil_bayar = request.POST.get('pembayaran')
                durasi = request.POST.get('durasi')

                return redirect('zonaguruapps:invoice_pembayaran', durasi, pil_bayar)

            return render(request, 'pages/user_pembayaran_langganan.html', {'premium_user': premium_user,
                                                                            'status_user': status_user})

    return HttpResponseRedirect('home')


@login_required
def invoice_pembayaran(request, drs, pb):
	global no_rek
	user = request.user
	if user.is_authenticated:
		id_user = user.id
		status_user = StatusUser.objects.filter(user_id=id_user).first()
		
		if status_user:
			durasi = drs
			pilbayar = pb
			free_user = StatusUser.objects.filter(user_id=id_user).values_list('is_free', flat=True).first()
			premium_user = StatusUser.objects.filter(user_id=id_user).values_list('is_premium', flat=True).first()
			profile_user = ProfileUser.objects.filter(profile_user_id=id_user)

			tagihan = int(durasi) * 4800
			if pilbayar == 'mandiri':
				no_rek = '1330026566075'
			if pilbayar == 'bsi':
				no_rek = '7152611271'
			if pilbayar == 'jenius':
				no_rek = '90014829785'
			
			id_inv = get_random_string(6, '0123456789')
			nama_rek = 'Anton AR'

			return render(request, 'pages/user_invoice_pembayaran.html', {'premium_user': premium_user,
                                                                          'status_user': status_user,
                                                                          'durasi': durasi,
                                                                          'tagihan': tagihan,
                                                                          'pilbayar': pilbayar,
                                                                          'no_rek': no_rek,
                                                                          'id_inv': id_inv,
                                                                          'nama_rek': nama_rek})
	return HttpResponseRedirect('home')


@login_required
def invoice_pembayaran_pdf(request, inv, drs, tghn, nb, nr, an):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            biaya = tghn[:2] + "." + tghn[2:]

            context = {'kode_inv': inv, 'durasi': drs, 'biaya': biaya, 'namabank': nb,
                       'norek': nr, 'atasnama': an}

            html_string = render_to_string('pages/user_invoice_pembayaran_pdf.html', context)
            html = HTML(string=html_string)

            pdf = html.write_pdf(stylesheets=[CSS(string='body { font-family: helvetica !important }'),
                                              CSS(string='body { font-size: 12px !important }'),
                                              CSS(string='footer { visibility: hidden; }'),
                                              CSS("zonaguruapps/static/assets/vendor/bootstrap/css/bootstrap.css")])

            response = HttpResponse(pdf, content_type='application/pdf')
            response['Content-Disposition'] = 'attachment; filename = "invoice_pembayaran_zonaguru.pdf"'
            return response

    return HttpResponseRedirect('home')


@login_required
def konfirmasi_pembayaran(request):
    user = request.user
    if user.is_authenticated:
        id_user = user.id

        status_user = StatusUser.objects.filter(user_id=id_user).first()

        if status_user:

            premium_user = StatusUser.objects.filter(user_id=id_user).values_list('is_premium', flat=True).first()

            if request.method == 'POST':

                tgl_bayar = request.POST.get('tanggal')
                kode_inv = request.POST.get('kodeinv')
                namabank = request.POST.get('bank')
                no_rek = request.POST.get('norek')
                namarek = request.POST.get('namarek')

                simpan_konfirmasi = KonfirmasiPembayaran(nama_user_id=id_user, tanggal=tgl_bayar, kode_invoice=kode_inv,
                                                         nama_bank=namabank, nomor_rek=no_rek, nama_rek=namarek)
                simpan_konfirmasi.save()

                sukses = True
                return render(request, 'pages/user_konfirmasi_pembayaran.html', {'premium_user': premium_user,
                                                                                 'status_user': status_user,
                                                                                 'sukses': sukses})

            return render(request, 'pages/user_konfirmasi_pembayaran.html', {'premium_user': premium_user,
                                                                             'status_user': status_user})

    return HttpResponseRedirect('home')


def detail_blog(request, id, kg, tgl, jdl):
    list_blog = Blog.objects.all().exclude(id=id).order_by('-tanggal')
    detail_blog = Blog.objects.all().filter(kategori=kg, tanggal=tgl, judul=jdl)
    blog_artikel = Blog.objects.all().filter(kategori='Artikel').exclude(id=id).order_by('-tanggal')
    blog_informasi = Blog.objects.all().filter(kategori='Informasi').exclude(id=id).order_by('-tanggal')

    return render(request, 'blog/blog.html', {'list_blog': list_blog, 'detail_blog': detail_blog,
                                              'blog_artikel': blog_artikel, 'blog_informasi':blog_informasi})



"""
API VIEWSET
"""


class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all().order_by('username')
    serializer_class = UserSerializer
    permission_classes = (permissions.IsAuthenticated,)
    authentication_classes = (BasicAuthentication,)
    lookup_field = 'username'
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['first_name', 'id']

    def get_queryset(self):
        user = self.request.user
        if user.is_staff:
            return User.objects.all()
        return User.objects.filter(username=user)


class StatusUserViewSet(viewsets.ModelViewSet):
    queryset = StatusUser.objects.all().order_by('user')
    serializer_class = StatusUserSerializer
    permission_classes = (IsAuthenticated,)
    authentication_classes = (BasicAuthentication,)
    lookup_field = 'user__username'

    def get_queryset(self):
        user = self.request.user
        return StatusUser.objects.filter(user=user)


class ProfileUserViewSet(viewsets.ModelViewSet):
    queryset = ProfileUser.objects.all().order_by('profile_user')
    serializer_class = ProfileUserSerializer
    permission_classes = (IsAuthenticated,)
    authentication_classes = (BasicAuthentication,)
    lookup_field = 'profile_user__username'
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['profile_user']

    def put(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)


class DataSekolahUtamaViewSet(viewsets.ModelViewSet):
    queryset = DataSekolahUtama.objects.all().order_by('nama_user')
    serializer_class = DataSekolahUtamaSerializer
    permission_classes = (IsAuthenticated,)
    authentication_classes = (BasicAuthentication,)
    lookup_field = 'nama_user__username'
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['nama_user']

    def put(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)


class NamaSekolahViewSet(viewsets.ModelViewSet):
    queryset = NamaSekolah.objects.all().order_by('nama_user')
    serializer_class = NamaSekolahSerializer
    permission_classes = (IsAuthenticated,)
    authentication_classes = (BasicAuthentication,)
    lookup_field = 'nama_user__username'
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['nama_user']

    def get_queryset(self):
        user = self.request.user
        return NamaSekolah.objects.filter(nama_user=user)

    def put(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)


class KelasViewSet(viewsets.ModelViewSet):
    queryset = Kelas.objects.all().order_by('nama_user')
    serializer_class = KelasSerializer
    permission_classes = (IsAuthenticated,)
    authentication_classes = (BasicAuthentication,)
    lookup_field = 'nama_user__username'
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['nama_user']

    def get_queryset(self):
        user = self.request.user
        return Kelas.objects.filter(nama_user=user)

    def put(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)


class MapelViewSet(viewsets.ModelViewSet):
    queryset = Mapel.objects.all().order_by('nama_user')
    serializer_class = MapelSerializer
    permission_classes = (IsAuthenticated,)
    authentication_classes = (BasicAuthentication,)
    lookup_field = 'nama_user__username'
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['nama_user']

    def get_queryset(self):
        user = self.request.user
        return Mapel.objects.filter(nama_user=user)

    def put(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)


class EkskulViewSet(viewsets.ModelViewSet):
    queryset = Ekskul.objects.all().order_by('nama_user')
    serializer_class = EkskulSerializer
    permission_classes = (IsAuthenticated,)
    authentication_classes = (BasicAuthentication,)
    lookup_field = 'nama_user__username'
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['nama_user']

    def get_queryset(self):
        user = self.request.user
        return Ekskul.objects.filter(nama_user=user)

    def put(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)


class DataSiswaViewSet(viewsets.ModelViewSet):
    queryset = DataSiswa.objects.all().order_by('nama_user')
    serializer_class = DataSiswaSerializer
    permission_classes = (IsAuthenticated,)
    authentication_classes = (BasicAuthentication,)
    lookup_field = 'nama_user__username'
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['nama_user']

    def get_queryset(self):
        user = self.request.user
        return DataSiswa.objects.filter(nama_user=user)

    def put(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)


class JadwalKbmViewSet(viewsets.ModelViewSet):
    queryset = JadwalKbm.objects.all().order_by('nama_user')
    serializer_class = JadwalKbmSerializer
    permission_classes = (IsAuthenticated,)
    authentication_classes = (BasicAuthentication,)
    lookup_field = 'nama_user__username'
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['nama_user']

    def get_queryset(self):
        user = self.request.user
        return JadwalKbm.objects.filter(nama_user=user)

    def put(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)


class DataKbmViewSet(viewsets.ModelViewSet):
    queryset = DataKbm.objects.all().order_by('nama_user')
    serializer_class = DataKbmSerializer
    permission_classes = (IsAuthenticated,)
    authentication_classes = (BasicAuthentication,)
    lookup_field = 'nama_user__username'
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['nama_user']

    def get_queryset(self):
        user = self.request.user
        return DataKbm.objects.filter(nama_user=user)

    def put(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)


class NilaiKbmViewSet(viewsets.ModelViewSet):
    queryset = NilaiKbm.objects.all().order_by('nama_user')
    serializer_class = NilaiKbmSerializer
    permission_classes = (IsAuthenticated,)
    authentication_classes = (BasicAuthentication,)
    lookup_field = 'nama_user__username'
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['nama_user']

    def get_queryset(self):
        user = self.request.user
        return NilaiKbm.objects.filter(nama_user=user)

    def put(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)


class DataTahfizhViewSet(viewsets.ModelViewSet):
    queryset = DataTahfizh.objects.all().order_by('nama_user')
    serializer_class = DataTahfizhSerializer
    permission_classes = (IsAuthenticated,)
    authentication_classes = (BasicAuthentication,)
    lookup_field = 'nama_user__username'
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['nama_user']

    def get_queryset(self):
        user = self.request.user
        return DataTahfizh.objects.filter(nama_user=user)

    def put(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)


class DataEkskulViewSet(viewsets.ModelViewSet):
    queryset = DataEkskul.objects.all().order_by('nama_user')
    serializer_class = DataEkskulSerializer
    permission_classes = (IsAuthenticated,)
    authentication_classes = (BasicAuthentication,)
    lookup_field = 'nama_user__username'
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['nama_user']

    def get_queryset(self):
        user = self.request.user
        return DataEkskul.objects.filter(nama_user=user)

    def put(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)


class NilaiEkskulViewSet(viewsets.ModelViewSet):
    queryset = NilaiEkskul.objects.all().order_by('nama_user')
    serializer_class = NilaiEkskulSerializer
    permission_classes = (IsAuthenticated,)
    authentication_classes = (BasicAuthentication,)
    lookup_field = 'nama_user__username'
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['nama_user']

    def get_queryset(self):
        user = self.request.user
        return NilaiEkskul.objects.filter(nama_user=user)

    def put(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)


class MediaAjarViewSet(viewsets.ModelViewSet):
    queryset = MediaAjar.objects.all().order_by('id')
    serializer_class = MediaAjarSerializer
    permission_classes = (IsAuthenticated,)
    authentication_classes = (BasicAuthentication,)
    lookup_field = 'id'
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['judul_media', 'id', 'nama_user__username']
    http_method_names = ['get', 'post', 'patch', 'delete', 'head', 'options']

    def put(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)

    # PATCH Method Handler
    def perform_update(self, serializer):
        # Add tracking fields, inject user data, etc.
        serializer.save(updated_by=self.request.user)


class DataLokerViewSet(viewsets.ModelViewSet):
    queryset = DataLoker.objects.all().order_by('pemasang_loker')
    serializer_class = DataLokerSerializer
    permission_classes = (IsAuthenticated,)
    authentication_classes = (BasicAuthentication,)
    lookup_field = 'pemasang_loker__username'
    filter_backends = [DjangoFilterBackend, filters.SearchFilter]
    filterset_fields = ['id', 'judul_loker', 'kota']
    search_fields = ['judul_loker', 'kota']

    def put(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)


class DataPenawaranViewSet(viewsets.ModelViewSet):
    queryset = DataPenawaran.objects.all().order_by('nama_user')
    serializer_class = DataPenawaranSerializer
    permission_classes = (IsAuthenticated,)
    authentication_classes = (BasicAuthentication,)
    lookup_field = 'nama_user__username'
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['nama_user']

    def put(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)


class CatatanGuruViewSet(viewsets.ModelViewSet):
    queryset = CatatanGuru.objects.all().order_by('nama_user')
    serializer_class = CatatanGuruSerializer
    permission_classes = (IsAuthenticated,)
    authentication_classes = (BasicAuthentication,)
    lookup_field = 'nama_user__username'
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['nama_user']

    def get_queryset(self):
        user = self.request.user
        return CatatanGuru.objects.filter(nama_user=user)

    def put(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)


class KalendarKegiatanViewSet(viewsets.ModelViewSet):
    queryset = KalendarKegiatan.objects.all().order_by('nama_user')
    serializer_class = KalendarKegiatanSerializer
    permission_classes = (IsAuthenticated,)
    authentication_classes = (BasicAuthentication,)
    lookup_field = 'nama_user__username'
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['nama_user']

    def get_queryset(self):
        user = self.request.user
        return KalendarKegiatan.objects.filter(nama_user=user)

    def put(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)


class KonfirmasiPembayaranViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = KonfirmasiPembayaran.objects.all().order_by('nama_user')
    serializer_class = KonfirmasiPembayaranSerializer
    permission_classes = (IsAuthenticated,)
    authentication_classes = (BasicAuthentication,)
    lookup_field = 'nama_user__username'
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['nama_user']

    def get_queryset(self):
        user = self.request.user
        return KonfirmasiPembayaran.objects.filter(nama_user=user)


class BlogViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = Blog.objects.all().order_by('-tanggal')
    serializer_class = BlogSerializer
    permission_classes = (IsAuthenticated,)
    authentication_classes = (BasicAuthentication,)
    lookup_field = 'nama_user__username'
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['id']


class ImageSliderViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = ImageSlider.objects.all().order_by('nama_user')
    serializer_class = ImageSliderSerializer
    permission_classes = (IsAuthenticated,)
    authentication_classes = (BasicAuthentication,)
    lookup_field = 'nama_user__username'
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['nama_user']
