def yeni_donem(ad, baslangic, bitis):
     d = Donem(
         ad='%s - %s' % (ad, baslangic.split('.')[2]),
         baslangic=baslangic,
         bitis=bitis
     )
     d.save()
Beispiel #2
0
 def sinav_yayinla(self):
     se = SinavEtkinligi.objects.filter(bolum=self.current.role.unit,
                                        donem=Donem.guncel_donem(
                                            self.current))
     for s in se:
         s.published = True
         s.save()
Beispiel #3
0
 def ders_yayinla(self):
     de = DersEtkinligi.objects.filter(bolum=self.current.role.unit,
                                       donem=Donem.guncel_donem(
                                           self.current))
     for d in de:
         d.published = True
         d.save()
    def sinav_etkinliklerini_kontrol_et(self):
        """
        Yayınlanmış sınav etkinlikleri var mı yok mu diye kontrol eder.

        """
        sinav_etkinlikleri = SinavEtkinligi.objects.filter(published=True, donem=Donem.guncel_donem(),
                                                           bolum=self.current.role.unit)
        self.current.task_data['yayinlanmamis_sinav_sayisi'] = len(sinav_etkinlikleri)
    def test_danisman_atama(self):
        """
        Danışmanı atanamayan öğrenciler öğrenci işleri tarafından atılır.
        Danışman atama iş akışının ilk adımında öğrenci programı seçilir.

        Seçilen öğrenciye ait veritabanından dönen öğrenci programı sayısı ile
        sunucudan dönen öğrenci program sayısının eşitliği karşılaştırılıp test edilir.

        İkinci adımında ise atanacak danışman seçilir.

        Veritabanından dönen danışmanların sayısı ile sunucudan dönen danışmaların sayısının
        eşitliği karşılaştırılıp test edilir.

        Üçüncü adımında ise danışman kaydedilir.

        Mesaj kutusunda danışman ataması yapılan öğrencinin ad ve soyad bilgilerinin olup
        olmadığı test edilir.

        """

        # Kullanıcıya login yaptırılır.
        self.prepare_client('/danisman_atama', username='******')

        resp = self.client.post(id="RnKyAoVDT9Hc89KEZecz0kSRXRF",
                                model="OgrenciProgram",
                                param="ogrenci_id",
                                wf="danisman_atama",
                                filters={'ogrenci_id': {'values': ["KhFizqvCaZGtTloAZoPH1Uy98Pw"],
                                                        'type': "check"}})

        # Öğrenciye ait programlar db'den seçilir.
        op = OgrenciProgram.objects.filter(ogrenci_id='RnKyAoVDT9Hc89KEZecz0kSRXRF')

        # Veritabanından öğrenciye ait  çekilen program sayısı ile sunucudan dönen program sayısının
        # eşitliği karşılaştırılıp test edilir.
        assert len(resp.json['forms']['form'][2]['titleMap']) == len(op)

        # Öğrenci programı seçilir.
        resp = self.client.post(model='OgrenciProgram',
                                form={'program': "UEGET7qn9CDj9VEj4n0nbQ7m89d", 'sec': 1})

        guncel_donem = Donem.guncel_donem()
        # Öğrencinin kayıtlı olduğu öğrenci programlarından biri seçilir.
        program = op[0]
        # Döneme ve birime kayıtlı olan danışmanların listesini tutar.
        donem_danisman = DonemDanisman.objects.filter(donem=guncel_donem,
                                                      bolum=program.program.birim)

        # Veritabanından dönen dönem danışmanların sayısı ile sunucudan dönen dönem  danışmanlarının
        # sayısının eşitliğini karşılaştırıp test eder.
        assert len(donem_danisman) == len(resp.json['forms']['form'][2]['titleMap'])

        # Danışman seçilir.
        resp = self.client.post(model='OgrenciProgram',
                                form={'donem_danisman': 'Js2goP48yA183oMDAN8uM5GOExM', 'sec': 1})

        ogrenci = Ogrenci.objects.get('RnKyAoVDT9Hc89KEZecz0kSRXRF')
        assert ogrenci.ad + ' ' + ogrenci.soyad in resp.json['msgbox']['msg']
    def ders_etkinliklerini_kontrol_et(self):
        """
        Yayınlanmış ders etkinlikleri var mı yok mu diye kontrol eder.

        """
        length = len(DersEtkinligi.objects.filter(published=True,
                                                  donem=Donem.guncel_donem(self.current),
                                                  bolum=self.current.role.unit))
        self.current.task_data['yayinlanmamis_ders_sayisi'] = length
    def ders_etkinliklerini_kontrol_et(self):
        """
        Yayınlanmış ders etkinlikleri var mı yok mu diye kontrol eder.

        """
        length = len(DersEtkinligi.objects.filter(published=True,
                                                  donem=Donem.guncel_donem(),
                                                  bolum=self.current.role.unit))
        self.current.task_data['yayinlanmamis_ders_sayisi'] = length
Beispiel #8
0
    def sinav_etkinliklerini_kontrol_et(self):
        """
        Yayınlanmış sınav etkinlikleri var mı yok mu diye kontrol eder.

        """
        sinav_etkinlikleri = SinavEtkinligi.objects.filter(published=True,
                                                           donem=Donem.guncel_donem(self.current),
                                                           bolum=self.current.role.unit)
        self.current.task_data['yayinlanmamis_sinav_sayisi'] = len(sinav_etkinlikleri)
Beispiel #9
0
    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)
Beispiel #10
0
    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 derslik_sec(self):
        """
        Derslikler listelenir.

        """
        _form = DerslikSecimFormu(title=_(u'Derslik Seçiniz'), current=self.current)
        ders_etkinlikleri = DersEtkinligi.objects.filter(published=True,
                                                         donem=Donem.guncel_donem(self.current),
                                                         bolum=self.current.role.unit)
        _choices = [(_etkinlik.room.key, _etkinlik.room.__unicode__())
                    for _etkinlik in ders_etkinlikleri]
        _form.derslik = fields.Integer(choices=_choices)
        self.form_out(_form)
    def derslik_sec(self):
        """
        Derslikler listelenir.

        """
        _form = DerslikSecimFormu(title=_(u'Derslik Seçiniz'), current=self.current)
        ders_etkinlikleri = DersEtkinligi.objects.filter(published=True,
                                                         donem=Donem.guncel_donem(),
                                                         bolum=self.current.role.unit)
        _choices = [(_etkinlik.room.key, _etkinlik.room.__unicode__())
                    for _etkinlik in ders_etkinlikleri]
        _form.derslik = fields.Integer(choices=_choices)
        self.form_out(_form)
    def test_guncel_donem_degistirme(self):
        """
        Güncel Dönem Değiştirme iş akışında güncel dönem seçilir,
        kaydedilir, bilgi verilir.
        Seçilen dönemin güncel dönem olarak kaydedilip kaydedilmediği test edilir.
        Sunucudan dönen cevapta msgboz olup olmadığı test edilir.

        Testte üretilen dataların diğer testleri kırmaması için değişiklikler geri alınır.

        """

        # ögrenci_isleri_1 kullanıcısı seçilir.
        user = User.objects.get(username='******')

        # guncel_donem_degistirme iş akışı başlatılır.
        self.prepare_client('/guncel_donem_degistirme', user=user)
        self.client.post()

        ilk_guncel_donem = Donem.guncel_donem()

        # Seçilen dönem
        secilen_guncel_donem_key = 'SBx09BKCv86hp53HGVT2i7vBxGN'

        # Yeni dönem seçilir ve kaydedilir.
        resp = self.client.post(form={'guncel_donem': secilen_guncel_donem_key, 'kaydet': 1})
        time.sleep(1)

        # Güncel dönem olarak kaydedilip kaydedilmediği test edilir.
        assert Donem.guncel_donem().key == secilen_guncel_donem_key

        assert 'msgbox' in resp.json

        yeni_guncel_donem = Donem.guncel_donem()
        yeni_guncel_donem.guncel = False
        yeni_guncel_donem.save()
        yeni_guncel_donem.ogretim_yili.delete()
        ilk_guncel_donem.guncel = True
        ilk_guncel_donem.save()
    def guncel_donem_sec(self):
        """
        SelectBox içinde gelen dönemler bir güncel dönem olarak seçilir.
        SelectBox içindeki dönemler, güncel dönemden önceki 2 dönem, güncel
        dönemden sonraki iki dönem  ve güncel dönem sıralanır.

        """

        _form = DonemSecForm(title=_(u"Güncel Dönem Seçiniz"), current=self.current)

        # formun güncel dönemi seçili hale getirilir.
        _form.guncel_donem = Donem.guncel_donem().key

        self.form_out(_form)
    def derslik_sec(self):
        """
        Derslik Seçilir.

        """
        _form = DerslikSecimFormu(title=_(u"Derslik Seçiniz"), current=self.current)
        _choices = []
        for s_etkinlik in SinavEtkinligi.objects.filter(published=True, donem=Donem.guncel_donem(),
                                                        bolum=self.current.role.unit):
            for s_yerleri in s_etkinlik.SinavYerleri:
                if s_etkinlik.SinavYerleri:
                    _choices.append((s_yerleri.room.key, s_yerleri.room.__unicode__()))
        _form.derslik = fields.Integer(choices=_choices)
        self.form_out(_form)
Beispiel #16
0
    def guncel_donem_sec(self):
        """
        SelectBox içinde gelen dönemler bir güncel dönem olarak seçilir.
        SelectBox içindeki dönemler, güncel dönemden önceki 2 dönem, güncel
        dönemden sonraki iki dönem  ve güncel dönem sıralanır.

        """

        _form = DonemSecForm(title=_(u'Güncel Dönem Seçiniz'),
                             current=self.current)

        # formun güncel dönemi seçili hale getirilir.
        _form.guncel_donem = Donem.guncel_donem().key

        self.form_out(_form)
Beispiel #17
0
    def derslik_sec(self):
        """
        Derslik Seçilir.

        """
        _form = DerslikSecimFormu(title=_(u"Derslik Seçiniz"), current=self.current)
        _choices = []
        for s_etkinlik in SinavEtkinligi.objects.filter(published=True,
                                                        donem=Donem.guncel_donem(self.current),
                                                        bolum=self.current.role.unit):
            for s_yerleri in s_etkinlik.SinavYerleri:
                if s_etkinlik.SinavYerleri:
                    _choices.append((s_yerleri.room.key, s_yerleri.room.__unicode__()))
        _form.derslik = fields.Integer(choices=_choices)
        self.form_out(_form)
Beispiel #18
0
def donemler():
    """
    Dönem seçim formunu dinamik olarak dolduran method.
    Güncel dönemden önceki ve sonraki 2 şer adet dönemle birlikte bir seçim
    listesi oluşturur.
    """
    ds = []  # return list
    td = []  # tum donemler, onceki guncel ve sonrakilerden liste
    gd = Donem.guncel_donem()
    td.extend(gd.onceki_donemler(2))
    td.append(gd)
    td.extend(gd.sonraki_donemler(2))
    for donem in td:
        ds.append(convert_model_object_titlemap_item(donem))
    return ds
def donemler():
    """
    Dönem seçim formunu dinamik olarak dolduran method.
    Güncel dönemden önceki ve sonraki 2 şer adet dönemle birlikte bir seçim
    listesi oluşturur.
    """
    ds = []  # return list
    td = []  # tum donemler, onceki guncel ve sonrakilerden liste
    gd = Donem.guncel_donem()
    td.extend(gd.onceki_donemler(2))
    td.append(gd)
    td.extend(gd.sonraki_donemler(2))
    for donem in td:
        ds.append(convert_model_object_titlemap_item(donem))
    return ds
Beispiel #20
0
class DerslikSinavPlani(Model):
    class META:
        verbose_name = _(u'Derslik Sınav Planı')
        verbose_name_plural = _(u'Derslik Sınav Planları')
        unique_together = [('derslik', 'zaman_dilimi', 'birim', 'gun')]
        search_fields = ['derslik', 'birim', 'zaman_dilimi', 'gun', 'durum']

    derslik = Room(_(u'Derslik'))
    birim = Unit(_(u'Bölüm'))
    donem = Donem(_(u'Güncel Dönem'))
    zaman_dilimi = SinavZamanDilimi(_(u'Sınav Zaman Dilimi'))
    durum = field.Integer(_(u"Uygunluk Durumu"), choices=uygunluk_durumu_listele(), default=1, index=True)
    gun = field.Integer(_(u"Gün"), choices=HAFTA)

    def __unicode__(self):
        return '{}/{}/{}'.format(dict(HAFTA)[self.gun], self.zaman_dilimi,
                                 dict(uygunluk_durumu_listele())[self.durum])
    def sinav_programi_goruntule(self):
        """
        Öğretim Görevlisi kendi şubelerine ait sinav
        programını görüntüleyebilir.

        """

        sinav_etkinlikleri = self.current.task_data['sinav_etkinlikleri']

        self.output['objects'] = [list(get_day_names().values())]
        hafta = dict(HAFTA)

        # Öğretim görevlisinin bir günde maksimum kaç tane sınavı olduğu bulunur
        # ve bu bilgi kadar dönülür.
        max_etkinlik = max(map(len, sinav_etkinlikleri.values()))

        for i in range(max_etkinlik):
            sinav_etkinlik_list = OrderedDict({})

            # eğer haftanın günü(1,2..) öğretim görevlisinin sınavı varsa
            for hafta_gun in hafta.keys():
                if hafta_gun in sinav_etkinlikleri:
                    try:
                        etkinlik = sinav_etkinlikleri[hafta_gun][i]
                        sinav_etkinlik_list[hafta[hafta_gun]] = etkinlik
                    except IndexError:
                        sinav_etkinlik_list[hafta[hafta_gun]] = ''

                else:
                    sinav_etkinlik_list[hafta[hafta_gun]] = ''

            item = {
                "type": "table-multiRow",
                "fields": sinav_etkinlik_list,
                "actions": False,
                'key': ''
            }
            self.output['objects'].append(item)

        _form = JsonForm(current=self.current)
        _form.title = _(u"%(ad)s / %(donem)s / Yarıyıl Sınav Programı") % \
                      {'ad': self.current.task_data['user_ad'],
                       'donem': Donem.guncel_donem(self.current).ad}

        self.form_out(_form)
Beispiel #22
0
    def calculate(self, obj):
        """

        Args:
            obj: Ders veya Sınav etkinliği modeli

        Returns: model_object.count() >> bölüm ve güncel doneme ait model sayısı,
                 solved_count >> çözülen model sayısı,
                 published_count >> yayınlanan model sayısı

        """
        model_object = obj.objects.filter(bolum=self.current.role.unit, donem=Donem.guncel_donem())

        solved_count = model_object.filter(solved=True).count()

        published_count = model_object.filter(published=True).count()

        return model_object.count(), solved_count, published_count
    def donem_formu_olustur(self):
        """
        Güz ve Bahar Dönemi Formu oluşturulur.

        """

        _form = DonemForm(current=self.current, title=_(u'Güz ve Bahar Dönemi'))

        son_donem = Donem.son_donem()

        _form.help_text = _(u"""Kayıtlardaki en son donem {donem}
        Başlangıç Tarihi: {baslangic},
        Bitiş Tarihi: {bitis}
        """).format(donem=son_donem.ad,
                    baslangic=format_date(son_donem.baslangic_tarihi),
                    bitis=format_date(son_donem.bitis_tarihi))

        self.form_out(_form)
    def sinav_programi_goruntule(self):
        """
        Öğretim Görevlisi kendi şubelerine ait sinav
        programını görüntüleyebilir.

        """

        sinav_etkinlikleri = self.current.task_data['sinav_etkinlikleri']

        self.output['objects'] = [list(get_day_names().values())]
        hafta = dict(HAFTA)

        # Öğretim görevlisinin bir günde maksimum kaç tane sınavı olduğu bulunur
        # ve bu bilgi kadar dönülür.
        max_etkinlik = max(map(len, sinav_etkinlikleri.values()))

        for i in range(max_etkinlik):
            sinav_etkinlik_list = OrderedDict({})

            # eğer haftanın günü(1,2..) öğretim görevlisinin sınavı varsa
            for hafta_gun in hafta.keys():
                if hafta_gun in sinav_etkinlikleri:
                    try:
                        etkinlik = sinav_etkinlikleri[hafta_gun][i]
                        sinav_etkinlik_list[hafta[hafta_gun]] = etkinlik
                    except IndexError:
                        sinav_etkinlik_list[hafta[hafta_gun]] = ''

                else:
                    sinav_etkinlik_list[hafta[hafta_gun]] = ''

            item = {
                "type": "table-multiRow",
                "fields": sinav_etkinlik_list,
                "actions": False,
                'key': ''
            }
            self.output['objects'].append(item)

        _form = JsonForm(current=self.current)
        _form.title = _(u"%(ad)s / %(donem)s / Yarıyıl Sınav Programı") % \
                      {'ad': self.current.task_data['user_ad'], 'donem': Donem.guncel_donem().ad}

        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)

    @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')
Beispiel #26
0
    def donem_formu_olustur(self):
        """
        Güz ve Bahar Dönemi Formu oluşturulur.

        """

        _form = DonemForm(current=self.current,
                          title=_(u'Güz ve Bahar Dönemi'))

        son_donem = Donem.son_donem()

        _form.help_text = _(u"""Kayıtlardaki en son donem {donem}
        Başlangıç Tarihi: {baslangic},
        Bitiş Tarihi: {bitis}
        """).format(donem=son_donem.ad,
                    baslangic=format_date(son_donem.baslangic_tarihi),
                    bitis=format_date(son_donem.bitis_tarihi))

        self.form_out(_form)
Beispiel #27
0
    def sinav_detay_goster(self):
        obj_key = self.current.task_data['data_key']
        if self.input['form']['arama_sec'] == 1:
            sinav_etkinligi = SinavEtkinligi.objects.raw(
                "sinav_yerleri.room_id:" + obj_key)
            obj = Room.objects.get(obj_key)

        else:
            sinav_etkinligi = map(
                lambda s: SinavEtkinligi.objects.get(sube=s),
                Sube.objects.filter(okutman_id=obj_key,
                                    donem=Donem.guncel_donem()))
            obj = Okutman.objects.get(obj_key)

        days = [
            _(u"Pazartesi"),
            _(u"Salı"),
            _(u"Çarşamba"),
            _(u"Perşembe"),
            _(u"Cuma"),
            _(u"Cumartesi"),
            _(u"Pazar")
        ]

        self.output['objects'] = [days]

        def etkinlik(de):
            """
            Ders etkinligi formatlar ve dondurur.

            :param de: ders etkinligi
            :return: ders adi ve zamani
            """
            aralik = format_datetime(de.tarih)
            return "\n\n**%s**\n%s\n\n" % (aralik, de.ders.ad)

        data_list = []
        for i, day in enumerate(days):
            data_list.append(''.join([
                "%s" % etkinlik(de) for de in filter(
                    lambda d: d.tarih.isoweekday() == i + 1, sinav_etkinligi)
            ]))
        self.detay_goster(data_list, obj)
Beispiel #28
0
    def calculate(self, obj):
        """

        Args:
            obj: Ders veya Sınav etkinliği modeli

        Returns: model_object.count() >> bölüm ve güncel doneme ait model sayısı,
                 solved_count >> çözülen model sayısı,
                 published_count >> yayınlanan model sayısı

        """
        model_object = obj.objects.filter(bolum=self.current.role.unit,
                                          donem=Donem.guncel_donem())

        solved_count = model_object.filter(solved=True).count()

        published_count = model_object.filter(published=True).count()

        return model_object.count(), solved_count, published_count
Beispiel #29
0
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)
    def derslik_ders_programini_goster(self):
        """
        Seçilen dersliğe ait ders programlarını ekrana basar.

        """
        room = Room.objects.get(self.current.input['form']['derslik'])
        hafta = dict(HAFTA)
        self.output['objects'] = [hafta]
        d_etkinlikleri = DersEtkinligi.objects.filter(room=room,
                                                      published=True,
                                                      donem=Donem.guncel_donem(self.current))
        ders_etkinlikleri = map_etkinlik_hafta_gunleri(
            d_etkinlikleri.order_by(
                'gun', 'baslangic_saat',
                'bitis_saat','baslangic_dakika', 'bitis_dakika'))
        # Bir güne ait maximum etkinlik sayısı.
        max_etkinlik = max(map(len, ders_etkinlikleri.values()))
        for i in range(max_etkinlik):
            ders_etkinlikleri_dict = OrderedDict({})
            for hafta_gun in hafta.keys():
                if hafta_gun in ders_etkinlikleri:
                    try:
                        etkinlik = ders_etkinlikleri[hafta_gun][i]
                        ders_etkinlikleri_dict[hafta[hafta_gun]] = etkinlik
                    except IndexError:
                        ders_etkinlikleri_dict[hafta[hafta_gun]] = ""
                else:
                    ders_etkinlikleri_dict[hafta[hafta_gun]] = ""
            item = {
                "type": "table-multiRow",
                "fields": ders_etkinlikleri_dict,
                "actions": False,
                'key': ''
            }
            self.output['objects'].append(item)

        _form = JsonForm(title=_(u"%s Dersliğine Ait Ders Programları") % room.__unicode__())
        _form.yazdir = fields.Button(_(u'Pdf yazdır'))
        self.form_out(_form)
        self.current.output["meta"]["allow_actions"] = False
    def derslik_ders_programini_goster(self):
        """
        Seçilen dersliğe ait ders programlarını ekrana basar.

        """
        room = Room.objects.get(self.current.input['form']['derslik'])
        hafta = dict(HAFTA)
        self.output['objects'] = [hafta]
        d_etkinlikleri = DersEtkinligi.objects.filter(room=room,
                                                      published=True,
                                                      donem=Donem.guncel_donem())
        ders_etkinlikleri = map_etkinlik_hafta_gunleri(
            d_etkinlikleri.order_by(
                'gun', 'baslangic_saat',
                'bitis_saat','baslangic_dakika', 'bitis_dakika'))
        # Bir güne ait maximum etkinlik sayısı.
        max_etkinlik = max(map(len, ders_etkinlikleri.values()))
        for i in range(max_etkinlik):
            ders_etkinlikleri_dict = OrderedDict({})
            for hafta_gun in hafta.keys():
                if hafta_gun in ders_etkinlikleri:
                    try:
                        etkinlik = ders_etkinlikleri[hafta_gun][i]
                        ders_etkinlikleri_dict[hafta[hafta_gun]] = etkinlik
                    except IndexError:
                        ders_etkinlikleri_dict[hafta[hafta_gun]] = ""
                else:
                    ders_etkinlikleri_dict[hafta[hafta_gun]] = ""
            item = {
                "type": "table-multiRow",
                "fields": ders_etkinlikleri_dict,
                "actions": False,
                'key': ''
            }
            self.output['objects'].append(item)

        _form = JsonForm(title=_(u"%s Dersliğine Ait Ders Programları") % room.__unicode__())
        _form.yazdir = fields.Button(_(u'Pdf yazdır'))
        self.form_out(_form)
        self.current.output["meta"]["allow_actions"] = False
    def test_donem_danismanlari(self):
        """
        Dönem danışmanları iş akışı başlattıktan sonra;

        Sunucudan dönen bölüme ait dönem danışmanlarının sayısı ile
        veritabanından çekilen dönem danışmanlarının sayısı
        karşılaştırılıp test edilir.

        İş akışının ikinci adımında seçilen danışmanlar kaydedilir.

        Seçilen danışmanlarının  veritabanına kaydedilip edilmediğini kontrol edilir ve
        seçilenen danışmanlar kaydedildikten sonra, sunucudan dönen cevapta danışman
        kayıt sayılarında degişiklik olup olmadığı test edilir.

        """

        # Veritabanından bölüm başkanı kullanıcısı seçilir.
        usr = User.objects.get(username='******')

        # Kullanıcıya login yaptırılır.
        self.prepare_client('/donem_danismanlari', user=usr)
        resp = self.client.post()

        # Kullanıcının kayıtlı olduğu bölüm.
        bolum = usr.role_set[0].role.unit

        donem = Donem.guncel_donem()

        # Db'den varolan danışman  kayıtları seçilir.
        count_of_danisman = len(DonemDanisman.objects.filter(donem=donem, bolum=bolum))

        num_of_danisman = 0
        for okutman in resp.json['forms']['model']['Okutmanlar']:
            if okutman['secim']:
                num_of_danisman += 1

        # Sunucudan dönen danışman kayıtlarının sayısı ile veritabanından çekilen
        # danışman kayıtlarının sayısının eşitliği karşılşatılırıp test edilir.
        assert num_of_danisman == count_of_danisman

        # 2 tane daha danışman seçilir.
        okutmanlar = [
            {'ad_soyad': "Yalın Seven", 'secim': "true", 'key': "Bf1CPIKs6txfhvlBQ7jqhy0iwv"},
            {'ad_soyad': "Uluğbey Bilgin", 'secim': "true", 'key': "YhkwdYaGFnVzWMpULy6unvuON1A"},
            {'ad_soyad': "Umuşan Gül", 'secim': 'true', 'key': "VYpVNI9vfWYIz3uGIBl81srlnrZ"},
            {'ad_soyad': "Henife Şener", 'secim': '', 'key': "G2XjlaJMX0FUZX84aoIeiVCqZMR"}]

        # Seçilen dönem danışmanları kaydedilir.
        self.client.post(form={'kaydet': 1, 'Okutmanlar': okutmanlar})
        time.sleep(1)

        # Eklenen danışman kayıtlarının veritabanına kaydedilip kaydedilmediğini test eder.
        assert len(DonemDanisman.objects.filter(donem=donem, bolum=bolum)) == 3

        # İş akışı tekrardan başlatılır.
        self.client.set_path('/donem_danismanlari')
        resp = self.client.post()

        num_of_danisman = 0
        for okutman in resp.json['forms']['model']['Okutmanlar']:
            if okutman['secim']:
                num_of_danisman += 1

        # Eklenen danışmanlar kaydedildikten sonra, sunucudan dönen cevapta danışman kayıt sayıların
        # doğruluğu test edilir.
        assert num_of_danisman == 3

        for dd in DonemDanisman.objects.filter(donem=donem, bolum=bolum):
            if not dd.okutman.key == 'Bf1CPIKs6txfhvlBQ7jqhy0iwv':
                dd.delete()
Beispiel #33
0
 def yeni_donem(ad, baslangic, bitis):
     d = Donem(ad='%s - %s' % (ad, baslangic.split('.')[2]),
               baslangic_tarihi=baslangic,
               bitis_tarihi=bitis)
     d.blocking_save()
Beispiel #34
0
 def sinav_yayinla(self):
     se = SinavEtkinligi.objects.filter(bolum=self.current.role.unit, donem=Donem.guncel_donem())
     for s in se:
         s.published = True
         s.save()
    def test_ders_programi_yap(self):

        usr = User.objects.get(username='******')
        unit = usr.role_set[0].role.unit()
        ders_etkinligi = DersEtkinligi.objects.filter(bolum=unit, donem=Donem.guncel_donem())
        published_true = ders_etkinligi.filter(published=True)
        with BlockSave(DersEtkinligi, query_dict={'published': False}):
            for pt in published_true:
                pt.published = False
                pt.save()
        published_false_count = DersEtkinligi.objects.filter(bolum=unit, donem=Donem.guncel_donem(),
                                                             published=False).count()

        self.prepare_client("/ders_programi_hazirla", user=usr)
        resp = self.client.post()

        assert resp.json['msgbox']['title'] == "Yayınlanmamış Program Var!"

        self.client.post(form={'devam': 1})

        self.client.post(cmd='incele')

        for i in range(2):

            if i == 0:
                # Derslik Arama Kayit Yok
                ara_form = {'arama_button': 1,
                            'arama_sec': 1,
                            'arama_text': "C4034"}
                title = "Kayıt Bulunamadı"
            else:
                # Ogretim Elemani Arama Kayit Yok
                ara_form = {'arama_button': 1,
                            'arama_sec': 2,
                            'arama_text': "Baba Zula"}
                title = "Kayıt Bulunamadı"

            resp = self.client.post(form=ara_form)
            assert resp.json['msgbox']['title'] == title

            self.client.post(form={'devam': 1})

            if i == 0:
                # Derslik Arama Kayit Var
                ara_form = {'arama_button': 1,
                            'arama_sec': 1,
                            'arama_text': "C50610"}
                title = "C50610 C608 - CAD Laboratuarları 38 - Detaylı Zaman Tablosu"

            else:
                # Ogretim Elemani Arama Kayit Var
                ara_form = {'arama_button': 1,
                            'arama_sec': 2,
                            'arama_text': "İsmet Tarhan"}

                title = "İsmet Tarhan - Detaylı Zaman Tablosu"

            resp = self.client.post(form=ara_form)
            assert resp.json['objects'][1]['title'] == title

            self.client.post(form={'tamamla': 1})

        resp = self.client.post(cmd='vazgec')

        assert 'incele' and 'yayinla' in resp.json['forms']['model'].keys()

        resp = self.client.post(cmd='bitir')

        assert resp.json['msgbox']['title'] == "Program Yayınlandı!"

        time.sleep(1)

        resp = self.client.post()

        assert resp.json['msgbox']['title'] == "Yayınlanmış Program Var!"

        published_true = DersEtkinligi.objects.filter(bolum=unit, published=True, donem=Donem.guncel_donem())

        assert published_false_count == len(published_true)

        self.client.set_path("/derslik_ders_programlari")
        resp = self.client.post()
        derslikler = [etkinlik.room for etkinlik in published_true]
        assert len(resp.json['forms']['form'][2]['titleMap']) == len(derslikler)
        resp = self.client.post(form={"ileri": 1, "derslik": "3rPQ4bB2lDtxdCE41RBoNqZM19f"})
        num_of_ders_etkinlikleri = DersEtkinligi.objects.filter(room_id="3rPQ4bB2lDtxdCE41RBoNqZM19f", published=True,
                                                                donem=Donem.guncel_donem())
        count_of_ders_etkinlikleri = 0
        for i in range(1, len(resp.json['objects'])):
            for day in resp.json['objects'][i]['fields']:
                if resp.json['objects'][i]['fields'][day]:
                    count_of_ders_etkinlikleri += 1
        assert len(num_of_ders_etkinlikleri) == count_of_ders_etkinlikleri
        with BlockSave(DersEtkinligi, query_dict={'published': False}):
            for de in published_true:
                de.published = False
                de.save()

        assert published_false_count == DersEtkinligi.objects.filter(bolum=unit, published=False, donem=Donem.guncel_donem()).count()
    def test_sinav_programi_yap(self):
        """
        Derslik Sınav Programları iş akışı aşağıdaki adımlardan oluşur.

        İlk adımda sınav etkinlikleri kontrol edilir.
        Yayınlanlanmamış sınav etkinlikleri varsa;
        Bilgi ver wf adımına geçer. Bu adımda yayınlanmamış sınavların
        olduğuna dair bilgi mesajı ekrana basılır.

        İlk adımda derslik seçilir.
        Veritabanından çekilen derslik sayısı ile sunucudan dönen derslik sayısı karşılaştırılıp test edilir.

        İkinci adımda seçilen dersliğe ait sınav programı getirilir.
        Veritabanından çekilen sınav etkinlikleri sayısı ile sunucudan dönen sınav etkinlikleri sayısı
        karşılaştırılıp test edilir.

        """
        usr = User.objects.get(username='******')
        unit = usr.role_set[0].role.unit()
        sinav_etkinligi = SinavEtkinligi.objects.filter(bolum=unit, donem=Donem.guncel_donem())
        published_true = sinav_etkinligi.filter(published=True)
        with BlockSave(SinavEtkinligi, query_dict={'published': False}):
            for pt in published_true:
                pt.published = False
                pt.save()

        published_false_count = SinavEtkinligi.objects.filter(bolum=unit, donem=Donem.guncel_donem(),
                                                              published=False).count()

        self.prepare_client('/sinav_programi_hazirla', user=usr)
        resp = self.client.post()

        assert resp.json['msgbox']['title'] == "Yayınlanmamış Program Var!"

        self.client.set_path("/derslik_sinav_programlari")
        resp = self.client.post()
        assert "msgbox" in resp.json

        self.client.set_path('/sinav_programi_hazirla')
        self.client.post()

        self.client.post(form={'devam': 1})

        self.client.post(cmd='incele')

        for i in range(2):

            if i == 0:
                # Derslik Arama Kayit Yok
                ara_form = {'arama_button': 1,
                            'arama_sec': 1,
                            'arama_text': "C4034"}
                title = "Kayıt Bulunamadı"
            else:
                # Ogretim Elemani Arama Kayit Yok
                ara_form = {'arama_button': 1,
                            'arama_sec': 2,
                            'arama_text': "Baba Zula"}
                title = "Kayıt Bulunamadı"

            resp = self.client.post(form=ara_form)
            assert resp.json['msgbox']['title'] == title

            self.client.post(form={'devam': 1})

            if i == 0:
                # Derslik Arama Kayit Var
                ara_form = {'arama_button': 1,
                            'arama_sec': 1,
                            'arama_text': "M50616"}
                title = "M50616 C402 - Theatre 44 - Detaylı Zaman Tablosu"

            else:
                # Ogretim Elemani Arama Kayit Var
                ara_form = {'arama_button': 1,
                            'arama_sec': 2,
                            'arama_text': "İsmet Tarhan"}

                title = "İsmet Tarhan - Detaylı Zaman Tablosu"

            resp = self.client.post(form=ara_form)
            assert resp.json['objects'][1]['title'] == title

            self.client.post(form={'tamamla': 1})

        resp = self.client.post(cmd='vazgec')

        assert 'incele' and 'yayinla' in resp.json['forms']['model'].keys()

        resp = self.client.post(cmd='bitir')

        assert resp.json['msgbox']['title'] == "Program Yayınlandı!"

        time.sleep(1)

        resp = self.client.post()

        assert resp.json['msgbox']['title'] == "Yayınlanmış Program Var!"

        published_true = SinavEtkinligi.objects.filter(bolum=unit, published=True, donem=Donem.guncel_donem())

        assert published_false_count == len(published_true)

        self.client.set_path("derslik_sinav_programlari")
        resp = self.client.post()
        derslikler = [s_yerleri.room for s_etkinlik in published_true
                      for s_yerleri in s_etkinlik.SinavYerleri if s_etkinlik.SinavYerleri]
        assert len(derslikler) == len(resp.json['forms']['form'][2]['titleMap'])
        resp = self.client.post(form={"ileri": 1, "derslik": 'Jju1xbrWBsMoFb9fPyNpLnwPuW9'})
        room = Room.objects.get("Jju1xbrWBsMoFb9fPyNpLnwPuW9")
        num_of_sinav_etkinlikleri = [s for s in SinavEtkinligi.objects if room in s.SinavYerleri]
        count_of_sinav_etkinlikleri = 0
        for i in range(1, len(resp.json['objects'])):
            for day in resp.json['objects'][i]['fields']:
                if resp.json['objects'][i]['fields'][day]:
                    count_of_sinav_etkinlikleri += 1
        assert len(num_of_sinav_etkinlikleri) == count_of_sinav_etkinlikleri
        with BlockSave(SinavEtkinligi, query_dict={'published': False}):
            for se in published_true:
                se.published = False
                se.save()
        assert published_false_count == SinavEtkinligi.objects.filter(bolum=unit, published=False, donem=Donem.guncel_donem()).count()
Beispiel #37
0
    def test_sinav_programi_yap(self):
        """
        Derslik Sınav Programları iş akışı aşağıdaki adımlardan oluşur.

        İlk adımda sınav etkinlikleri kontrol edilir.
        Yayınlanlanmamış sınav etkinlikleri varsa;
        Bilgi ver wf adımına geçer. Bu adımda yayınlanmamış sınavların
        olduğuna dair bilgi mesajı ekrana basılır.

        İlk adımda derslik seçilir.
        Veritabanından çekilen derslik sayısı ile sunucudan dönen derslik sayısı karşılaştırılıp test edilir.

        İkinci adımda seçilen dersliğe ait sınav programı getirilir.
        Veritabanından çekilen sınav etkinlikleri sayısı ile sunucudan dönen sınav etkinlikleri sayısı
        karşılaştırılıp test edilir.

        """
        usr = User.objects.get(username='******')
        unit = usr.role_set[0].role.unit()
        sinav_etkinligi = SinavEtkinligi.objects.filter(
            bolum=unit, donem=Donem.guncel_donem())
        published_true = sinav_etkinligi.filter(published=True)
        with BlockSave(SinavEtkinligi, query_dict={'published': False}):
            for pt in published_true:
                pt.published = False
                pt.save()

        published_false_count = SinavEtkinligi.objects.filter(
            bolum=unit, donem=Donem.guncel_donem(), published=False).count()

        self.prepare_client('/sinav_programi_hazirla', user=usr)
        resp = self.client.post()

        assert resp.json['msgbox']['title'] == "Yayınlanmamış Program Var!"

        self.client.set_path("/derslik_sinav_programlari")
        resp = self.client.post()
        assert "msgbox" in resp.json

        self.client.set_path('/sinav_programi_hazirla')
        self.client.post()

        self.client.post(form={'devam': 1})

        self.client.post(cmd='incele')

        for i in range(2):

            if i == 0:
                # Derslik Arama Kayit Yok
                ara_form = {
                    'arama_button': 1,
                    'arama_sec': 1,
                    'arama_text': "C4034"
                }
                title = "Kayıt Bulunamadı"
            else:
                # Ogretim Elemani Arama Kayit Yok
                ara_form = {
                    'arama_button': 1,
                    'arama_sec': 2,
                    'arama_text': "Baba Zula"
                }
                title = "Kayıt Bulunamadı"

            resp = self.client.post(form=ara_form)
            assert resp.json['msgbox']['title'] == title

            self.client.post(form={'devam': 1})

            if i == 0:
                # Derslik Arama Kayit Var
                ara_form = {
                    'arama_button': 1,
                    'arama_sec': 1,
                    'arama_text': "M50616"
                }
                title = "M50616 C402 - Theatre 44 - Detaylı Zaman Tablosu"

            else:
                # Ogretim Elemani Arama Kayit Var
                ara_form = {
                    'arama_button': 1,
                    'arama_sec': 2,
                    'arama_text': "İsmet Tarhan"
                }

                title = "İsmet Tarhan - Detaylı Zaman Tablosu"

            resp = self.client.post(form=ara_form)
            assert resp.json['objects'][1]['title'] == title

            self.client.post(form={'tamamla': 1})

        resp = self.client.post(cmd='vazgec')

        assert 'incele' and 'yayinla' in resp.json['forms']['model'].keys()

        resp = self.client.post(cmd='bitir')

        assert resp.json['msgbox']['title'] == "Program Yayınlandı!"

        time.sleep(1)

        resp = self.client.post()

        assert resp.json['msgbox']['title'] == "Yayınlanmış Program Var!"

        published_true = SinavEtkinligi.objects.filter(
            bolum=unit, published=True, donem=Donem.guncel_donem())

        assert published_false_count == len(published_true)

        self.client.set_path("derslik_sinav_programlari")
        resp = self.client.post()
        derslikler = [
            s_yerleri.room for s_etkinlik in published_true
            for s_yerleri in s_etkinlik.SinavYerleri if s_etkinlik.SinavYerleri
        ]
        assert len(derslikler) == len(
            resp.json['forms']['form'][2]['titleMap'])
        resp = self.client.post(form={
            "ileri": 1,
            "derslik": 'Jju1xbrWBsMoFb9fPyNpLnwPuW9'
        })
        room = Room.objects.get("Jju1xbrWBsMoFb9fPyNpLnwPuW9")
        num_of_sinav_etkinlikleri = [
            s for s in SinavEtkinligi.objects if room in s.SinavYerleri
        ]
        count_of_sinav_etkinlikleri = 0
        for i in range(1, len(resp.json['objects'])):
            for day in resp.json['objects'][i]['fields']:
                if resp.json['objects'][i]['fields'][day]:
                    count_of_sinav_etkinlikleri += 1
        assert len(num_of_sinav_etkinlikleri) == count_of_sinav_etkinlikleri
        with BlockSave(SinavEtkinligi, query_dict={'published': False}):
            for se in published_true:
                se.published = False
                se.save()
        assert published_false_count == SinavEtkinligi.objects.filter(
            bolum=unit, published=False, donem=Donem.guncel_donem()).count()
    def test_okutman_ders_ucreti_goruntuleme(self):
        for loop in range(2):
            # ogretim_elemani_2 kullanıcısıyla giriş yapılır.
            user = User.objects.get(username='******')
            # testi yazılacak iş akışı seçilir.
            self.prepare_client('/okutman_ders_ucreti_goruntuleme', user=user)
            self.client.post()

            if loop == 0:
                for i in range(2):

                    # 2016 yılı Mayıs ayı seçilir. Veritabanında seçilen yıl ve
                    #  ayı içeren dönem bulunmamaktadır. 'Dönem Bulunamadı' başlıklı
                    # hata mesajının çıkması beklenir.
                    resp = self.client.post(form={
                        "ay_sec": 5,
                        "yil_sec": 2013,
                        "sec": 1
                    })
                    assert resp.json['forms']['schema'][
                        "title"] == "Dönem Bulunamadı"

                    if i == 0:
                        # İlk döngüde hata mesajından sonra eğer geriye dönülmesi seçilirse,
                        # tarih seçme ekranına geri dönmesi beklenir.
                        resp = self.client.post(form={
                            "iptal": "null",
                            "geri_don": 1,
                            "sec": 1
                        },
                                                flow="tarih_sec")
                        assert resp.json['forms']['schema'][
                            "title"] == "Puantaj Tablosu Hazırlamak İstediğiniz Yıl ve Ayı Seçiniz"

                    if i == 1:
                        # Eğer iptal butonuna basılırsa, işem iptali hakkında bilgilendirme
                        # mesajı çıkması beklenir.
                        resp = self.client.post(
                            form={
                                "iptal": 1,
                                "geri_don": "null",
                                "sec": 1
                            },
                            flow="islem_iptali_bilgilendir")
                        assert resp.json["msgbox"][
                            "title"] == "Durum Mesajı" and "iptal" in resp.json[
                                "msgbox"]["msg"]

            if loop == 1:
                # Geçerli bir dönemin bulunduğu tarih seçilir.
                resp = self.client.post(form={
                    "ay_sec": 11,
                    "yil_sec": 2016,
                    "sec": 1
                })

                # Ders ücreti hesaplama türü seçim ekranına gelmesi beklenir.
                assert resp.json['forms']['schema'][
                    "title"] == u"Puantaj Tablosu Hesaplama Türü Seçiniz"

                # Tür seçildikten sonra ekrana Puantaj Tablosu çıkarılması beklenir.
                resp = self.client.post(form={"ek_ders": 'null', "ders": 1})
                assert "PUANTAJ TABLOSU" in resp.json['forms']['schema'][
                    "title"]

                # Kullanıcı adından öğretim görevlisinin adı soyadı bulunur.
                # Oluşturulan puantaj tablosunun doğru öğretim görevlisi adına
                # oluşturulup oluşturulmadığı kontrol edilir.
                okutman = user.personel.okutman
                okutman_adi = okutman.__unicode__()

                # Bir döneme denk geldiği kontrol edilir.
                donem_list = Donem.takvim_ayina_rastlayan_donemler(2016, 11)
                assert len(donem_list) == 1

                ders_etkinlik_list = doneme_gore_okutman_etkinlikleri(
                    donem_list, okutman, False)

                # Etkinlik olan günlerin etkinlik listede olduğu kontrol edilir.
                for etkinlik in DersEtkinligi.objects.filter(
                        donem=donem_list[0], okutman=okutman, ek_ders=False):
                    assert etkinlik.gun in ders_etkinlik_list[0]

                # Personel izin listesi getirilir.
                personel_izin_list = personel_izin_gunlerini_getir(
                    okutman, 2016, 11)

                birim_unit = Unit.objects.get(
                    yoksis_no=okutman.donemdeki_gorev_yeri(donem_list[0]))
                resmi_tatil_list = resmi_tatil_gunleri_getir(
                    birim_unit, 2016, 5)
                assert 19 and 1 in resmi_tatil_list[0]

                tarih_araligi = ders_etkinligine_gore_tarih_araligi(
                    donem_list, 2016, 11, birim_unit)
                resmi_tatil_list = resmi_tatil_gunleri_getir(
                    birim_unit, 2016, 11)

                aylik_plan = okutman_aylik_plani(donem_list,
                                                 ders_etkinlik_list,
                                                 resmi_tatil_list,
                                                 personel_izin_list,
                                                 tarih_araligi, 2016, 11)

                son_gun = yil_ve_aya_gore_ilk_ve_son_gun(2016, 11)[1].day

                for i in range(son_gun):
                    if resp.json['objects'][1]['fields'][" %i" %
                                                         (i + 1)] == ' ':
                        assert i + 1 not in aylik_plan[0]
                    elif resp.json['objects'][1]['fields'][" %i" %
                                                           (i + 1)] == 'İ':
                        assert aylik_plan[0][i + 1] == 'İ'
                    elif resp.json['objects'][1]['fields'][" %i" %
                                                           (i + 1)] == 'R':
                        assert aylik_plan[0][i + 1] == 'R'
                    else:
                        hafta_gun = date(2016, 11, i + 1).isoweekday()

                        assert resp.json['objects'][1]['fields'][
                            " %i" % (i + 1)] == str(
                                ders_etkinlik_list[0][hafta_gun])
                        assert resp.json['objects'][1]['fields'][
                            " %i" % (i + 1)] == str(aylik_plan[0][i + 1])

                # Personel'in izin günlerinin doğru olup olmadığı test edilir.
                assert personel_izin_list == [16, 17, 18, 19, 20, 21]

                # Puantaj tablosu'nda öğretim görevlisinin isminin olduğu test edilir.
                assert okutman_adi.upper(
                ) in resp.json['forms']['schema']["title"].upper()
Beispiel #39
0
    def sinav_detay_goster(self):
        obj_key = self.current.task_data['data_key']
        if self.input['form']['arama_sec'] == 1:
            sinav_etkinligi = SinavEtkinligi.objects.raw("sinav_yerleri.room_id:" + obj_key)
            obj = Room.objects.get(obj_key)

        else:
            sinav_etkinligi = map(lambda s: SinavEtkinligi.objects.get(sube=s), Sube.objects.filter(
                                                            okutman_id=obj_key, donem=Donem.guncel_donem()))
            obj = Okutman.objects.get(obj_key)

        days = [_(u"Pazartesi"), _(u"Salı"), _(u"Çarşamba"), _(u"Perşembe"), _(u"Cuma"), _(u"Cumartesi"), _(u"Pazar")]

        self.output['objects'] = [days]

        def etkinlik(de):
            """
            Ders etkinligi formatlar ve dondurur.

            :param de: ders etkinligi
            :return: ders adi ve zamani
            """
            aralik = format_datetime(de.tarih)
            return "\n\n**%s**\n%s\n\n" % (aralik, de.ders.ad)

        data_list = []
        for i, day in enumerate(days):
            data_list.append(
                ''.join(["%s" % etkinlik(de) for de in filter(lambda d: d.tarih.isoweekday() == i + 1,
                                                              sinav_etkinligi)]))
        self.detay_goster(data_list, obj)
Beispiel #40
0
    def test_ders_programi_yap(self):

        usr = User.objects.get(username='******')
        unit = usr.role_set[0].role.unit()
        ders_etkinligi = DersEtkinligi.objects.filter(
            bolum=unit, donem=Donem.guncel_donem())
        published_true = ders_etkinligi.filter(published=True)
        with BlockSave(DersEtkinligi, query_dict={'published': False}):
            for pt in published_true:
                pt.published = False
                pt.save()
        published_false_count = DersEtkinligi.objects.filter(
            bolum=unit, donem=Donem.guncel_donem(), published=False).count()

        self.prepare_client("/ders_programi_hazirla", user=usr)
        resp = self.client.post()

        assert resp.json['msgbox']['title'] == "Yayınlanmamış Program Var!"

        self.client.post(form={'devam': 1})

        self.client.post(cmd='incele')

        for i in range(2):

            if i == 0:
                # Derslik Arama Kayit Yok
                ara_form = {
                    'arama_button': 1,
                    'arama_sec': 1,
                    'arama_text': "C4034"
                }
                title = "Kayıt Bulunamadı"
            else:
                # Ogretim Elemani Arama Kayit Yok
                ara_form = {
                    'arama_button': 1,
                    'arama_sec': 2,
                    'arama_text': "Baba Zula"
                }
                title = "Kayıt Bulunamadı"

            resp = self.client.post(form=ara_form)
            assert resp.json['msgbox']['title'] == title

            self.client.post(form={'devam': 1})

            if i == 0:
                # Derslik Arama Kayit Var
                ara_form = {
                    'arama_button': 1,
                    'arama_sec': 1,
                    'arama_text': "C50610"
                }
                title = "C50610 C608 - CAD Laboratuarları 38 - Detaylı Zaman Tablosu"

            else:
                # Ogretim Elemani Arama Kayit Var
                ara_form = {
                    'arama_button': 1,
                    'arama_sec': 2,
                    'arama_text': "İsmet Tarhan"
                }

                title = "İsmet Tarhan - Detaylı Zaman Tablosu"

            resp = self.client.post(form=ara_form)
            assert resp.json['objects'][1]['title'] == title

            self.client.post(form={'tamamla': 1})

        resp = self.client.post(cmd='vazgec')

        assert 'incele' and 'yayinla' in resp.json['forms']['model'].keys()

        resp = self.client.post(cmd='bitir')

        assert resp.json['msgbox']['title'] == "Program Yayınlandı!"

        time.sleep(1)

        resp = self.client.post()

        assert resp.json['msgbox']['title'] == "Yayınlanmış Program Var!"

        published_true = DersEtkinligi.objects.filter(
            bolum=unit, published=True, donem=Donem.guncel_donem())

        assert published_false_count == len(published_true)

        self.client.set_path("/derslik_ders_programlari")
        resp = self.client.post()
        derslikler = [etkinlik.room for etkinlik in published_true]
        assert len(
            resp.json['forms']['form'][2]['titleMap']) == len(derslikler)
        resp = self.client.post(form={
            "ileri": 1,
            "derslik": "3rPQ4bB2lDtxdCE41RBoNqZM19f"
        })
        num_of_ders_etkinlikleri = DersEtkinligi.objects.filter(
            room_id="3rPQ4bB2lDtxdCE41RBoNqZM19f",
            published=True,
            donem=Donem.guncel_donem())
        count_of_ders_etkinlikleri = 0
        for i in range(1, len(resp.json['objects'])):
            for day in resp.json['objects'][i]['fields']:
                if resp.json['objects'][i]['fields'][day]:
                    count_of_ders_etkinlikleri += 1
        assert len(num_of_ders_etkinlikleri) == count_of_ders_etkinlikleri
        with BlockSave(DersEtkinligi, query_dict={'published': False}):
            for de in published_true:
                de.published = False
                de.save()

        assert published_false_count == DersEtkinligi.objects.filter(
            bolum=unit, published=False, donem=Donem.guncel_donem()).count()
    def test_ders_ucreti_hesaplama(self):

        for loop in range(3):
            # mutemet kullanıcısıyla giriş yapılır.
            user = User.objects.get(username='******')
            # testi yazılacak iş akışı seçilir.
            self.prepare_client('/ders_ucreti_hesaplama', user=user)
            self.client.post()

            if loop == 0:
                for i in range(2):

                    # 2016 yılı Aralık ayı seçilir. Veritabanında seçilen yıl ve


                    #  ayı içeren dönem bulunmamaktadır. 'Dönem Bulunamadı' başlıklı
                    # hata mesajının çıkması beklenir.

                    resp = self.client.post(form={"ay_sec": 5, "yil_sec": 2013, "sec": 1})
                    assert resp.json['forms']['schema']["title"] == "Dönem Bulunamadı"

                    if i == 0:
                        # İlk döngüde hata mesajından sonra eğer geriye dönülmesi seçilirse,
                        # tarih seçme ekranına geri dönmesi beklenir.
                        resp = self.client.post(form={"iptal": "null", "geri_don": 1, "sec": 1}, flow="tarih_sec")
                        assert resp.json['forms']['schema'][
                                   "title"] == "Puantaj Tablosu Hazırlamak İstediğiniz Yıl ve Ayı Seçiniz"

                    if i == 1:
                        # Eğer iptal butonuna basılırsa, işlem iptali hakkında bilgilendirme
                        # mesajı çıkması beklenir.
                        resp = self.client.post(form={"iptal": 1, "geri_don": "null", "sec": 1},
                                                flow="islem_iptali_bilgilendir")
                        assert resp.json["msgbox"]["title"] == "Durum Mesajı" and "iptal" in resp.json["msgbox"]["msg"]

            if loop == 1:

                # Geçerli bir dönemin bulunduğu tarih seçildiğinde, mutemetin
                # işlem yaptığı birime ait öğretim görevlilerinin isimlerinin
                # olduğu bir form gelmesi beklenir.
                resp = self.client.post(form={"ay_sec": 11, "yil_sec": 2016, "sec": 1})
                assert resp.json['forms']['schema']["title"] == "Okutman Seçiniz"

                # Ekrana gelen öğretim görevlisi sayısıyla veritabanındaki sayının
                # aynı olması beklenir.
                birim_no = self.client.current.role.unit.yoksis_no
                assert len(resp.json['forms']['model']["OkutmanListesi"]) == len(
                    [o for o in Okutman.objects for gorev_birimi in o.GorevBirimi if
                     gorev_birimi.yoksis_no == birim_no and gorev_birimi.donem == Donem.guncel_donem()])

                okutman_listesi = resp.json['forms']['model']["OkutmanListesi"]

                # Varsayılan olarak tüm öğretim görevlileri seçili halde gelir.
                # Seçimleri kaldırılır.
                for i in range(len(okutman_listesi)):
                    okutman_listesi[i]['secim'] = False

                for i in range(2):
                    # Hiçbir öğretim görevlisi seçmeden ilerlemeye çalışıldığında, işlem
                    # yapacak öğretim görevlisi olmadığından hata mesajı göstermesi beklenir.
                    resp = self.client.post(form={"OkutmanListesi": okutman_listesi, "sec": 1})
                    assert resp.json['forms']['schema']["title"] == "Öğretim Görevlisi Seçmelisiniz"

                    if i == 0:
                        # İlk döngüde hata mesajından sonra eğer geriye dönülmesi seçilirse,
                        # öğretim görevlisi seçme ekranına geri dönmesi beklenir.
                        resp = self.client.post(form={"iptal": "null", "geri_don": 1, "sec": 1}, flow="okutman_sec")
                        assert resp.json['forms']['schema']["title"] == \
                               "Okutman Seçiniz"
                    if i == 1:
                        # Eğer iptal butonuna basılırsa, işlem iptali hakkında bilgilendirme
                        # mesajı çıkması beklenir.
                        resp = self.client.post(form={"iptal": 1, "geri_don": "null", "sec": 1},
                                                flow="islem_iptali_bilgilendir")
                        assert resp.json["msgbox"]["title"] == "Durum Mesajı" and "iptal" in resp.json["msgbox"]["msg"]

            if loop == 2:
                # Geçerli bir tarih ve öğretim görevlisi seçilmesi senaryosu.
                resp = self.client.post(form={"ay_sec": 5, "yil_sec": 2016, "sec": 1})
                okutman_listesi = resp.json['forms']['model']["OkutmanListesi"]

                for i in range(3):

                    birim_no = self.client.current.role.unit.yoksis_no
                    birim_unit = Unit.objects.get(yoksis_no=birim_no)

                    # 2016 yılı Şubat ayı verilir. Bahar dönemi ders başlangıcı 21 Şubat olduğu
                    # için tarih aralığının (21,29) olması kontrol edilir.
                    if i == 0:
                        donem_list = Donem.takvim_ayina_rastlayan_donemler(2016, 2)
                        assert len(donem_list) == 1

                        tarih_araligi = ders_etkinligine_gore_tarih_araligi(donem_list, 2016, 2, birim_unit)
                        assert tarih_araligi == [(21, 29)]

                    # 2016 yılı Temmuz ayı verilir. Temmuz ayı Bahar dönemi bitişi ve Yaz dönemi başlangıcıdır.
                    # 2 döneme denk gelir. Ama Temmuz ayında sadece yaz döneminin ders etkinlikleri vardır.
                    # 2 döneme rastlayıp sadece 1 dönemin ders etkinliklerine rastladığı için, tarih aralığının
                    # 2 tuple dan oluşması ve bir tanesinin birbirine eşit olması beklenir.
                    if i == 1:
                        donem_list = Donem.takvim_ayina_rastlayan_donemler(2016, 7)
                        assert len(donem_list) == 2

                        tarih_araligi = ders_etkinligine_gore_tarih_araligi(donem_list, 2016, 7, birim_unit)

                        assert tarih_araligi == [(1, 0), (15, 31)]


                    # 2016 yılı Mayıs ayı verilir. Mayıs ayı Bahar dönemine rastlar.
                    # 19 Mayıs ve 1 Mayıs'ın resmi tatil listesinde olması beklenir.
                    else:
                        donem_list = Donem.takvim_ayina_rastlayan_donemler(2016, 5)
                        assert len(donem_list) == 1
                        resmi_tatil_list = resmi_tatil_gunleri_getir(birim_unit, 2016, 5)

                        assert 19 and 1 in resmi_tatil_list[0]
                        tarih_araligi = ders_etkinligine_gore_tarih_araligi(donem_list, 2016, 5, birim_unit)

                        assert tarih_araligi == [(1, 31)]

                # Varsayılan olarak tüm öğretim görevlileri seçili olarak
                # gelmesini kontrol eder.
                for i in range(len(okutman_listesi)):
                    assert okutman_listesi[i]['secim'] == True

                # Hepsi seçili olarak bir sonraki adıma ilerlenir.
                resp = self.client.post(form={"OkutmanListesi": okutman_listesi, "sec": 1})

                # Ders ücreti hesaplama türü seçim ekranına gelmesi beklenir.
                assert resp.json['forms']['schema'][
                           "title"] == "Puantaj Tablosu Hesaplama Türü Seçiniz"

                resp = self.client.post(form={"ek_ders": 'null', "ders": 1})

                for j, okutman in enumerate(okutman_listesi):
                    okutman = Okutman.objects.get(okutman['key'])

                    ders_etkinlik_list = doneme_gore_okutman_etkinlikleri(donem_list, okutman, False)

                    # Etkinlik olan günlerin etkinlik listede olduğu kontrol edilir.
                    for etkinlik in DersEtkinligi.objects.filter(donem=donem_list[0], okutman=okutman, ek_ders=False):
                        assert etkinlik.gun in ders_etkinlik_list[0]

                    # Personel izin listesi getirilir.
                    personel_izin_list = personel_izin_gunlerini_getir(okutman, 2016, 5)

                    aylik_plan = okutman_aylik_plani(donem_list, ders_etkinlik_list,
                                                     resmi_tatil_list, personel_izin_list,
                                                     tarih_araligi, 2016, 5)

                    son_gun = yil_ve_aya_gore_ilk_ve_son_gun(2016, 5)[1].day

                    for i in range(son_gun):
                        if resp.json['objects'][j + 1]['fields'][" %i" % (i + 1)] == ' ':
                            assert i + 1 not in aylik_plan[0]
                        elif resp.json['objects'][j + 1]['fields'][" %i" % (i + 1)] == 'İ':
                            assert aylik_plan[0][i + 1] == 'İ'
                        elif resp.json['objects'][j + 1]['fields'][" %i" % (i + 1)] == 'R':
                            assert aylik_plan[0][i + 1] == 'R'
                        else:
                            hafta_gun = date(2016, 5, i + 1).isoweekday()

                            assert resp.json['objects'][j + 1]['fields'][" %i" % (i + 1)] == str(
                                ders_etkinlik_list[0][hafta_gun])
                            assert resp.json['objects'][j + 1]['fields'][" %i" % (i + 1)] == str(aylik_plan[0][i + 1])

                    # Tür seçildikten sonra ekrana Puantaj Tablosu çıkarılması beklenir.
                    assert "PUANTAJ TABLOSU" in resp.json['forms']['schema']["title"]
    def test_okutman_sinav_programi_goruntule(self):

        user = User.objects.get(username='******')
        unit = user.role_set[0].role.unit
        sinav_etkinligi = SinavEtkinligi.objects.filter(bolum=unit, donem=Donem.guncel_donem())
        with BlockSave(SinavEtkinligi, query_dict={'published': True}):
            for se in sinav_etkinligi:
                se.published = True
                se.save()
        # İlgili öğrenci bulunur.
        ogrenci = Ogrenci.objects.get(user=user)
        ogrenci_adi = ogrenci.__unicode__()
        sinav_etkinlikleri = aktif_sinav_listesi(ogrenci)

        for i in range(2):

            # Testi çalıştırılacak iş akışı seçilir.
            self.prepare_client('/ogrenci_sinav_programi_goruntule', user=user)

            cond = False if i == 0 else True

            # İlk test yayınlanmış sınav etkinliğinin olmaması durumudur.
            # Bu yüzden Sınav Etkinliği modelinin published fieldı False yapılır.

            # İkinci test yayınlanmış sınav etkinliğinin olması durumudur.
            # Bu yüzden Sınav Etkinliği modelinin published fieldı True yapılır.
            with BlockSave(SinavEtkinligi, query_dict={'published': cond}):
                for etkinlik in sinav_etkinlikleri:
                    etkinlik.published = cond
                    etkinlik.save()

            resp = self.client.post()

            # Yayınlanmış sınav etkinliği bulunmaması durumunda Uyarı vermesi beklenir.
            if i == 0:
                assert resp.json['msgbox']['title'] == "Uyarı!"

            # Yayınlanmış sınav etkinliği olması durumunda öğretim görevlisinin adının
            # bulunduğu bir sınav takvimi gösterilmesi beklenir.
            else:

                # Öğrencinin güncel dönemde aktif şube
                # sayısının 7 olması beklenir.
                assert len(ogrenci.donem_subeleri()) == 7

                # Sınav etkinlikleri sayısının 7 olması beklenir.
                assert len(sinav_etkinlikleri) == 7

                # Sınav etkinliklerinin tarihe göre küçükten büyüğe sıralandığı
                # kontrol edilir.
                assert sinav_etkinlikleri[0].tarih <= sinav_etkinlikleri[-1].tarih

                etkinlikler = map_etkinlik_hafta_gunleri(sinav_etkinlikleri)

                # Sınav etkinliklerinin etkinlikler sözlüğü içerisinde istenildiği
                # gibi yerleştirildiği kontrol edilir.
                for etkinlik in sinav_etkinlikleri:
                    assert etkinlik.tarih.isoweekday() in etkinlikler
                    assert etkinlik.__unicode__() in etkinlikler[etkinlik.tarih.isoweekday()]

                # Yayınlanmış sınav etkinliği olması durumunda öğretim görevlisinin adının
                # bulunduğu bir sınav takvimi gösterilmesi beklenir.
                assert ogrenci_adi in resp.json['forms']['schema']["title"]

                etkinlik_sayisi = 0

                for i in range(1, len(resp.json['objects'])):
                    for k, day in enumerate(resp.json['objects'][i]['fields']):
                        if resp.json['objects'][i]['fields'][day]:
                            # Ekranda gösterilen sınav etkinliklerinin istenildiği gibi
                            # gösterildiği kontrol edilir.
                            assert resp.json['objects'][i]['fields'][day] == etkinlikler[k + 1][i - 1]
                            etkinlik_sayisi += 1

                # Ekranda gösterilen sınav etkinliklerinin sayısının veri tabanından
                # dönen etkinlik sayısıyla eşit olduğu kontrol edilir.
                assert etkinlik_sayisi == len(sinav_etkinlikleri)

        sinav_etkinligi = SinavEtkinligi.objects.filter(bolum=unit, donem=Donem.guncel_donem())
        with BlockSave(SinavEtkinligi, query_dict={'published': False}):
            for se in sinav_etkinligi:
                se.published = False
                se.save()
Beispiel #43
0
    def test_danisman_atama(self):
        """
        Danışmanı atanamayan öğrenciler öğrenci işleri tarafından atılır.
        Danışman atama iş akışının ilk adımında öğrenci programı seçilir.

        Seçilen öğrenciye ait veritabanından dönen öğrenci programı sayısı ile
        sunucudan dönen öğrenci program sayısının eşitliği karşılaştırılıp test edilir.

        İkinci adımında ise atanacak danışman seçilir.

        Veritabanından dönen danışmanların sayısı ile sunucudan dönen danışmaların sayısının
        eşitliği karşılaştırılıp test edilir.

        Üçüncü adımında ise danışman kaydedilir.

        Mesaj kutusunda danışman ataması yapılan öğrencinin ad ve soyad bilgilerinin olup
        olmadığı test edilir.

        """

        # Kullanıcıya login yaptırılır.
        log_bucket_count = len(log_bucket.get_keys())
        version_bucket_keys = version_bucket.get_keys()

        self.prepare_client('/danisman_atama', username='******')

        resp = self.client.post(id="RnKyAoVDT9Hc89KEZecz0kSRXRF",
                                model="OgrenciProgram",
                                param="ogrenci_id",
                                wf="danisman_atama",
                                filters={
                                    'ogrenci_id': {
                                        'values':
                                        ["KhFizqvCaZGtTloAZoPH1Uy98Pw"],
                                        'type': "check"
                                    }
                                })

        # Öğrenciye ait programlar db'den seçilir.
        op = OgrenciProgram.objects.filter(
            ogrenci_id='RnKyAoVDT9Hc89KEZecz0kSRXRF')

        # Veritabanından öğrenciye ait  çekilen program sayısı ile sunucudan dönen program sayısının
        # eşitliği karşılaştırılıp test edilir.
        assert len(resp.json['forms']['form'][2]['titleMap']) == len(op)

        # Öğrenci programı seçilir.
        resp = self.client.post(model='OgrenciProgram',
                                form={
                                    'program': "UEGET7qn9CDj9VEj4n0nbQ7m89d",
                                    'sec': 1
                                })

        guncel_donem = Donem.guncel_donem()
        # Öğrencinin kayıtlı olduğu öğrenci programlarından biri seçilir.
        program = op[0]
        # Döneme ve birime kayıtlı olan danışmanların listesini tutar.
        donem_danisman = DonemDanisman.objects.filter(
            donem=guncel_donem, bolum=program.program.birim)

        # Veritabanından dönen dönem danışmanların sayısı ile sunucudan dönen dönem  danışmanlarının
        # sayısının eşitliğini karşılaştırıp test eder.
        assert len(donem_danisman) == len(
            resp.json['forms']['form'][2]['titleMap'])

        # Danışman seçilir.
        resp = self.client.post(model='OgrenciProgram',
                                form={
                                    'donem_danisman':
                                    'Js2goP48yA183oMDAN8uM5GOExM',
                                    'sec': 1
                                })

        # save() işlemi meta paremetresi olmadan çalıştırıldığı için aktivite kaydının tutulmaması
        # ve aynı kalması beklenir.
        assert len(log_bucket.get_keys()) == log_bucket_count
        # Yeni versiyon kayıt keyleri alınır.
        yeni_versiyon_keyleri = list(
            set(version_bucket.get_keys()) - set(version_bucket_keys))

        # ogrenci_program modeline ait olan versiyon keyi alınır.
        op_versiyon_key = list(
            filter(
                lambda x: version_bucket.get(x).data['model'] ==
                'ogrenci_program', yeni_versiyon_keyleri))[0]
        # Seçilen danışmanın personel keyi bulunur.
        danisman_key = DonemDanisman.objects.get(
            'Js2goP48yA183oMDAN8uM5GOExM').okutman.personel.key
        # Versiyon loglarındaki danışman id si ile seçilen danısmanın id sinin uyuştuğu kontrol edilir.
        assert version_bucket.get(
            op_versiyon_key).data['data']['danisman_id'] == danisman_key

        ogrenci = Ogrenci.objects.get('RnKyAoVDT9Hc89KEZecz0kSRXRF')
        assert ogrenci.ad + ' ' + ogrenci.soyad in resp.json['msgbox']['msg']
Beispiel #44
0
    def test_ogrenci_sinav_programi_goruntule(self):

        user = User.objects.get(username='******')
        unit = user.role_set[0].role.unit
        sinav_etkinligi = SinavEtkinligi.objects.filter(
            bolum=unit, donem=Donem.guncel_donem())
        with BlockSave(SinavEtkinligi, query_dict={'published': True}):
            for se in sinav_etkinligi:
                se.published = True
                se.save()
        # İlgili öğrenci bulunur.
        ogrenci = Ogrenci.objects.get(user=user)
        ogrenci_adi = ogrenci.__unicode__()
        sinav_etkinlikleri = aktif_sinav_listesi(ogrenci)

        for i in range(2):

            # Testi çalıştırılacak iş akışı seçilir.
            self.prepare_client('/ogrenci_sinav_programi_goruntule', user=user)

            cond = False if i == 0 else True

            # İlk test yayınlanmış sınav etkinliğinin olmaması durumudur.
            # Bu yüzden Sınav Etkinliği modelinin published fieldı False yapılır.

            # İkinci test yayınlanmış sınav etkinliğinin olması durumudur.
            # Bu yüzden Sınav Etkinliği modelinin published fieldı True yapılır.
            with BlockSave(SinavEtkinligi, query_dict={'published': cond}):
                for etkinlik in sinav_etkinlikleri:
                    etkinlik.published = cond
                    etkinlik.save()

            resp = self.client.post()

            # Yayınlanmış sınav etkinliği bulunmaması durumunda Uyarı vermesi beklenir.
            if i == 0:
                assert resp.json['msgbox']['title'] == "Uyarı!"

            # Yayınlanmış sınav etkinliği olması durumunda öğretim görevlisinin adının
            # bulunduğu bir sınav takvimi gösterilmesi beklenir.
            else:

                # Öğrencinin güncel dönemde aktif şube
                # sayısının 7 olması beklenir.
                assert len(ogrenci.donem_subeleri()) == 7

                # Sınav etkinlikleri sayısının 7 olması beklenir.
                assert len(sinav_etkinlikleri) == 7

                # Sınav etkinliklerinin tarihe göre küçükten büyüğe sıralandığı
                # kontrol edilir.
                assert sinav_etkinlikleri[0].tarih <= sinav_etkinlikleri[
                    -1].tarih

                etkinlikler = map_etkinlik_hafta_gunleri(sinav_etkinlikleri)

                # Sınav etkinliklerinin etkinlikler sözlüğü içerisinde istenildiği
                # gibi yerleştirildiği kontrol edilir.
                for etkinlik in sinav_etkinlikleri:
                    assert etkinlik.tarih.isoweekday() in etkinlikler
                    assert etkinlik.__unicode__() in etkinlikler[
                        etkinlik.tarih.isoweekday()]

                # Yayınlanmış sınav etkinliği olması durumunda öğretim görevlisinin adının
                # bulunduğu bir sınav takvimi gösterilmesi beklenir.
                assert ogrenci_adi in resp.json['forms']['schema']["title"]

                etkinlik_sayisi = 0

                for i in range(1, len(resp.json['objects'])):
                    for k, day in enumerate(resp.json['objects'][i]['fields']):
                        if resp.json['objects'][i]['fields'][day]:
                            # Ekranda gösterilen sınav etkinliklerinin istenildiği gibi
                            # gösterildiği kontrol edilir.
                            assert resp.json['objects'][i]['fields'][
                                day] == etkinlikler[k + 1][i - 1]
                            etkinlik_sayisi += 1

                # Ekranda gösterilen sınav etkinliklerinin sayısının veri tabanından
                # dönen etkinlik sayısıyla eşit olduğu kontrol edilir.
                assert etkinlik_sayisi == len(sinav_etkinlikleri)

        sinav_etkinligi = SinavEtkinligi.objects.filter(
            bolum=unit, donem=Donem.guncel_donem())
        with BlockSave(SinavEtkinligi, query_dict={'published': False}):
            for se in sinav_etkinligi:
                se.published = False
                se.save()
Beispiel #45
0
    def test_guncel_donem_degistirme(self):
        """
        Güncel Dönem Değiştirme iş akışında güncel dönem seçilir,
        kaydedilir, bilgi verilir.
        Seçilen dönemin güncel dönem olarak kaydedilip kaydedilmediği test edilir.
        Sunucudan dönen cevapta msgboz olup olmadığı test edilir.

        Testte üretilen dataların diğer testleri kırmaması için değişiklikler geri alınır.

        """
        log_bucket_count = len(log_bucket.get_keys())
        log_bucket_keys = log_bucket.get_keys()
        version_bucket_keys = version_bucket.get_keys()

        # ögrenci_isleri_1 kullanıcısı seçilir.
        user = User.objects.get(username='******')

        # guncel_donem_degistirme iş akışı başlatılır.
        self.prepare_client('/guncel_donem_degistirme', user=user)
        self.client.post()

        ilk_guncel_donem = Donem.guncel_donem()

        # Seçilen dönem
        secilen_guncel_donem_key = 'SBx09BKCv86hp53HGVT2i7vBxGN'

        # Yeni dönem seçilir ve kaydedilir.
        resp = self.client.post(form={'guncel_donem': secilen_guncel_donem_key, 'kaydet': 1})
        time.sleep(1)

        # Save işlemi meta_data parametresi ile yapıldığından aktivite kaydının tutulması ve
        # bir artması beklenir.
        assert len(log_bucket.get_keys()) == log_bucket_count + 1
        # Yeni log kaydının keyi bulunur.
        yeni_log_key = list(set(log_bucket.get_keys()) - set(log_bucket_keys))[0]
        # WF isminin doğruluğu kontrol edilir.
        assert log_bucket.get(yeni_log_key).data['wf_name'] == 'guncel_donem_degistirme'
        # Her bir save işleminde version logları tutulduğundan yeni kayıtlar birikir.
        yeni_versiyon_kayitlari = list(set(version_bucket.get_keys()) - set(version_bucket_keys))
        # Bu kayıtlardan donemle ilgili olanları süzülür.
        donem_kayitlari = list(filter(lambda x: version_bucket.get(x).data['model'] == 'donem',
                                      yeni_versiyon_kayitlari))
        # Oluşturma zamanına göre sıralanır.
        sirali_donem_kayitlari = sorted(donem_kayitlari,
                                        key=lambda x: version_bucket.get(x).data['timestamp'])
        # Son kaydın güncel field'ının True olduğu kontrol edilir.
        assert version_bucket.get(sirali_donem_kayitlari[-1]).data['data']['guncel'] == True
        # Son kaydın dönem key'inin verilen key olduğu kontrol edilir.
        assert version_bucket.get(sirali_donem_kayitlari[-1]).data[
                   'key'] == 'SBx09BKCv86hp53HGVT2i7vBxGN'
        # Bir önceki dönem kaydının guncel field'ının False olduğu kontrol edilir.
        # Bunun anlamı yeni güncel dönem kaydedilirken, öncelikle güncel olan dönemin güncel fieldı
        # False yapılır ardından yeni istenilen dönem güncel olarak kaydedilir.
        assert version_bucket.get(sirali_donem_kayitlari[-2]).data['data']['guncel'] == False
        # Yeni log kaydının indexleri getirilir.
        indexes = log_bucket.get(yeni_log_key).indexes
        # Belirtilen indexlerin doğru tutulduğu kontrol edilir.
        assert ('user_id_bin', self.client.current.user_id) in indexes
        assert ('wf_name_bin', self.client.current.workflow_name) in indexes
        assert yeni_log_key in log_bucket.get_index('user_id_bin',
                                                    self.client.current.user_id).results
        assert yeni_log_key in log_bucket.get_index('wf_name_bin',
                                                    self.client.current.workflow_name).results

        # Güncel dönem olarak kaydedilip kaydedilmediği test edilir.
        assert Donem.guncel_donem().key == secilen_guncel_donem_key

        assert 'msgbox' in resp.json

        yeni_guncel_donem = Donem.guncel_donem()
        ilk_guncel_donem.guncel = True
        ilk_guncel_donem.blocking_save()
        yeni_guncel_donem.ogretim_yili.blocking_delete()
        yeni_guncel_donem.reload()
        assert yeni_guncel_donem.guncel == False
        assert ilk_guncel_donem.guncel == True
        assert Donem.guncel_donem().key == ilk_guncel_donem.key
Beispiel #46
0
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')
    def test_danisman_atama(self):
        """
        Danışmanı atanamayan öğrenciler öğrenci işleri tarafından atılır.
        Danışman atama iş akışının ilk adımında öğrenci programı seçilir.

        Seçilen öğrenciye ait veritabanından dönen öğrenci programı sayısı ile
        sunucudan dönen öğrenci program sayısının eşitliği karşılaştırılıp test edilir.

        İkinci adımında ise atanacak danışman seçilir.

        Veritabanından dönen danışmanların sayısı ile sunucudan dönen danışmaların sayısının
        eşitliği karşılaştırılıp test edilir.

        Üçüncü adımında ise danışman kaydedilir.

        Mesaj kutusunda danışman ataması yapılan öğrencinin ad ve soyad bilgilerinin olup
        olmadığı test edilir.

        """

        # Kullanıcıya login yaptırılır.
        self.prepare_client('/danisman_atama', username='******')

        resp = self.client.post(id="RnKyAoVDT9Hc89KEZecz0kSRXRF",
                                model="OgrenciProgram",
                                param="ogrenci_id",
                                wf="danisman_atama",
                                filters={
                                    'ogrenci_id': {
                                        'values':
                                        ["KhFizqvCaZGtTloAZoPH1Uy98Pw"],
                                        'type': "check"
                                    }
                                })

        # Öğrenciye ait programlar db'den seçilir.
        op = OgrenciProgram.objects.filter(
            ogrenci_id='RnKyAoVDT9Hc89KEZecz0kSRXRF')

        # Veritabanından öğrenciye ait  çekilen program sayısı ile sunucudan dönen program sayısının
        # eşitliği karşılaştırılıp test edilir.
        assert len(resp.json['forms']['form'][2]['titleMap']) == len(op)

        # Öğrenci programı seçilir.
        resp = self.client.post(model='OgrenciProgram',
                                form={
                                    'program': "UEGET7qn9CDj9VEj4n0nbQ7m89d",
                                    'sec': 1
                                })

        guncel_donem = Donem.guncel_donem()
        # Öğrencinin kayıtlı olduğu öğrenci programlarından biri seçilir.
        program = op[0]
        # Döneme ve birime kayıtlı olan danışmanların listesini tutar.
        donem_danisman = DonemDanisman.objects.filter(
            donem=guncel_donem, bolum=program.program.birim)

        # Veritabanından dönen dönem danışmanların sayısı ile sunucudan dönen dönem  danışmanlarının
        # sayısının eşitliğini karşılaştırıp test eder.
        assert len(donem_danisman) == len(
            resp.json['forms']['form'][2]['titleMap'])

        # Danışman seçilir.
        resp = self.client.post(model='OgrenciProgram',
                                form={
                                    'donem_danisman':
                                    'Js2goP48yA183oMDAN8uM5GOExM',
                                    'sec': 1
                                })

        ogrenci = Ogrenci.objects.get('RnKyAoVDT9Hc89KEZecz0kSRXRF')
        assert ogrenci.ad + ' ' + ogrenci.soyad in resp.json['msgbox']['msg']
    def test_donem_danismanlari(self):
        """
        Dönem danışmanları iş akışı başlattıktan sonra;

        Sunucudan dönen bölüme ait dönem danışmanlarının sayısı ile
        veritabanından çekilen dönem danışmanlarının sayısı
        karşılaştırılıp test edilir.

        İş akışının ikinci adımında seçilen danışmanlar kaydedilir.

        Seçilen danışmanlarının  veritabanına kaydedilip edilmediğini kontrol edilir ve
        seçilenen danışmanlar kaydedildikten sonra, sunucudan dönen cevapta danışman
        kayıt sayılarında degişiklik olup olmadığı test edilir.

        """

        # Veritabanından bölüm başkanı kullanıcısı seçilir.
        usr = User.objects.get(username='******')

        # Kullanıcıya login yaptırılır.
        self.prepare_client('/donem_danismanlari', user=usr)
        resp = self.client.post()

        # Kullanıcının kayıtlı olduğu bölüm.
        bolum = usr.role_set[0].role.unit

        donem = Donem.guncel_donem()

        # Db'den varolan danışman  kayıtları seçilir.
        count_of_danisman = len(
            DonemDanisman.objects.filter(donem=donem, bolum=bolum))

        num_of_danisman = 0
        for okutman in resp.json['forms']['model']['Okutmanlar']:
            if okutman['secim']:
                num_of_danisman += 1

        # Sunucudan dönen danışman kayıtlarının sayısı ile veritabanından çekilen
        # danışman kayıtlarının sayısının eşitliği karşılşatılırıp test edilir.
        assert num_of_danisman == count_of_danisman

        # 2 tane daha danışman seçilir.
        okutmanlar = [{
            'ad_soyad': "Yalın Seven",
            'secim': "true",
            'key': "Bf1CPIKs6txfhvlBQ7jqhy0iwv"
        }, {
            'ad_soyad': "Uluğbey Bilgin",
            'secim': "true",
            'key': "YhkwdYaGFnVzWMpULy6unvuON1A"
        }, {
            'ad_soyad': "Umuşan Gül",
            'secim': 'true',
            'key': "VYpVNI9vfWYIz3uGIBl81srlnrZ"
        }, {
            'ad_soyad': "Henife Şener",
            'secim': '',
            'key': "G2XjlaJMX0FUZX84aoIeiVCqZMR"
        }]

        # Seçilen dönem danışmanları kaydedilir.
        self.client.post(form={'kaydet': 1, 'Okutmanlar': okutmanlar})
        time.sleep(1)

        # Eklenen danışman kayıtlarının veritabanına kaydedilip kaydedilmediğini test eder.
        assert len(DonemDanisman.objects.filter(donem=donem, bolum=bolum)) == 3

        # İş akışı tekrardan başlatılır.
        self.client.set_path('/donem_danismanlari')
        resp = self.client.post()

        num_of_danisman = 0
        for okutman in resp.json['forms']['model']['Okutmanlar']:
            if okutman['secim']:
                num_of_danisman += 1

        # Eklenen danışmanlar kaydedildikten sonra, sunucudan dönen cevapta danışman kayıt sayıların
        # doğruluğu test edilir.
        assert num_of_danisman == 3

        for dd in DonemDanisman.objects.filter(donem=donem, bolum=bolum):
            if not dd.okutman.key == 'Bf1CPIKs6txfhvlBQ7jqhy0iwv':
                dd.delete()
    def test_okutman_ders_ucreti_goruntuleme(self):
        for loop in range(2):
            # ogretim_elemani_2 kullanıcısıyla giriş yapılır.
            user = User.objects.get(username='******')
            # testi yazılacak iş akışı seçilir.
            self.prepare_client('/okutman_ders_ucreti_goruntuleme', user=user)
            self.client.post()

            if loop == 0:
                for i in range(2):


                    # 2016 yılı Mayıs ayı seçilir. Veritabanında seçilen yıl ve
                    #  ayı içeren dönem bulunmamaktadır. 'Dönem Bulunamadı' başlıklı
                    # hata mesajının çıkması beklenir.
                    resp = self.client.post(form={"ay_sec": 5, "yil_sec": 2013, "sec": 1})
                    assert resp.json['forms']['schema']["title"] == "Dönem Bulunamadı"

                    if i == 0:
                        # İlk döngüde hata mesajından sonra eğer geriye dönülmesi seçilirse,
                        # tarih seçme ekranına geri dönmesi beklenir.
                        resp = self.client.post(form={"iptal": "null", "geri_don": 1, "sec": 1}, flow="tarih_sec")
                        assert resp.json['forms']['schema'][
                                   "title"] == "Puantaj Tablosu Hazırlamak İstediğiniz Yıl ve Ayı Seçiniz"

                    if i == 1:
                        # Eğer iptal butonuna basılırsa, işem iptali hakkında bilgilendirme
                        # mesajı çıkması beklenir.
                        resp = self.client.post(form={"iptal": 1, "geri_don": "null", "sec": 1},
                                                flow="islem_iptali_bilgilendir")
                        assert resp.json["msgbox"]["title"] == "Durum Mesajı" and "iptal" in resp.json["msgbox"]["msg"]

            if loop == 1:
                # Geçerli bir dönemin bulunduğu tarih seçilir.
                resp = self.client.post(form={"ay_sec": 11 , "yil_sec": 2016, "sec": 1})

                # Ders ücreti hesaplama türü seçim ekranına gelmesi beklenir.
                assert resp.json['forms']['schema'][
                           "title"] == u"Puantaj Tablosu Hesaplama Türü Seçiniz"

                # Tür seçildikten sonra ekrana Puantaj Tablosu çıkarılması beklenir.
                resp = self.client.post(form={"ek_ders": 'null', "ders": 1})
                assert "PUANTAJ TABLOSU" in resp.json['forms']['schema']["title"]

                # Kullanıcı adından öğretim görevlisinin adı soyadı bulunur.
                # Oluşturulan puantaj tablosunun doğru öğretim görevlisi adına
                # oluşturulup oluşturulmadığı kontrol edilir.
                okutman = user.personel.okutman
                okutman_adi = okutman.__unicode__()

                # Bir döneme denk geldiği kontrol edilir.
                donem_list = Donem.takvim_ayina_rastlayan_donemler(2016, 11)
                assert len(donem_list) == 1

                ders_etkinlik_list = doneme_gore_okutman_etkinlikleri(donem_list, okutman, False)

                # Etkinlik olan günlerin etkinlik listede olduğu kontrol edilir.
                for etkinlik in DersEtkinligi.objects.filter(donem=donem_list[0], okutman=okutman, ek_ders=False):
                    assert etkinlik.gun in ders_etkinlik_list[0]

                # Personel izin listesi getirilir.
                personel_izin_list = personel_izin_gunlerini_getir(okutman, 2016, 11)

                birim_unit = Unit.objects.get(yoksis_no=okutman.donemdeki_gorev_yeri(donem_list[0]))
                resmi_tatil_list = resmi_tatil_gunleri_getir(birim_unit,2016,5)
                assert 19 and 1 in resmi_tatil_list[0]

                tarih_araligi = ders_etkinligine_gore_tarih_araligi(donem_list, 2016, 11, birim_unit)
                resmi_tatil_list = resmi_tatil_gunleri_getir(birim_unit, 2016, 11)

                aylik_plan = okutman_aylik_plani(donem_list, ders_etkinlik_list,
                                    resmi_tatil_list, personel_izin_list,
                                    tarih_araligi,2016, 11)

                son_gun = yil_ve_aya_gore_ilk_ve_son_gun(2016, 11)[1].day

                for i in range(son_gun):
                    if resp.json['objects'][1]['fields'][" %i"%(i+1)]== ' ':
                        assert i+1 not in aylik_plan[0]
                    elif resp.json['objects'][1]['fields'][" %i"%(i+1)]== 'İ':
                        assert aylik_plan[0][i+1] == 'İ'
                    elif resp.json['objects'][1]['fields'][" %i"%(i+1)]== 'R':
                        assert aylik_plan[0][i+1] == 'R'
                    else:
                        hafta_gun = date(2016,11,i+1).isoweekday()

                        assert resp.json['objects'][1]['fields'][" %i"%(i+1)] == str(ders_etkinlik_list[0][hafta_gun])
                        assert resp.json['objects'][1]['fields'][" %i"%(i+1)] == str(aylik_plan[0][i+1])

                # Personel'in izin günlerinin doğru olup olmadığı test edilir.
                assert personel_izin_list == [16, 17, 18, 19, 20, 21]

                # Puantaj tablosu'nda öğretim görevlisinin isminin olduğu test edilir.
                assert okutman_adi.upper() in resp.json['forms']['schema']["title"].upper()
    def test_ders_ucreti_hesaplama(self):

        for loop in range(3):
            # mutemet kullanıcısıyla giriş yapılır.
            user = User.objects.get(username='******')
            # testi yazılacak iş akışı seçilir.
            self.prepare_client('/ders_ucreti_hesaplama', user=user)
            self.client.post()

            if loop == 0:
                for i in range(2):

                    # 2016 yılı Aralık ayı seçilir. Veritabanında seçilen yıl ve

                    #  ayı içeren dönem bulunmamaktadır. 'Dönem Bulunamadı' başlıklı
                    # hata mesajının çıkması beklenir.

                    resp = self.client.post(form={
                        "ay_sec": 5,
                        "yil_sec": 2013,
                        "sec": 1
                    })
                    assert resp.json['forms']['schema'][
                        "title"] == "Dönem Bulunamadı"

                    if i == 0:
                        # İlk döngüde hata mesajından sonra eğer geriye dönülmesi seçilirse,
                        # tarih seçme ekranına geri dönmesi beklenir.
                        resp = self.client.post(form={
                            "iptal": "null",
                            "geri_don": 1,
                            "sec": 1
                        },
                                                flow="tarih_sec")
                        assert resp.json['forms']['schema'][
                            "title"] == "Puantaj Tablosu Hazırlamak İstediğiniz Yıl ve Ayı Seçiniz"

                    if i == 1:
                        # Eğer iptal butonuna basılırsa, işlem iptali hakkında bilgilendirme
                        # mesajı çıkması beklenir.
                        resp = self.client.post(
                            form={
                                "iptal": 1,
                                "geri_don": "null",
                                "sec": 1
                            },
                            flow="islem_iptali_bilgilendir")
                        assert resp.json["msgbox"][
                            "title"] == "Durum Mesajı" and "iptal" in resp.json[
                                "msgbox"]["msg"]

            if loop == 1:

                # Geçerli bir dönemin bulunduğu tarih seçildiğinde, mutemetin
                # işlem yaptığı birime ait öğretim görevlilerinin isimlerinin
                # olduğu bir form gelmesi beklenir.
                resp = self.client.post(form={
                    "ay_sec": 11,
                    "yil_sec": 2016,
                    "sec": 1
                })
                assert resp.json['forms']['schema'][
                    "title"] == "Okutman Seçiniz"

                # Ekrana gelen öğretim görevlisi sayısıyla veritabanındaki sayının
                # aynı olması beklenir.
                birim_no = self.client.current.role.unit.yoksis_no
                assert len(
                    resp.json['forms']['model']["OkutmanListesi"]) == len([
                        o for o in Okutman.objects
                        for gorev_birimi in o.GorevBirimi
                        if gorev_birimi.yoksis_no == birim_no
                        and gorev_birimi.donem == Donem.guncel_donem()
                    ])

                okutman_listesi = resp.json['forms']['model']["OkutmanListesi"]

                # Varsayılan olarak tüm öğretim görevlileri seçili halde gelir.
                # Seçimleri kaldırılır.
                for i in range(len(okutman_listesi)):
                    okutman_listesi[i]['secim'] = False

                for i in range(2):
                    # Hiçbir öğretim görevlisi seçmeden ilerlemeye çalışıldığında, işlem
                    # yapacak öğretim görevlisi olmadığından hata mesajı göstermesi beklenir.
                    resp = self.client.post(form={
                        "OkutmanListesi": okutman_listesi,
                        "sec": 1
                    })
                    assert resp.json['forms']['schema'][
                        "title"] == "Öğretim Görevlisi Seçmelisiniz"

                    if i == 0:
                        # İlk döngüde hata mesajından sonra eğer geriye dönülmesi seçilirse,
                        # öğretim görevlisi seçme ekranına geri dönmesi beklenir.
                        resp = self.client.post(form={
                            "iptal": "null",
                            "geri_don": 1,
                            "sec": 1
                        },
                                                flow="okutman_sec")
                        assert resp.json['forms']['schema']["title"] == \
                               "Okutman Seçiniz"
                    if i == 1:
                        # Eğer iptal butonuna basılırsa, işlem iptali hakkında bilgilendirme
                        # mesajı çıkması beklenir.
                        resp = self.client.post(
                            form={
                                "iptal": 1,
                                "geri_don": "null",
                                "sec": 1
                            },
                            flow="islem_iptali_bilgilendir")
                        assert resp.json["msgbox"][
                            "title"] == "Durum Mesajı" and "iptal" in resp.json[
                                "msgbox"]["msg"]

            if loop == 2:
                # Geçerli bir tarih ve öğretim görevlisi seçilmesi senaryosu.
                resp = self.client.post(form={
                    "ay_sec": 5,
                    "yil_sec": 2016,
                    "sec": 1
                })
                okutman_listesi = resp.json['forms']['model']["OkutmanListesi"]

                for i in range(3):

                    birim_no = self.client.current.role.unit.yoksis_no
                    birim_unit = Unit.objects.get(yoksis_no=birim_no)

                    # 2016 yılı Şubat ayı verilir. Bahar dönemi ders başlangıcı 21 Şubat olduğu
                    # için tarih aralığının (21,29) olması kontrol edilir.
                    if i == 0:
                        donem_list = Donem.takvim_ayina_rastlayan_donemler(
                            2016, 2)
                        assert len(donem_list) == 1

                        tarih_araligi = ders_etkinligine_gore_tarih_araligi(
                            donem_list, 2016, 2, birim_unit)
                        assert tarih_araligi == [(21, 29)]

                    # 2016 yılı Temmuz ayı verilir. Temmuz ayı Bahar dönemi bitişi ve Yaz dönemi başlangıcıdır.
                    # 2 döneme denk gelir. Ama Temmuz ayında sadece yaz döneminin ders etkinlikleri vardır.
                    # 2 döneme rastlayıp sadece 1 dönemin ders etkinliklerine rastladığı için, tarih aralığının
                    # 2 tuple dan oluşması ve bir tanesinin birbirine eşit olması beklenir.
                    if i == 1:
                        donem_list = Donem.takvim_ayina_rastlayan_donemler(
                            2016, 7)
                        assert len(donem_list) == 2

                        tarih_araligi = ders_etkinligine_gore_tarih_araligi(
                            donem_list, 2016, 7, birim_unit)

                        assert tarih_araligi == [(1, 0), (15, 31)]

                    # 2016 yılı Mayıs ayı verilir. Mayıs ayı Bahar dönemine rastlar.
                    # 19 Mayıs ve 1 Mayıs'ın resmi tatil listesinde olması beklenir.
                    else:
                        donem_list = Donem.takvim_ayina_rastlayan_donemler(
                            2016, 5)
                        assert len(donem_list) == 1
                        resmi_tatil_list = resmi_tatil_gunleri_getir(
                            birim_unit, 2016, 5)

                        assert 19 and 1 in resmi_tatil_list[0]
                        tarih_araligi = ders_etkinligine_gore_tarih_araligi(
                            donem_list, 2016, 5, birim_unit)

                        assert tarih_araligi == [(1, 31)]

                # Varsayılan olarak tüm öğretim görevlileri seçili olarak
                # gelmesini kontrol eder.
                for i in range(len(okutman_listesi)):
                    assert okutman_listesi[i]['secim'] == True

                # Hepsi seçili olarak bir sonraki adıma ilerlenir.
                resp = self.client.post(form={
                    "OkutmanListesi": okutman_listesi,
                    "sec": 1
                })

                # Ders ücreti hesaplama türü seçim ekranına gelmesi beklenir.
                assert resp.json['forms']['schema'][
                    "title"] == "Puantaj Tablosu Hesaplama Türü Seçiniz"

                resp = self.client.post(form={"ek_ders": 'null', "ders": 1})

                for j, okutman in enumerate(okutman_listesi):
                    okutman = Okutman.objects.get(okutman['key'])

                    ders_etkinlik_list = doneme_gore_okutman_etkinlikleri(
                        donem_list, okutman, False)

                    # Etkinlik olan günlerin etkinlik listede olduğu kontrol edilir.
                    for etkinlik in DersEtkinligi.objects.filter(
                            donem=donem_list[0], okutman=okutman,
                            ek_ders=False):
                        assert etkinlik.gun in ders_etkinlik_list[0]

                    # Personel izin listesi getirilir.
                    personel_izin_list = personel_izin_gunlerini_getir(
                        okutman, 2016, 5)

                    aylik_plan = okutman_aylik_plani(donem_list,
                                                     ders_etkinlik_list,
                                                     resmi_tatil_list,
                                                     personel_izin_list,
                                                     tarih_araligi, 2016, 5)

                    son_gun = yil_ve_aya_gore_ilk_ve_son_gun(2016, 5)[1].day

                    for i in range(son_gun):
                        if resp.json['objects'][j +
                                                1]['fields'][" %i" %
                                                             (i + 1)] == ' ':
                            assert i + 1 not in aylik_plan[0]
                        elif resp.json['objects'][j +
                                                  1]['fields'][" %i" %
                                                               (i + 1)] == 'İ':
                            assert aylik_plan[0][i + 1] == 'İ'
                        elif resp.json['objects'][j +
                                                  1]['fields'][" %i" %
                                                               (i + 1)] == 'R':
                            assert aylik_plan[0][i + 1] == 'R'
                        else:
                            hafta_gun = date(2016, 5, i + 1).isoweekday()

                            assert resp.json['objects'][j + 1]['fields'][
                                " %i" % (i + 1)] == str(
                                    ders_etkinlik_list[0][hafta_gun])
                            assert resp.json['objects'][j + 1]['fields'][
                                " %i" % (i + 1)] == str(aylik_plan[0][i + 1])

                    # Tür seçildikten sonra ekrana Puantaj Tablosu çıkarılması beklenir.
                    assert "PUANTAJ TABLOSU" in resp.json['forms']['schema'][
                        "title"]
    def test_ogrenci_ders_atama(self):
        """
        Öğrenci ders atama iş akışının ilk adımında öğrencinin
        kayıtlı olduğu programlardan biri seçilir.

        Veritabanından öğrenciye ait  çekilen program sayısı ile
        sunucudan dönen program sayısının eşitliği karşılaştırılıp
        test edilir.

        Veritabanından öğrenciye ait çekilen öğrenci dersi sayısı
        ile sunucudan dönen öğrenci dersi sayısının eşitliği
        karşılaştırılıp test edilir.

        İkinci adımında öğrencinin kayıtlı olduğu dersler listelenir
        ve yeni ders eklenir.

        Eklenen ders öğrencinin kayıtlı olduğu derslerde yok ise:

        - Ders kaydının eklenip eklenmediğ test edilir.
        - Sunucudan dönen cevapta msgbox'ın olup olmadığı test edilir.

        Eklenen ders öğrencinin kayıtlı olduğu derslerde var ise;
        ``self.client.current.task_data['cmd'] = 'ders_listele'`` olması beklenir.

        """
        # Kullanıcıya login yaptırılır.
        self.prepare_client("/ogrenci_ders_atama", username="******")
        resp = self.client.post(
            id="RnKyAoVDT9Hc89KEZecz0kSRXRF",
            param="ogrenci_id",
            filters={"ogrenci_id": {"values": ["RnKyAoVDT9Hc89KEZecz0kSRXRF"], "type": "check"}},
        )

        # Öğrencinin kayıtlı olduğu programlar.
        op = OgrenciProgram.objects.filter(ogrenci_id="RnKyAoVDT9Hc89KEZecz0kSRXRF")

        # Veritabanından öğrenciye ait  çekilen program sayısı ile
        # sunucudan dönen program sayısının eşitliği karşılaştırılıp test edilir.
        assert len(resp.json["forms"]["form"][2]["titleMap"]) == len(op)

        # Öğrenci programı seçilir.
        resp = self.client.post(form={"program": "UEGET7qn9CDj9VEj4n0nbQ7m89d", "sec": 1})

        # Öğrencinin kayıtlı olduğu dersler.
        od = OgrenciDersi.objects.filter(ogrenci_program_id="UEGET7qn9CDj9VEj4n0nbQ7m89d", donem=Donem.guncel_donem())

        len_of_od = len(od)

        # Veritabanından öğrenciye ait  çekilen öğrenci dersi sayısı ile
        # sunucudan dönen öğrenci dersi sayısının eşitliği karşılaştırılıp
        # test edilir.

        assert len(resp.json["forms"]["model"]["Dersler"]) == len_of_od

        # Yeni ders kaydı eklenir.
        dersler = [
            {"ders_adi": "Hukuk Stajı-A110 175", "key": "TumPjkBBhmLfr6OliLR4GEVpfzi"},
            {"key": "8G8yOtYattpuxjLbX8SkrAQS2D0", "ders_adi": "İmalat Sistemlerinde Rassal Modeller-A509 25"},
        ]

        resp = self.client.post(form={"ileri": 1, "Dersler": dersler})

        # Sunucudan dönen cevapta msgbox'ın olup olmadığı test edilir.
        assert "msgbox" in resp.json

        ogrenci_dersi = OgrenciDersi.objects.filter(
            ogrenci_program_id="UEGET7qn9CDj9VEj4n0nbQ7m89d", donem=Donem.guncel_donem()
        )
        time.sleep(1)

        # Dersin kaydeilip kaydedilmediği test edilir.
        assert len(ogrenci_dersi) == len_of_od + 2

        # İş akışı tekrardan başlatılır.
        self.client.set_path("/ogrenci_ders_atama")
        self.client.post(
            id="RnKyAoVDT9Hc89KEZecz0kSRXRF",
            param="ogrenci_id",
            filters={"ogrenci_id": {"values": ["RnKyAoVDT9Hc89KEZecz0kSRXRF"], "type": "check"}},
        )
        # Öğrenci programı seçilir.
        self.client.post(form={"program": "UEGET7qn9CDj9VEj4n0nbQ7m89d", "sec": 1})

        # Öğrencinin kayıtlı olduğu derslerden biri tekrar seçilir.
        dersler = [
            {"ders_adi": "Hukuk Stajı-A110 175", "key": "TumPjkBBhmLfr6OliLR4GEVpfzi"},
            {"key": "8G8yOtYattpuxjLbX8SkrAQS2D0", "ders_adi": "İmalat Sistemlerinde Rassal Modeller-A509 25"},
            {"key": "JVyg2mfRPpprbrIqndCtaIq69js", "ders_adi": "İmalat Sistemlerinde Rassal Modeller-M105 199"},
        ]

        self.client.post(form={"ileri": 1, "Dersler": dersler})

        # ders_listele adımında olup olmadığı test edilir.
        assert self.client.current.task_data["cmd"] == "ders_listele"

        # İş akışı tekrardan başlatılır.
        self.client.set_path("/ogrenci_ders_atama")
        self.client.post(
            id="RnKyAoVDT9Hc89KEZecz0kSRXRF",
            param="ogrenci_id",
            filters={"ogrenci_id": {"values": ["RnKyAoVDT9Hc89KEZecz0kSRXRF"], "type": "check"}},
        )

        # Öğrenci programı seçilir.
        self.client.post(form={"program": "UEGET7qn9CDj9VEj4n0nbQ7m89d", "sec": 1})

        # Öğrencinin kayıtlı olduğu derslerden biri formdan kaldırılır,
        # aynı derse ait başka sube eklenir.
        dersler = [
            {"key": "3VIGIsbbms9F2tyA0FQASIhDC8M", "ders_adi": "Hukuk Stajı-C607 290"},
            {"key": "8G8yOtYattpuxjLbX8SkrAQS2D0", "ders_adi": "İmalat Sistemlerinde Rassal Modeller-A509 25"},
        ]

        self.client.post(form={"ileri": 1, "Dersler": dersler})

        # ders_listele adımında olup olmadığı test edilir.
        assert self.client.current.task_data["cmd"] == "ders_listele"

        # test sonucu eklenen datalar silinir.
        OgrenciDersi.objects.filter(sube_id="TumPjkBBhmLfr6OliLR4GEVpfzi").delete()
        OgrenciDersi.objects.filter(sube_id="8G8yOtYattpuxjLbX8SkrAQS2D0").delete()
Beispiel #52
0
 def ders_yayinla(self):
     de = DersEtkinligi.objects.filter(bolum=self.current.role.unit, donem=Donem.guncel_donem())
     for d in de:
         d.published = True
         d.save()