Exemple #1
0
    class BapFormListesi(ListNode):
        class Meta:
            title = __(u"BAP Form Listesi")

        key = fields.String("Key", hidden=True)
        sec = fields.Boolean(__(u"Projeye Dahil Et"), type="checkbox")
        ad = fields.String(__(u"Form Adı"), index=True)
        file = fields.File(
            __(u"File"), index=True, random_name=True
        )  # form eger PDF olarak yulendiyse bu alan kullanilir.
        gereklilik = fields.Boolean(__(u"Zorunluluk"),
                                    type="checkbox",
                                    required=False)
Exemple #2
0
    class IzinBasvuruForm(forms.JsonForm):

        """
        İzin Başvuru iş akışı için kullanılacak formdur.

        """

        izin_turleri = ((1, gettext_lazy("Yıllık İzin")),
                        (2, gettext_lazy("Mazeret İzni")),
                        (3, gettext_lazy("Refakat İzni")),
                        (4, gettext_lazy("Fazla Mesai İzni")),
                        (5, gettext_lazy("Ücretsiz İzin")),
        )
        gecerli_yil = date.today().year
        yillar = ((gecerli_yil, gecerli_yil),)

        izin_turu = fields.Integer(gettext_lazy(u"İzin Türü Seçiniz"), choices=izin_turleri)
        izin_ait_yil = fields.Integer(gettext_lazy(u"Ait Olduğu Yıl"), choices=yillar)
        izin_baslangic = fields.Date(gettext_lazy(u"İzin Başlangıç Tarihi"))
        izin_bitis = fields.Date(gettext_lazy(u"İzin Bitiş Tarihi"))
        izin_adres = fields.Text(gettext_lazy(u"İzindeki Adres"))
        personel_ad_soyad = fields.String(gettext_lazy(u"İzin Talep Eden"))
        personel_gorev = fields.String(gettext_lazy(u"Görevi"))
        personel_sicil_no = fields.String(gettext_lazy(u"Sicil no"))
        personel_birim = fields.String(gettext_lazy(u"Birimi"))
        yol_izni = fields.Boolean(gettext_lazy(u"Yol İzni"))
        toplam_izin_gun = fields.Integer(gettext_lazy(u"Kullanacağı İzin Süresi(Gün)"))
        toplam_kalan_izin = fields.Integer(gettext_lazy(u"Kalan İzin Süresi(Gün)"))

        ileri = fields.Button(gettext_lazy(u"İleri"))
Exemple #3
0
    class Kalem(ListNode):
        class Meta:
            title = __(u"Bütçe Kalemleri")

        sec = fields.Boolean(_(u"Seç"), type="checkbox")
        ad = fields.String(_(u"Tanımı/Adı"), readonly=True)
        adet = fields.Integer(_(u"Adet"), readonly=True)
        toplam_fiyat = fields.Float(_(u"Toplam Fiyat"), readonly=True)
        butce_plan_key = fields.String(_(u"Key"), hidden=True)
class SinavEtkinligi(Model):
    class Meta:
        verbose_name = _(u'Sınav Etkinliği')
        verbose_name_plural = _(u'Sınav Etkinlikleri')
        search_field = ['bolum', 'ders', 'sube', 'donem']

    sube = Sube(_(u'Şube'), index=True)
    ders = Ders(_(u'Ders'), index=True)
    donem = Donem(_(u'Dönem'), index=True)
    bolum = Unit(_(u'Bölüm'), index=True)
    unitime_key = fields.String(index=True)
    # default False, unitime solver tarafindan True yapilir.
    solved = fields.Boolean(_(u'Sınav Planı Çözüm Durumu'), index=True, default=False)

    # unitime cozumunun ardindan, is akisiyla sinav takvimi yayinlanip True yapilir.
    published = fields.Boolean(_(u'Sınav Planı Yayınlanma Durumu'), index=True, default=False)

    # sistem servisiyle sinavlarin ardindan True yapilir.
    archived = fields.Boolean(_(u'Arşivlenmiş'), default=False, index=True)

    tarih = fields.DateTime(_(u'Sınav Tarihi'), index=True)

    class SinavYerleri(ListNode):
        room = Room(_(u'Sınav Yeri'), index=True)

    @classmethod
    def sube_sinav_listesi(cls, sube, archived=False, donem=None):
        """
        Şubeye, döneme ve arşive göre sınav etkinliği listesi döndürür.

        """
        donem = donem or Donem.guncel_donem()
        return [e for e in cls.objects.filter(
            published=True,
            sube=sube,
            archived=archived,
            donem=donem
        ).order_by('-tarih')]

    def __unicode__(self):
        return '{} {} {}'.format(self.ders.ad, self.sube.ad, self.sinav_zamani())

    def sinav_zamani(self):
        return format_datetime(self.tarih) if self.tarih else _(u'Henüz zamanlanmadi')
class DersEtkinligi(Model):
    class Meta:
        verbose_name = _(u"Ders Etkinliği")
        verbose_name_plural = _(u"Ders Etkinlikleri")
        search_fields = ['unit_yoksis_no', 'room', 'okutman']

    solved = fields.Boolean(_(u'Ders Planı Çözüm Durumu'), index=True)
    unitime_key = fields.String(index=True)  # class id
    unit_yoksis_no = fields.Integer(_(u'Bölüm Yöksis Numarası'), index=True)
    room_type = RoomType(_(u'İşleneceği Oda Türü'), index=True)
    okutman = Okutman(_(u"Öğretim Elemanı"), index=True)
    sube = Sube(_(u'Şube'), index=True)
    donem = Donem(_(u'Dönem'), index=True)
    bolum = Unit(_(u'Bölüm'), index=True)
    published = fields.Boolean(_(u'Ders Planı Yayınlanma Durumu'), index=True)
    # Arama amaçlı
    ders = Ders(_(u'Ders'), index=True)
    ek_ders = fields.Boolean(index=True)
    sure = fields.Integer("Ders Etkinliği Süresi", index=True)

    # teori = field.Integer("Ders Teori Saati", index=True)
    # uygulama = field.Integer("Ders Uygulama Saati", index=True)
    # dersin süresinin ne kadarı teori ne kadarı uygulama gibi 2+2, 4+0 gibi

    # to be calculated
    room = Room(_(u'Derslik'))
    gun = fields.String(_(u"Gün"), choices=gun_listele)
    baslangic_saat = fields.String(_(u"Başlangıç Saati"))
    baslangic_dakika = fields.String(_(u"Başlangıç Dakikası"))
    bitis_saat = fields.String(_(u"Bitiş Saati"))
    bitis_dakika = fields.String(_(u"Bitiş Dakikası"))

    def post_creation(self):
        """Yeni bir DersEtkinligi oluşturulduğunda arama amaçlı olan
        alanları otomatik olarak doldurur."""
        self.ders = self.sube.ders
        self.save()

    def __unicode__(self):
        return '%s - %s - %s:%s|%s:%s - %s' % (
            self.room.name, self.gun, self.baslangic_saat, self.baslangic_dakika,
            self.bitis_saat, self.bitis_dakika, self.okutman)
Exemple #6
0
    class Personel(ListNode):
        key = fields.String("Key", hidden=True)
        sec = fields.Boolean(gettext_lazy(u"Seç"), type="checkbox")
        tckn = fields.String(gettext_lazy(u"TCK No"))
        ad_soyad = fields.String(gettext_lazy(u"Ad"))
        kadro_derece = fields.String(gettext_lazy(u"Kadro Derece"))

        #tn: Görev Aylığı
        gorev_ayligi = fields.String(gettext_lazy(u"GA"))
        #tn: Kazanılmış Hak
        kazanilmis_hak = fields.String(gettext_lazy(u"KH"))
        #tn: Emekli Muktesebat
        emekli_muktesebat = fields.String(gettext_lazy(u"EM"))

        # tn: Yeni Görev Aylığı
        yeni_gorev_ayligi = fields.String(gettext_lazy(u"Yeni GA"))
        #tn: Yeni Kazanılmış Hak
        yeni_kazanilmis_hak = fields.String(gettext_lazy(u"Yeni KH"))
        #tn: Yeni Emekli Muktesebat
        yeni_emekli_muktesebat = fields.String(gettext_lazy(u"Yeni EM"))
Exemple #7
0
 class Donemler(ListNode):
     secim = fields.Boolean(type="checkbox")
     donem = fields.String(gettext_lazy(u'Dönem'))
     key = fields.String('Key', hidden=True)
     aciklama = fields.String(gettext_lazy(u'Aciklama'))
Exemple #8
0
    def not_kontrol(self):
        """Okutmanların girmiş olduğu öğrenci notlarının listelenmesini
        sağlayan method.

        Bu method hem ``sinav_kontrol`` methodu hem de ``not_girisi``
        methodları üzerinden yapılan yönlendirmeleri karşılar. Eğer
        seçilen sınava ait notlar onaylanmış (teslim edilmiş) ise
        ``not_giris`` methoduna başlı olan not giriş adımı atlanarak bu
        adıma yönlendirme yapılmaktadır. Bu durumda notlar, veritabanı
        üzerinden alınarak listelenirken, ``not_girisi`` adımından gelen
        yönlendirmelerde form ile birlikte gönderilen veriler
        listelenmektedir.

        ``sinav_kontrol`` methodu ile yapılan yönlendirmelerde notlar
        üzerinde herhangi bir güncelleme, değişiklik yapılamayacağı için
        bu operasyonlara ait form düğmeleri gösterilmemekte ve okutmana
        bu dersler üzerinde bir değişiklik yapamayacağını bildiren bir
        mesaj kutusu gösterilmektedir.

        """

        _form = forms.JsonForm(current=self.current,
                               title=_(u"Not Önizleme Ekranı"))

        try:  # Eğer istek sinav_kontrol aşamasından yönlendirilmemişse öğrenci notları için formdan gelen veriyi kullan
            ogrenci_notlar = self.current.input['form']['Ogrenciler']
            self.current.task_data["notlar"] = ogrenci_notlar

            notlar = []
            for ogr in ogrenci_notlar:
                ogrnot = OrderedDict({})
                ogrnot[_(u'Öğrenci No')] = ogr['ogrenci_no']
                ogrnot[_(u'Adı Soyadı')] = ogr['ad_soyad']
                ogrnot[_(u'Değerlendirme')] = ogr['degerlendirme']
                ogrnot[_(u'Açıklama')] = ogr['aciklama']
                notlar.append(ogrnot)

        except:  # Eğer istek sinav_kontrol aşamasından yönlendirilmişse notlar için veritabanı kayıtlarını kullan
            sinav_key = self.current.task_data['sinav_key']
            sube_key = self.current.task_data["sube"]
            sinav = Sinav.objects.get(sinav_key)
            ogrenciler = OgrenciDersi.objects.filter(sube_id=sube_key)
            notlar = []

            for ogr in ogrenciler:
                try:  # Öğrencinin bu sınava ait daha önceden kayıtlı notu var mı?
                    degerlendirme = DegerlendirmeNot.objects.get(
                        sinav=sinav, ogrenci=ogr.ogrenci_program.ogrenci)
                    puan = degerlendirme.puan
                    aciklama = degerlendirme.aciklama
                except:
                    puan = 0
                    aciklama = ""

                ogrnot = OrderedDict({})
                ogrnot[_(u'Öğrenci No')] = ogr.ogrenci_program.ogrenci_no
                ogrnot[_(u'Adı Soyadı')] = '%s %s' % (
                    ogr.ogrenci_program.ogrenci.ad,
                    ogr.ogrenci_program.ogrenci.soyad)
                ogrnot[_(u'Değerlendirme')] = puan
                ogrnot[_(u'Açıklama')] = aciklama
                notlar.append(ogrnot)

        # Eğer notlar okutman tarından onaylanmışsa (teslim edilmişse) uyarı göster
        if self.current.task_data['sinav_degerlendirme']:
            self.current.output['msgbox'] = {
                'type':
                'info',
                "title":
                _(u'Notlar Onaylandı'),
                "msg":
                _(u'Bu derse ait notlar onaylanmış olduğu için içeriği değiştirilemez.'
                  )
            }
            _form.ders_secim = fields.Button(_(u"Ders Seçim Ekranına Dön"),
                                             cmd="ders_sec",
                                             flow="ders_secim_adimina_don")
            _form.sinav_secim = fields.Button(_(u"Sınav Seçim Ekranına Dön"),
                                              cmd="sinav_sec",
                                              flow="sinav_secim_adimina_don")

        else:  # Eğer notlar hala onaylanmamışsa (teslim edilmemişse) form düğmelerini göster

            _form.not_onay = fields.Boolean(
                _(u"Sınav Notlarını Onaylıyorum (Bu işlem geri alınamaz!)"))
            _form.not_duzenle = fields.Button(_(u"Notları Düzenle"),
                                              cmd="not_girisi",
                                              flow="not_giris_formuna_don")
            _form.kaydet = fields.Button(_(u"Kaydet"),
                                         cmd="not_kaydet",
                                         flow="end")
            _form.kaydet_ve_ders_sec = fields.Button(
                _(u"Kaydet ve Ders Seçim Ekranına Dön"),
                cmd="ders_sec",
                flow="ders_adimina_don")
            _form.kaydet_ve_sinav_sec = fields.Button(
                _(u"Kaydet ve Sınav Seçim Ekranına Dön"),
                cmd="sinav_sec",
                flow="sinav_adimina_don")

        self.current.output['object'] = {
            "type": "table-multiRow",
            "fields": notlar,
            "actions": False
        }
        self.form_out(_form)
class SinavEtkinligi(Model):
    class Meta:
        verbose_name = _(u'Sınav Etkinliği')
        verbose_name_plural = _(u'Sınav Etkinlikleri')
        search_field = ['bolum', 'ders', 'sube', 'donem']

    sube = Sube(_(u'Şube'), index=True)
    ders = Ders(_(u'Ders'), index=True)
    donem = Donem(_(u'Dönem'), index=True)
    bolum = Unit(_(u'Bölüm'), index=True)
    unitime_key = fields.String(index=True)
    # default False, unitime solver tarafindan True yapilir.
    solved = fields.Boolean(_(u'Sınav Planı Çözüm Durumu'), index=True, default=False)

    # unitime cozumunun ardindan, is akisiyla sinav takvimi yayinlanip True yapilir.
    published = fields.Boolean(_(u'Sınav Planı Yayınlanma Durumu'), index=True, default=False)

    # sistem servisiyle sinavlarin ardindan True yapilir.
    archived = fields.Boolean(_(u'Arşivlenmiş'), default=False, index=True)

    tarih = fields.DateTime(_(u'Sınav Tarihi'), index=True)

    class SinavYerleri(ListNode):
        room = Room(_(u'Sınav Yeri'), index=True)

    class Ogrenciler(ListNode):
        ogrenci = Ogrenci(_(u'Öğrenci'))
        room = Room(_(u'Sınav Yeri'), index=True)

    @classmethod
    def aktif_bolum_sinav_etkinlik_listesi(cls, donem, bolum):
        """
        Verilen bölümün aktif yayınlanmış sınav etkinliklerinin
        listesini döndürür.

        """
        return [e for e in
                cls.objects.filter(published=True, archived=False, donem=donem, bolum=bolum)]

    def sinav_ogrenci_listesi(self):
        """
        Verilen sınav etkinliğine katılacak olan öğrencilerin
        listesini döndürür.

        """
        return [e.ogrenci for e in self.Ogrenciler]

    def doluluk_orani_hesapla(self):
        """
        Bir sınav etkinliğine kayıtlı olan öğrencilerin sayısı ile
        etkinliğin yapılacak sınav yerlerinin toplam kontenjan sayısının
        birbirine bölünmesi ile elde edilen oranı döndürür. Bu oran öğrencileri
        odalara dengeli şekilde dağıtmak için kullanılacaktır.

        """
        toplam_kontenjan = sum([e.room.capacity for e in self.SinavYerleri])
        doluluk_orani = len(self.Ogrenciler) / float(toplam_kontenjan)

        return doluluk_orani

    def ogrencileri_odalara_dagit(self, doluluk_orani):
        """
        Öğrencileri sınavın yapılacağı odalara doluluk oranını
        göz önüne alarak dengeli bir şekilde dağıtır.

        """
        from math import ceil
        random.shuffle(self.Ogrenciler)
        j = 0
        for sinav_yeri in self.SinavYerleri:
            temp = j + int(ceil(sinav_yeri.room.capacity * doluluk_orani))
            i = j
            j = temp
            for ogrenci in self.Ogrenciler[i:j]:
                ogrenci.room = sinav_yeri.room

        self.save()

    @classmethod
    def ogrencileri_odalara_rastgele_ata(cls, bolum):
        """
        Bir bölümün yayınlanmış sınav programındaki her bir sınav etkinliğine
        katılacak olan öğrencileri, sınavın yapılabilineceği odalara rastgele
        atar, bu atamayı yaparken kontenjan sınırını aşmamasına dikkat edilir.

        """
        donem = Donem.guncel_donem()
        aktif_sinav_etkinlikleri = cls.aktif_bolum_sinav_etkinlik_listesi(donem, bolum)
        for etkinlik in aktif_sinav_etkinlikleri:
            doluluk_orani = etkinlik.doluluk_orani_hesapla()
            etkinlik.ogrencileri_odalara_dagit(doluluk_orani)

    def ogrenci_sinav_oda_getir(self, ogrenci):
        """
        Verilen öğrencinin sınava gireceği oda bilgisini döndürür.

        """
        for ogrenci_oda in self.Ogrenciler:
            if ogrenci_oda.ogrenci == ogrenci:
                break

        return ogrenci_oda.room

    @classmethod
    def sube_sinav_listesi(cls, sube, archived=False, donem=None):
        """
        Şubeye, döneme ve arşive göre sınav etkinliği listesi döndürür.

        """
        donem = donem or Donem.guncel_donem()
        return [e for e in cls.objects.filter(
            published=True,
            sube=sube,
            archived=archived,
            donem=donem
        ).order_by('-tarih')]

    def __unicode__(self):
        return '{} {} {}'.format(self.ders.ad, self.sube.ad, self.sinav_zamani())

    def sinav_zamani(self):
        return format_datetime(self.tarih) if self.tarih else _(u'Henüz zamanlanmadi')
Exemple #10
0
 class OkutmanListesi(ListNode):
     secim = fields.Boolean(gettext_lazy(u"Seçim"), type="checkbox")
     okutman = fields.String(gettext_lazy(u'Okutman'))
     key = fields.String(hidden=True)
Exemple #11
0
 class Okutmanlar(ListNode):
     secim = fields.Boolean(gettext_lazy(u'Seçim'), type="checkbox")
     ad_soyad = fields.String(gettext_lazy(u'Ad Soyad'))
     key = fields.String(gettext_lazy(u'Key'), hidden=True)
Exemple #12
0
 class Kalemler(ListNode):
     sec = fields.Boolean(__(u"Seç"), type="checkbox", default=False)
     kalem = fields.String(__(u"Kalem"))
     kalem_key = fields.String(__(u"Kalem Key"), hidden=True)
 class OkutmanListesi(ListNode):
     secim = fields.Boolean(_(u"Seçim"), type="checkbox")
     okutman = fields.String(_(u'Okutman'), index=True)
     key = fields.String(hidden=True)