Example #1
0
    def danisman_kaydet(self):
        """
        Seçilen öğretim elemanları danışman olarak kaydeder.

        """
        yoksis_no = self.current.task_data['unit_yoksis_no']
        unit = Unit.objects.get(yoksis_no=yoksis_no)
        donem = Donem.guncel_donem()
        danismanlar = self.current.input['form']['Okutmanlar']

        self.current.task_data['okutmanlar'] = []
        with BlockSave(DonemDanisman):
            for danisman in danismanlar:
                if danisman['secim']:
                    key = danisman['key']
                    okutman = Okutman.objects.get(key)
                    donem_danisman, is_new = DonemDanisman.objects.get_or_create(okutman=okutman, donem=donem,
                                                                                 bolum=unit)
                    if is_new:
                        user = okutman.personel.user if okutman.personel.user else okutman.harici_okutman.user
                        abstract_role = AbstractRole.objects.get("DANISMAN")
                        unit = Unit.objects.get(yoksis_no=self.current.task_data['unit_yoksis_no'])
                        role = Role(user=user, unit=unit, abstract_role=abstract_role)
                        role.save()

                    self.current.task_data['okutmanlar'].append(okutman.key)
Example #2
0
    def danisman_sec(self):
        """
        Seçilen bölümdeki öğretim elemanları listelenir.

        """
        unit = self.current.role.unit
        self.current.task_data['unit_yoksis_no'] = unit.yoksis_no
        donem = Donem.guncel_donem(self.current)
        okutmanlar = [
            o for o in Okutman.objects for gorev_birimi in o.GorevBirimi
            if gorev_birimi.yoksis_no == unit.yoksis_no
            and gorev_birimi.donem.key == donem.key
        ]
        _form = DonemDanismanListForm(current=self,
                                      title=_(u"Okutman Seçiniz"))
        for okt in okutmanlar:
            try:
                DonemDanisman.objects.get(donem=donem, okutman=okt, bolum=unit)
                _form.Okutmanlar(secim=True,
                                 ad_soyad='%s %s' % (okt.ad, okt.soyad),
                                 key=okt.key)
            except ObjectDoesNotExist:
                _form.Okutmanlar(secim=False,
                                 ad_soyad='%s %s' % (okt.ad, okt.soyad),
                                 key=okt.key)

        self.form_out(_form)
        self.current.output["meta"]["allow_actions"] = False
        self.current.output["meta"]["allow_selection"] = False
        self.current.output["meta"]["allow_add_listnode"] = False
Example #3
0
    def okutman_sec(self):
        """
        Puantaj tablosunun hesaplanacağı okutmanların
        seçilmesine yarar. Bu okutmanlar işlem yapılan birime göre
        sorgulatılır. Bilgisayar Mühendisliği için yapılan sorguda
        sadece Bilgisayar Mühendisliği'nde bulunan okutmanlar ekrana
        gelecektir.
        """

        birim_no = self.current.role.unit.yoksis_no
        _form = OkutmanListelemeForm(current=self.current,
                                     title=_(u"Okutman Seçiniz"))

        # TODO: ilgili doneme ait okutmanlar listelenmeli.
        okutmanlar = [
            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()
        ]

        for okutman in okutmanlar:
            _form.OkutmanListesi(secim=True,
                                 okutman=okutman.__unicode__(),
                                 key=okutman.key)

        _form.sec = fields.Button(_(u"İlerle"))
        self.form_out(_form)
Example #4
0
    def subelendirme_kaydet(self):
        """Şubelendirme Kaydet

        Şubelendirme formundan gelen dataları kaydeder.

        """

        sb = self.input['form']['Subeler']
        ders = self.current.task_data['ders_key']
        mevcut_subeler = Sube.objects.filter(ders_id=ders)
        with BlockSave(Sube):
            for s in sb:
                okutman = s['okutman']
                kontenjan = s['kontenjan']
                ad = s['ad']
                dis_kontenjan = s['dis_kontenjan']
                donem = Donem.guncel_donem()
                sube, is_new = Sube.objects.get_or_create(
                    okutman_id=okutman,
                    ders_id=ders,
                    kontenjan=kontenjan,
                    ad=ad,
                    dis_kontenjan=dis_kontenjan,
                    donem=donem)
                # mevcut_subelerden cikar
                mevcut_subeler = list(set(mevcut_subeler) - {sube})
                if is_new:
                    self.bilgilendirme_mesaji_yolla(sube)
                else:
                    self.current.task_data['yeni_okutmanlar'] = []
        # çıkarılan şube
        with BlockDelete(Sube):
            for s in mevcut_subeler:
                self.bilgilendirme_mesaji_yolla(s)
                s.delete()
    def yeni_ders(program,
                  personel,
                  donem=None,
                  ders_say=1,
                  ontanimli_sube=False):
        """
        Rastgele verileri ve parametre olarak verilen veriyi
        kullanarak yeni ders kaydı oluştururup kaydeder.
        Oluşturulan kayıtları liste olarak döndürür.

        Args:
            program (Program): Program nesnesi
            personel (Personel): Personel nesnesi
            donem (Donem) : Donem nesnesi
            ders_say : Oluşturulacak Ders sayısı

        Returns:
            Ders: Yeni ders listesi

        """
        yerel_kredi = random.choice(
            [2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 6, 6, 6, 8, 8])

        ders_list = []
        room_type_list = list(RoomType.objects)
        sube_olustur = Ders.ontanimli_sube_olustur
        if not ontanimli_sube:
            Ders.ontanimli_sube_olustur = lambda x: None
        for i in range(ders_say):
            d = Ders()
            d.ad = fake.lecture()
            d.ders_dili = random.choice(
                ["Turkce", "Turkce", "Turkce", "Ingilizce"])
            d.kod = ints(length=3)
            d.ects_kredisi = random.choice(
                [1, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 5, 5, 6, 6, 6, 8, 8])
            d.yerel_kredisi = yerel_kredi
            d.uygulama_saati = yerel_kredi / 2
            d.teori_saati = yerel_kredi / 2
            d.program = program
            # Güz dönemi ise program dönemleri tek, bahar dönemi ise çift
            d.program_donemi = random.choice(
                [1, 3, 5, 7] if donem.baslangic_tarihi in
                range(8, 11) else [2, 4, 6, 8])
            d.donem = donem or Donem.guncel_donem()
            d.ders_koordinatoru = personel
            for derslik_turu in random.sample(
                    room_type_list, random.randint(1, len(room_type_list))):
                d.DerslikTurleri.add(sinif_turu=derslik_turu,
                                     ders_saati=random.randint(1, 5))

            for degerlendirme_turu in [1, 2, 3, 4, 5, 6, 7]:
                d.Degerlendirme(tur=degerlendirme_turu,
                                sinav_suresi=random.choice([60, 90, 120]),
                                toplam_puana_etki_yuzdesi=random.choice(
                                    [20, 30, 40, 50]))
            d.save()
            ders_list.append(d)
        Ders.ontanimli_sube_olustur = sube_olustur
        return ders_list
Example #6
0
    def subelendirme_kaydet(self):
        """Şubelendirme Kaydet

        Şubelendirme formundan gelen dataları kaydeder.

        """

        sb = self.input['form']['Subeler']
        ders = self.current.task_data['ders_key']
        mevcut_subeler = Sube.objects.filter(ders_id=ders)
        with BlockSave(Sube):
            for s in sb:
                okutman = s['okutman']
                kontenjan = s['kontenjan']
                ad = s['ad']
                dis_kontenjan = s['dis_kontenjan']
                donem = Donem.guncel_donem()
                sube, is_new = Sube.objects.get_or_create(okutman_id=okutman, ders_id=ders,
                                                          kontenjan=kontenjan, ad=ad, dis_kontenjan=dis_kontenjan,
                                                          donem=donem)
                # mevcut_subelerden cikar
                mevcut_subeler = list(set(mevcut_subeler) - {sube})
                if is_new:
                    self.bilgilendirme_mesaji_yolla(sube)
                else:
                    self.current.task_data['yeni_okutmanlar'] = []
        # çıkarılan şube
        with BlockDelete(Sube):
            for s in mevcut_subeler:
                self.bilgilendirme_mesaji_yolla(s)
                s.delete()
Example #7
0
    def goster(self):
        """
        AkademikTakvim modelinden kullanıcıya gösterilecek takvime erişir ve bir tablo
        halinde çıktıya ekler.

        Akademik Takvim öğelerinin (takvim etkinlikleri) sırlaması önemli olduğu için
        OrderedDict kullanılmıştır. Data bu sözlüğün içinde sıralandığı haliyle
        seriyalize edilir.

        AKADEMIK_TAKVIM_ETKINLIKLERI önceden tanımlanmış ve sıralanmış bir etkinlikler
        toplamıdır. AkademikTakvim modeli ile birlikte models.ogrenci modülü içinde
        sıralı olarak tanımlanmıştır. Örn::

            AKADEMIK_TAKVIM_ETKINLIKLERI = [
            ('1', 'Yeni Öğrenci Ön Kayıt'),
            ('2', 'Güz Dönem Başlangıcı'),
            ('3', 'Derslerin Acılması'),
            ('4', 'Subelendirme ve Ders Programının Ilan Edilmesi'),

            ...
            ('53', 'Yarıyıl Sınavı Not Giriş'),
            ('54', 'Yarıyıl Sınavı Notlarının Öğrenciye Yayınlanmasi'),
            ('55', 'Öğretim Elemanı Yoklama Girişi'),
            ]

        Kayıtların herbiri bu öğeler için belirli bir tarih veya tarih aralığına denk gelmektedir.

        """
        self.current.output['client_cmd'] = [
            'show',
        ]
        etkinlikler = []

        ogretim_yili = OgretimYili.objects.get(
            yil=Donem.guncel_donem().baslangic_tarihi.year)
        akademik_takvim = get_akademik_takvim(self.current.role.unit,
                                              ogretim_yili)

        for e in Takvim.objects.order_by().filter(
                akademik_takvim=akademik_takvim):
            etkinlik = OrderedDict({})
            etkinlik[_(u'Etkinlik')] = dict(AKADEMIK_TAKVIM_ETKINLIKLERI).get(
                str(e.etkinlik), '')
            etkinlik[_(u'Başlangıç')] = format_datetime(
                e.baslangic) if e.baslangic else ''
            etkinlik[_(u'Bitiş')] = format_datetime(e.bitis) if e.bitis else ''
            etkinlikler.append(etkinlik)

        # cikti multirow table seklindedir.
        self.output['object'] = {
            "type": "table-multiRow",
            "fields": etkinlikler
        }
def yeni_donem():
    d = Donem()
    d.ad = random.choice(["Güz", "Güz", "Bahar", "Bahar", "Yaz"])
    d.baslangic_tarihi = datetime.datetime(random.randint(2015, 2017),
                                           random.randint(1, 12),
                                           random.randint(1, 15))
    d.bitis_tarihi = d.baslangic_tarihi + datetime.timedelta(random.randint(30, 180))
    d.guncel = random.choice(True)

    d.save()
    return d
Example #9
0
    def danisman_sec(self):
        """
        Birime kayıtlı danışman  biri seçilir.

        """
        self.current.task_data['program_id'] = self.current.input['form']['program']

        program = OgrenciProgram.objects.get(self.current.input['form']['program'])
        _form = DanismanSecimForm(current=self.current, title=_(u"Danışman Seçiniz"))
        _choices = prepare_choices_for_model(DonemDanisman, donem=Donem.guncel_donem(),
                                             bolum=program.program.birim)
        _form.donem_danisman = fields.Integer(choices=_choices)
        self.form_out(_form)
Example #10
0
def ders_arama(current):
    ogrenci = Ogrenci.objects.get(current.session['ogrenci_id'])
    mevcut_subeler = []
    for od in OgrenciDersi.objects.filter(ogrenci=ogrenci, donem=Donem.guncel_donem()):
        mevcut_subeler.append(od.sube)

    q = current.input.get('query')
    r = []

    for o in Sube.objects.search_on(*['ders_adi'], contains=q):
        if o not in mevcut_subeler:
            r.append((o.key, o.__unicode__()))

    current.output['objects'] = r
    def yeni_donem(donem_say=1, guncel=False):
        """
        Rastegele verilerle kampus listesi oluşturur.

        Args:
            donem_say (int): oluşturulacak donem sayısı
            guncel (bool): guncel donem bilgisi

        Return:
            donem_list (list): donem listesi

        """

        donemler = [
            ("Güz", 9, 2),
            ("Bahar", 2, 7),
            ("Yaz", 7, 9),
        ]
        donem_list = []

        for i in range(donem_say):
            ad, baslangic, bitis = random.choice(donemler)
            d = datetime.datetime.now()
            year = d.year
            baslangic_tarihi = datetime.datetime(d.year, baslangic, 1)
            if ad == "Güz":
                year += 1
            bitis_tarihi = datetime.datetime(year, bitis, 1)

            donem = Donem(ad="%s - %s" % (ad, year),
                          baslangic_tarihi=baslangic_tarihi,
                          bitis_tarihi=bitis_tarihi)

            if Donem.objects.filter(ad="%s - %s" % (ad, year)).count() < 1:
                if guncel:
                    for d in list(Donem.objects.filter()):
                        d.guncel = False
                        d.save()
                    donem.guncel = True
                donem.save()
                donem_list.append(donem)

            if Donem.objects.filter(guncel=True).count() < 1:
                donem.guncel = True
                donem.save()

        return donem_list
Example #12
0
    def ders_listele(self):
        """
        Öğrencinin kayıtlı olduğu dersleri listeler ve öğrenciye yeni dersler eklenir.

        """

        if 'program_key' and 'dersler' not in self.current.task_data:
            ogrenci_dersi_lst = []
            program_key = self.input['form']['program']
            self.current.task_data['program_key'] = program_key
            guncel_donem = Donem.guncel_donem(self.current)
            ogrenci_program = OgrenciProgram.objects.get(program_key)
            ogrenci_dersleri = OgrenciDersi.objects.filter(
                ogrenci_program=ogrenci_program, donem=guncel_donem)
            _form = DersSecimForm(current=self.current,
                                  title=_(u"Ders Seçiniz"))
            for ogrenci_dersi in ogrenci_dersleri:
                ogrenci_dersi_lst.append(ogrenci_dersi.key)
                _form.Dersler(key=ogrenci_dersi.sube.key,
                              ders_adi=ogrenci_dersi.sube.ders_adi)
            self.form_out(_form)
            self.current.task_data['ogrenci_dersi_lst'] = ogrenci_dersi_lst

        else:
            _form = DersSecimForm(current=self.current,
                                  title=_(u"Ders Seçiniz"))
            for ders in self.current.task_data['dersler']:
                try:
                    ogrenci_dersi = OgrenciDersi.objects.get(
                        sube_id=ders['key'],
                        ogrenci_id=self.current.session['ogrenci_id'])
                    if ogrenci_dersi.key not in self.current.task_data[
                            'ogrenci_dersi_lst']:
                        self.current.task_data['ogrenci_dersi_lst'].append(
                            ogrenci_dersi.key)

                except ObjectDoesNotExist:
                    _form.Dersler(key=ders['key'], ders_adi=ders['ders_adi'])

            for ogrenci_dersi_key in self.current.task_data[
                    'ogrenci_dersi_lst']:
                ogrenci_dersi = OgrenciDersi.objects.get(ogrenci_dersi_key)
                _form.Dersler(key=ogrenci_dersi.sube.key,
                              ders_adi=ogrenci_dersi.sube.ders_adi)

            self.form_out(_form)

        self.ders_secim_form_inline_edit()
        self.current.output["meta"]["allow_actions"] = True
Example #13
0
def ders_arama(current):
    ogrenci = Ogrenci.objects.get(current.session['ogrenci_id'])
    mevcut_subeler = []
    for od in OgrenciDersi.objects.filter(ogrenci=ogrenci,
                                          donem=Donem.guncel_donem()):
        mevcut_subeler.append(od.sube)

    q = current.input.get('query')
    r = []

    for o in Sube.objects.search_on(*['ders_adi'], contains=q):
        if o not in mevcut_subeler:
            r.append((o.key, o.__unicode__()))

    current.output['objects'] = r
Example #14
0
    def not_kaydet(self):
        """Okutmanın girmiş olduğu notların veritabanına kaydedilmesini
        sağlayan method.

        Bu method, önceden girilmiş olan notları veritabanı üzerinde
        güncellerken, key verisi olmayan not girişleri için veritabanı
        üzerinde yeni bir kayıt açmaktadır.

        """

        term = Donem.guncel_donem(self.current)
        sinav_key = self.current.task_data["sinav_key"]
        sube_key = self.current.task_data["sube"]

        sinav = Sinav.objects.get(sinav_key)
        ders = sinav.ders

        for ogrenci_not in self.current.task_data["notlar"]:

            try:
                ogr_data = OgrenciProgram.objects.get(
                    ogrenci_no=ogrenci_not['ogrenci_no'])

                if ogrenci_not['key']:  # Önceden girilmiş bir kayıt mı?
                    ogr_not = DegerlendirmeNot.objects.get(ogrenci_not['key'])
                else:
                    ogr_not = DegerlendirmeNot()

                ogr_not.puan = ogrenci_not['degerlendirme']
                ogr_not.aciklama = ogrenci_not['aciklama']
                ogr_not.ogrenci_no = ogrenci_not['ogrenci_no']
                ogr_not.donem = '%s' % term.ad
                ogr_not.yil = term.baslangic_tarihi.year
                ogr_not.ogretim_elemani = self.get_okutman_name_surname
                ogr_not.ders = ders
                ogr_not.sinav = sinav
                ogr_not.ogrenci = ogr_data.ogrenci
                ogr_not.sinav_tarihi = sinav.tarih
                ogr_not.save()

            except:
                pass

        # Okutman notları onayladığını (teslim ettiğini) bildirmişse

        if self.current.input['form']['not_onay']:
            sinav.degerlendirme = True
            sinav.save()
Example #15
0
    def donem_kontrol(self):
        """
        Seçilen ay ve yıla ait dönem olup olmadığını kontrol eder.
        """
        secilen_ay = self.input['form']['ay_sec']
        self.current.task_data["yil"] = self.input['form']['yil_sec']
        self.current.task_data["ay"] = secilen_ay

        # guncel olan ayın ismi getirilir.
        self.current.task_data["ay_isim"] = dict(AYLAR).get(secilen_ay)

        # TODO: aktif donem ve oncesine rastlayan donem varmi diye kontrol etmeliyiz.
        donem_list = Donem.takvim_ayina_rastlayan_donemler(
            self.current.task_data["yil"], self.current.task_data["ay"])

        self.current.task_data['donem_sayi'] = True if donem_list else False
    def donem_kontrol(self):
        """
        Seçilen ay ve yıla ait dönem olup olmadığını kontrol eder.
        """
        secilen_ay = self.input['form']['ay_sec']
        self.current.task_data["yil"] = self.input['form']['yil_sec']
        self.current.task_data["ay"] = secilen_ay

        # guncel olan ayın ismi getirilir.
        self.current.task_data["ay_isim"] = dict(AYLAR).get(secilen_ay)

        # TODO: aktif donem ve oncesine rastlayan donem varmi diye kontrol etmeliyiz.
        donem_list = Donem.takvim_ayina_rastlayan_donemler(self.current.task_data["yil"],
                                                           self.current.task_data["ay"])

        self.current.task_data['donem_sayi'] = True if donem_list else False
Example #17
0
    def goster(self):
        """
        AkademikTakvim modelinden kullanıcıya gösterilecek takvime erişir ve bir tablo
        halinde çıktıya ekler.

        Akademik Takvim öğelerinin (takvim etkinlikleri) sırlaması önemli olduğu için
        OrderedDict kullanılmıştır. Data bu sözlüğün içinde sıralandığı haliyle
        seriyalize edilir.

        AKADEMIK_TAKVIM_ETKINLIKLERI önceden tanımlanmış ve sıralanmış bir etkinlikler
        toplamıdır. AkademikTakvim modeli ile birlikte models.ogrenci modülü içinde
        sıralı olarak tanımlanmıştır. Örn::

            AKADEMIK_TAKVIM_ETKINLIKLERI = [
            ('1', 'Yeni Öğrenci Ön Kayıt'),
            ('2', 'Güz Dönem Başlangıcı'),
            ('3', 'Derslerin Acılması'),
            ('4', 'Subelendirme ve Ders Programının Ilan Edilmesi'),

            ...
            ('53', 'Yarıyıl Sınavı Not Giriş'),
            ('54', 'Yarıyıl Sınavı Notlarının Öğrenciye Yayınlanmasi'),
            ('55', 'Öğretim Elemanı Yoklama Girişi'),
            ]

        Kayıtların herbiri bu öğeler için belirli bir tarih veya tarih aralığına denk gelmektedir.

        """
        self.current.output['client_cmd'] = ['show', ]
        etkinlikler = []

        ogretim_yili = OgretimYili.objects.get(yil=Donem.guncel_donem().baslangic_tarihi.year)
        akademik_takvim = get_akademik_takvim(self.current.role.unit, ogretim_yili)

        for e in Takvim.objects.filter(akademik_takvim=akademik_takvim):
            etkinlik = OrderedDict({})
            etkinlik[_(u'Etkinlik')] = dict(AKADEMIK_TAKVIM_ETKINLIKLERI).get(str(e.etkinlik), '')
            etkinlik[_(u'Başlangıç')] = format_datetime(e.baslangic) if e.baslangic else ''
            etkinlik[_(u'Bitiş')] = format_datetime(e.bitis) if e.bitis else ''
            etkinlikler.append(etkinlik)

        # cikti multirow table seklindedir.
        self.output['object'] = {
            "type": "table-multiRow",
            "fields": etkinlikler
        }
    def donem_kontrol(self):
        """
        Seçilen ay ve yıla ait dönem olup olmadığını kontrol eder.
        """

        self.current.task_data["yil"] = YIL[self.input['form']['yil_sec']][1]
        self.current.task_data["ay"] = self.input['form']['ay_sec']
        # guncel olan ayın ismi getirilir.
        self.current.task_data["ay_isim"] = AYLAR[self.input['form']['ay_sec'] - 1][1]

        takvim = calendar.monthrange(self.current.task_data["yil"], self.current.task_data["ay"])
        donem_list = Donem.takvim_ayina_rastlayan_donemler(self.current.task_data["yil"], self.current.task_data["ay"], takvim)

        if len(donem_list) > 0:
            self.current.task_data['donem_sayi'] = True
        else:
            self.current.task_data['donem_sayi'] = False
Example #19
0
    def danisman_sec(self):
        """
        Birime kayıtlı danışman  biri seçilir.

        """
        self.current.task_data['program_id'] = self.current.input['form'][
            'program']

        program = OgrenciProgram.objects.get(
            self.current.input['form']['program'])
        _form = DanismanSecimForm(current=self.current,
                                  title=_(u"Danışman Seçiniz"))
        _choices = prepare_choices_for_model(DonemDanisman,
                                             donem=Donem.guncel_donem(),
                                             bolum=program.program.birim)
        _form.donem_danisman = fields.Integer(choices=_choices)
        self.form_out(_form)
Example #20
0
def yeni_donem():
    """
    Rastgele veriler kullanarak yeni dönem kaydı oluştururup kaydeder.

    Returns:
        Donem: Yeni dönem kaydı

    """

    d = Donem()
    d.ad = random.choice(["Güz", "Güz", "Bahar", "Bahar", "Yaz"])
    d.baslangic_tarihi = datetime.datetime(random.randint(2015, 2017),
                                           random.randint(1, 12),
                                           random.randint(1, 15))
    d.bitis_tarihi = d.baslangic_tarihi + datetime.timedelta(random.randint(30, 180))
    d.guncel = random.choice(True)

    d.save()
    return d
Example #21
0
def resmi_tatil_gunleri_getir(birim_unit, yil, ay):
    from ulakbus.models.ogrenci import Takvim, Donem
    from ulakbus.lib.common import get_akademik_takvim

    baslangic, bitis = yil_ve_aya_gore_ilk_ve_son_gun(yil, ay)
    resmi_tatil_list = []
    donem_list = Donem.takvim_ayina_rastlayan_donemler(yil, ay)
    for donem in donem_list:
        akademik_takvim = get_akademik_takvim(birim_unit, donem.ogretim_yili)
        tatil_list = []
        for resmi_tatil in Takvim.objects.filter(
            akademik_takvim=akademik_takvim, resmi_tatil=True, baslangic__gte=baslangic, bitis__lte=bitis
        ):
            for gun in zaman_araligi(resmi_tatil.baslangic, resmi_tatil.bitis):
                tatil_list.append(gun.day)
        resmi_tatil_list.append(tatil_list)

    return resmi_tatil_list
Example #22
0
    def program_sec(self):
        """Program Seçim Adımı

        Programlar veritabanından çekilip, açılır menu içine
        doldurulur.

        """
        guncel_donem = Donem.guncel_donem(self.current)
        ogrenci_id = self.current.input['id']
        self.current.task_data['ogrenci_id'] = ogrenci_id
        self.current.task_data['donem_id'] = guncel_donem.key

        _form = ProgramSecimForm(current=self.current,
                                 title=_(u"Öğrenci Programı Seçiniz"))
        _choices = prepare_choices_for_model(OgrenciProgram,
                                             ogrenci_id=ogrenci_id)
        _form.program = fields.Integer(choices=_choices)
        self.form_out(_form)
    def yeni_donem(donem_say=1, guncel=False):
        """
        Rastegele verilerle kampus listesi oluşturur.

        Args:
            donem_say (int): oluşturulacak donem sayısı
            guncel (bool): guncel donem bilgisi

        Return:
            donem_list (list): donem listesi

        """

        donemler = [
            ("Güz", 9, 2),
            ("Bahar", 2, 7),
            ("Yaz", 7, 9),
        ]
        donem_list = []

        for i in range(donem_say):
            ad, baslangic, bitis = random.choice(donemler)
            d = datetime.datetime.now()
            year = d.year
            baslangic_tarihi = datetime.datetime(d.year, baslangic, 1)
            if ad == "Güz":
                year += 1
            bitis_tarihi = datetime.datetime(year, bitis, 1)

            donem = Donem(ad="%s - %s" % (ad, year), baslangic_tarihi=baslangic_tarihi,
                          bitis_tarihi=bitis_tarihi)

            if Donem.objects.filter(ad="%s - %s" % (ad, year)).count() < 1:
                if guncel:
                    for d in list(Donem.objects.filter()):
                        d.guncel = False
                        d.save()
                    donem.guncel = True
                donem.save()
                donem_list.append(donem)

            if Donem.objects.filter(guncel=True).count() < 1:
                donem.guncel = True
                donem.save()

        return donem_list
Example #24
0
    def ders_listele(self):
        """
        Öğrencinin kayıtlı olduğu dersleri listeler ve öğrenciye yeni dersler eklenir.

        """

        if 'program_key' and 'dersler' not in self.current.task_data:
            ogrenci_dersi_lst = []
            program_key = self.input['form']['program']
            self.current.task_data['program_key'] = program_key
            guncel_donem = Donem.guncel_donem()
            ogrenci_program = OgrenciProgram.objects.get(program_key)
            ogrenci_dersleri = OgrenciDersi.objects.filter(ogrenci_program=ogrenci_program,
                                                           donem=guncel_donem)
            _form = DersSecimForm(current=self.current, title=_(u"Ders Seçiniz"))
            for ogrenci_dersi in ogrenci_dersleri:
                ogrenci_dersi_lst.append(ogrenci_dersi.key)
                _form.Dersler(key=ogrenci_dersi.sube.key, ders_adi=ogrenci_dersi.sube.ders_adi)
            self.form_out(_form)
            self.current.task_data['ogrenci_dersi_lst'] = ogrenci_dersi_lst

        else:
            _form = DersSecimForm(current=self.current, title=_(u"Ders Seçiniz"))
            for ders in self.current.task_data['dersler']:
                try:
                    ogrenci_dersi = OgrenciDersi.objects.get(
                        sube_id=ders['key'],
                        ogrenci_id=self.current.session['ogrenci_id']
                    )
                    if ogrenci_dersi.key not in self.current.task_data['ogrenci_dersi_lst']:
                        self.current.task_data['ogrenci_dersi_lst'].append(ogrenci_dersi.key)

                except ObjectDoesNotExist:
                    _form.Dersler(key=ders['key'], ders_adi=ders['ders_adi'])

            for ogrenci_dersi_key in self.current.task_data['ogrenci_dersi_lst']:
                ogrenci_dersi = OgrenciDersi.objects.get(ogrenci_dersi_key)
                _form.Dersler(key=ogrenci_dersi.sube.key, ders_adi=ogrenci_dersi.sube.ders_adi)

            self.form_out(_form)

        self.ders_secim_form_inline_edit()
        self.current.output["meta"]["allow_actions"] = True
Example #25
0
def resmi_tatil_gunleri_getir(birim_unit, yil, ay):
    from ulakbus.models.ogrenci import Takvim, Donem
    from ulakbus.lib.common import get_akademik_takvim

    baslangic, bitis = yil_ve_aya_gore_ilk_ve_son_gun(yil, ay)
    resmi_tatil_list = []
    donem_list = Donem.takvim_ayina_rastlayan_donemler(yil, ay)
    for donem in donem_list:
        akademik_takvim = get_akademik_takvim(birim_unit, donem.ogretim_yili)
        tatil_list = []
        for resmi_tatil in Takvim.objects.filter(
                akademik_takvim=akademik_takvim,
                resmi_tatil=True,
                baslangic__gte=baslangic,
                bitis__lte=bitis):
            for gun in zaman_araligi(resmi_tatil.baslangic, resmi_tatil.bitis):
                tatil_list.append(gun.day)
        resmi_tatil_list.append(tatil_list)

    return resmi_tatil_list
    def donem_kontrol(self):
        """
        Seçilen ay ve yıla ait dönem olup olmadığını kontrol eder.
        """

        self.current.task_data["yil"] = YIL[self.input['form']['yil_sec']][1]
        self.current.task_data["ay"] = self.input['form']['ay_sec']
        # guncel olan ayın ismi getirilir.
        self.current.task_data["ay_isim"] = AYLAR[self.input['form']['ay_sec']
                                                  - 1][1]

        takvim = calendar.monthrange(self.current.task_data["yil"],
                                     self.current.task_data["ay"])
        donem_list = Donem.takvim_ayina_rastlayan_donemler(
            self.current.task_data["yil"], self.current.task_data["ay"],
            takvim)

        if len(donem_list) > 0:
            self.current.task_data['donem_sayi'] = True
        else:
            self.current.task_data['donem_sayi'] = False
    def okutman_sec(self):
        """
        Puantaj tablosunun hesaplanacağı okutmanların
        seçilmesine yarar. Bu okutmanlar işlem yapılan birime göre
        sorgulatılır. Bilgisayar Mühendisliği için yapılan sorguda
        sadece Bilgisayar Mühendisliği'nde bulunan okutmanlar ekrana
        gelecektir.
        """

        birim_no = self.current.role.unit.yoksis_no
        _form = OkutmanListelemeForm(current=self.current, title=_(u"Okutman Seçiniz"))

        # TODO: ilgili doneme ait okutmanlar listelenmeli.
        okutmanlar = [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()]

        for okutman in okutmanlar:
            _form.OkutmanListesi(secim=True, okutman=okutman.__unicode__(), key=okutman.key)

        _form.sec = fields.Button(_(u"İlerle"))
        self.form_out(_form)
Example #28
0
    def kayit_bilgisi_ver(self):
        """
        Seçilen öğretim elemanları, dönem ve bölüm bilgilerinden oluşturulan kaydın mesajı
        gösterilir.
        Danışmanlara bilgilendirme mesajı gönderilir.

        """
        yoksis_no = self.current.task_data['unit_yoksis_no']
        unit = Unit.objects.get(yoksis_no=yoksis_no)
        donem = Donem.guncel_donem(self.current)

        self.current.output['msgbox'] = {
            'type': 'info',
            "title": _(u'Danismanlar Kaydedildi'),
            "msg":
            _(u'%(donem)s dönemi için %(unit)s programına ait danışman listesi kaydedilmiştir'
              ) % {
                  'donem': donem,
                  'unit': unit
              }
        }

        title = _(u"Danışman Atama")
        message = _(u"%s dönemi için  danışman olarak atandınız.") % donem
        for okutman_key in self.current.task_data['okutmanlar']:
            okutman = Okutman.objects.get(okutman_key)
            user = okutman.personel.user if okutman.personel else okutman.harici_okutman.user
            abstract_role = AbstractRole.objects.get("OGRETIM_ELEMANI")
            try:
                role = Role.objects.get(user=user,
                                        abstract_role=abstract_role,
                                        unit=unit)
                role.send_notification(message=message,
                                       title=title,
                                       sender=self.current.user)
            except ObjectDoesNotExist:
                pass
Example #29
0
    def danisman_sec(self):
        """
        Seçilen bölümdeki öğretim elemanları listelenir.

        """
        unit = self.current.role.unit
        self.current.task_data['unit_yoksis_no'] = unit.yoksis_no
        donem = Donem.guncel_donem()
        okutmanlar = [o for o in Okutman.objects for gorev_birimi in o.GorevBirimi if
                      gorev_birimi.yoksis_no == unit.yoksis_no and gorev_birimi.donem == donem]
        _form = DonemDanismanListForm(current=self, title=_(u"Okutman Seçiniz"))
        for okt in okutmanlar:
            try:
                DonemDanisman.objects.get(donem=donem, okutman=okt, bolum=unit)
                _form.Okutmanlar(secim=True, ad_soyad='%s %s' % (okt.ad, okt.soyad),
                                 key=okt.key)
            except ObjectDoesNotExist:
                _form.Okutmanlar(secim=False, ad_soyad='%s %s' % (okt.ad, okt.soyad),
                                 key=okt.key)

        self.form_out(_form)
        self.current.output["meta"]["allow_actions"] = False
        self.current.output["meta"]["allow_selection"] = False
        self.current.output["meta"]["allow_add_listnode"] = False
    def ucret_hesapla(self):
        """
        Seçilen ay ve yıla göre, seçilen her bir öğretim elemanının
        resmi tatil ve izinleri dikkate alarak aylık ders saati planlamasını
        yapar
        """
        # Ders seçim türüne göre ayarlamalar yapılır.
        ek_ders, ders_turu = (True, 'Ek') if self.input['form']['ek_ders'] == 1 else (False, '')

        yil = self.current.task_data["yil"]  # girilen yil
        ay = self.current.task_data["ay"]  # girilen ayin orderi
        ay_isim = self.current.task_data["ay_isim"]  # ayin adi

        # verilen ayın son gunu bulunur 28,31 gibi
        ilk, son = yil_ve_aya_gore_ilk_ve_son_gun(yil, ay)
        ayin_son_gunu = son.day

        birim_unit = self.current.role.unit

        # Secilen ay hangi donemleri kapsiyor, kac donemi kapsıyorsa
        # o donemleri dondürür.
        donem_list = Donem.takvim_ayina_rastlayan_donemler(yil, ay)

        # Resmi tatillerin gununu (23, 12, 8) gibi döndürür.
        resmi_tatil_list = resmi_tatil_gunleri_getir(birim_unit, yil, ay)

        # Kapsadığı dönemlere göre ders baslangıc ve bitis tarihlerini
        # baz alarak kapsadığı her bir dönemin seçilen ayda hangi gün
        # aralıklarını kapsadığı bilgisini tuple olarak dondurur. Bir
        # dönemi kapsıyorsa bir tuple, iki dönemi kapsıyorsa iki tuple
        # döner. (1,12) (19,31) gibi
        tarih_araligi = ders_etkinligine_gore_tarih_araligi(donem_list, yil, ay, birim_unit)

        table_head = ['Öğretim Elemanı']
        table_head.extend([str(d) for d in range(1, ayin_son_gunu + 1)])
        table_head.append('Toplam')

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

        # Seçilen okutmanların bulunmaması demek,
        title = _(u"%(baslik)s %(yil)s-%(ay)s AYI %(ders)s DERS PUANTAJ TABLOSU") % {
            'baslik': self.current.task_data["title"],
            'yil': yil,
            'ay': ay_isim.upper(),
            'ders': ders_turu.upper(),
        }

        _form = PuantajFormu(title=title)
        self.form_out(_form)

        for secilen_okutman in self.current.task_data["secilen_okutmanlar"]:
            okutman = Okutman.objects.get(secilen_okutman['key'])

            # Seçilen okutmanın İzin ve Ücretsiz İzinlerini dikkate alarak, verilen ayda
            # hangi günler izinli olduğunu liste halinde döndürmeye yarayan method
            # [17,18,19] gibi
            personel_izin_list = personel_izin_gunlerini_getir(okutman, yil, ay)

            # Verilen döneme ve okutmana göre, haftada hangi gün kaç saat dersi
            # (seçilen seçeneğe göre ders veya ek ders) olduğunu gösteren
            # dictionarylerden oluşan liste, seçilen yıl ve ay bir dönemi kapsıyorsa
            # bir dict, iki dönemi kapsıyorsa iki dict döner.
            ders_etkinlik_list = doneme_gore_okutman_etkinlikleri(donem_list, okutman, ek_ders)

            # Bulunan tarih araliklarina, okutmanın aylık ders etkinliklerine göre
            # ayın hangi gününde dersi varsa kaç saat dersi olduğu bilgisi,
            # izinliyse İ, resmi tatilse R bilgisini bir dictionary e doldurur.
            okutman_aylik_plan, ders_saati = okutman_aylik_plani(donem_list, ders_etkinlik_list,
                                                                 resmi_tatil_list,
                                                                 personel_izin_list,
                                                                 tarih_araligi, yil, ay)

            # Okutmanın oluşturulan bilgilerinin ekrana basılacağı şeklinin oluşturulması
            okutman_bilgi_listesi = okutman_bilgileri_doldur(okutman, ayin_son_gunu,
                                                             okutman_aylik_plan, ders_saati)

            item = {
                "type": "table-multiRow",
                "fields": okutman_bilgi_listesi,
                "actions": False,
            }

            self.output['objects'].append(item)
Example #31
0
    def test_academic_calendar(self):
        """
        Adalet Meslek Yüksekokulu Öğrencisi rolüne sahip ogrenci_1 adlı kullanıcı giriş yaptığında,
        xxxxxxxxxxxxxx keyine sahip rektörlüğe ait akademik takvimi görmesi beklenir.
        Çünkü bölümüne veya fakültesine ait bir akademik takvim tanımlanmamıştır.

        Bu iş akışı ilk adımda rektörlüğe ait akademik takvim kayıtlarını listeler.

        Veritabanından çekilen akademik takvim kayıtlarının sayısı ile sunucudan dönen akademik takvim
        kayıtlarının sayısı karşılastırılıp test edilir.

        Akademik takvim kaydının nesnelerinden biri seçilir, seçilen nesnenin etkinliği, başlangıcı ve
        bitişi sunucudan dönen etkinlik, başlangıç ve bitiş kayıtlarıyla karşılaştırılıp test edilir.

        ogrenci_1 adlı kullanıcıya çıkış yaptırılır.

        Kamu Hukuku Bölümü öğrencisi rolüne sahip ogrenci_2 adlı kullanıcı giriş yaptığında, xxxxxxxxxx keyine sahip
        Kamu Hukuku Bölümü akademik takvimi görmesi beklenir.Çünkü kendi bölümüne ait tanımlı akademik takvim vardır.

        Bu iş akışı ilk adımda eğitim fakültesine ait akademik takvim kayıtlarını listeler.

        Veritabanından çekilen akademik takvim kayıtlarının sayısı ile sunucudan dönen akademik takvim
        kayıtlarının sayısı karşılastırılıp test edilir.

        Akademik takvim kaydının nesnelerinden biri seçilir, seçilen nesnenin etkinliği, başlangıcı ve
        bitişi sunucudan dönen etkinlik, başlangıç ve bitiş kayıtlarıyla karşılaştırılır.

        """
        def get_akademik_takvim(unit, ogretim_yili):
            try:
                akademik_takvim = AkademikTakvim.objects.get(
                    birim=unit, ogretim_yili=ogretim_yili)
                return akademik_takvim
            except ObjectDoesNotExist:
                parent_yoksis_no = unit.parent_unit_no
                birim = Unit.objects.get(yoksis_no=parent_yoksis_no)
                return get_akademik_takvim(birim, ogretim_yili)

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

        # Veritabınından ogrenci_1 adlı kullanıcı seçilir.
        user = User.objects.get(username='******')

        # Rol'ün kayıtlı olduğu birim getirilir.
        unit = user.role_set[0].role.unit

        ogretim_yili = OgretimYili.objects.get(
            yil=Donem.guncel_donem().baslangic_tarihi.year)

        # Birimin kayıtlı olduğu akademik takvim kayıtlarını getirir.
        akademik_takvim = get_akademik_takvim(unit, ogretim_yili)

        # Sunucudan dönen akademik takvim kayıtları ile veritabanından çekilen akademik kayıtları
        # karşılaştırılıp test edilir
        assert len(akademik_takvim.etkinlikler()) == len(
            resp.json['object']['fields'])

        # Akademik takvim kaydının nesnelerinden biri seçilir.
        takvim = akademik_takvim.etkinlikler()[4]
        # Takvim kaydının etkinliğini getirir.
        etkinlik = takvim.etkinlik

        assert dict(AKADEMIK_TAKVIM_ETKINLIKLERI).get(str(etkinlik), '') == \
               resp.json['object']['fields'][4][
                   'Etkinlik']
        assert format_datetime(
            takvim.baslangic) == resp.json['object']['fields'][4][u'Başlangıç']
        assert format_datetime(
            takvim.bitis) == resp.json['object']['fields'][4][u'Bitiş']

        # Kullanıcıya çıkış yaptırılır.
        self.client.set_path('/logout')
        self.client.post()

        # Veritabınından ogrenci_2 adlı kullanıcı seçilir.
        usr = User.objects.get(username='******')
        time.sleep(1)

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

        # Rol'ün kayıtlı olduğu birim getirilir.
        unit = usr.role_set[0].role.unit

        # Birimin kayıtlı olduğu akademik takvim kayıtını getirir.
        akademik_takvim = get_akademik_takvim(unit, ogretim_yili)

        # Sunucudan dönen akademik takvim kayıtları ile veritabanından çekilen akademik kayıtları
        # karşılaştırılıp test edilir.
        assert len(akademik_takvim.etkinlikler()) == len(
            response.json['object']['fields'])

        # Akademik takvim kaydının nesnelerinden biri seçilir.
        takvim = akademik_takvim.etkinlikler()[5]
        # Takvim kaydının etkinliğini getirir.
        etkinlik = takvim.etkinlik

        assert response.json['object']['fields'][5][u'Etkinlik'] == dict(
            AKADEMIK_TAKVIM_ETKINLIKLERI).get(str(etkinlik), '')
        assert response.json['object']['fields'][5][
            u'Başlangıç'] == format_datetime(takvim.baslangic)
        assert response.json['object']['fields'][5][
            u'Bitiş'] == format_datetime(takvim.bitis)
    def ucret_hesapla(self):
        """
        Seçilen ay ve yıla göre, seçilen her bir öğretim elemanının
        resmi tatil ve izinleri dikkate alarak aylık ders saati planlamasını
        yapar
        """
        okutman_personel = Personel.objects.get(user=self.current.user)
        okutman = Okutman.objects.get(personel=okutman_personel)
        okutman_adi = okutman.ad + ' ' + okutman.soyad

        yil = self.current.task_data["yil"]  # girilen yil
        ay = self.current.task_data["ay"]  # girilen ayin orderi
        ay_isim = self.current.task_data["ay_isim"]  # ayin adi

        takvim = calendar.monthrange(yil, ay)
        # verilen yıl ve aya göre tuple şeklinde ayın ilk gününü
        # ve ayın kaç gün sürdüğü bilgisini döndürür.
        # Ayın ilk günü = 0-6 Pazt-Pazar
        # 2016 yılı Temmuz ayı için = (4,31)

        birim_no = self.current.role.unit.yoksis_no  # rolden gelecek
        birim_unit = Unit.objects.get(yoksis_no=birim_no)

        # Secilen ay hangi donemleri kapsiyor, kac donemi kapsıyorsa
        # o donemleri dondürür.
        donem_list = Donem.takvim_ayina_rastlayan_donemler(yil, ay, takvim)

        # Resmi tatilerin gununu (23, 12, 8) gibi ve doneme gore akademik takvim donduruyor
        resmi_tatil_list, akademik_takvim_list = Takvim.resmi_tatil_gunleri_getir(
            donem_list, birim_unit, yil, ay)

        # Kapsadığı dönemlere göre ders baslangıc ve bitis tarihlerini
        # baz alarak kapsadığı her bir dönemin seçilen ayda hangi gün
        # aralıklarını kapsadığı bilgisini tuple olarak dondurur. Bir
        # dönemi kapsıyorsa bir tuple, iki dönemi kapsıyorsa iki tuple
        # döner. (4,12) (19,31) gibi
        tarih_araligi = DU.donem_aralik_dondur(donem_list, yil, ay, takvim,
                                               akademik_takvim_list)

        object_list = ['Öğretim Elemanı']
        tarih_list = list(range(1, takvim[1] + 1))
        for tarih in tarih_list:
            object_list.append(' ' + str(tarih))

        # object_list = ['Ogretim Elemani', 'bir', 'iki', 'uc']
        _form = JsonForm(current=self.current)

        kontrol = self.current.task_data["control"]
        if kontrol:
            _form.title = _(
                u"%(ad)s - %(birim)s %(yil)s-%(ay)s AYI DERS PUANTAJ TABLOSU"
            ) % {
                'ad': okutman_adi.upper(),
                'birim': birim_unit.name,
                'yil': yil,
                'ay': ay_isim.upper()
            }
            ders_saati_turu = _(u'Ders Saati')

        else:
            _form.title = _(u"%s - %s %s-%s AYI EK DERS PUANTAJ TABLOSU") % (
                okutman_adi.upper(), birim_unit.name, yil, ay_isim.upper())
            ders_saati_turu = _(u'Ek Ders Saati')

        object_list.append(ders_saati_turu)
        self.output['objects'] = [object_list]

        data_list = OrderedDict({})

        # Seçilen okutmanın İzin ve Ücretsiz İzinlerini dikkate alarak, verilen ayda
        # hangi günler izinli olduğunu liste halinde döndürmeye yarayan method
        # [17,18,19] gibi
        personel_izin_list = Izin.personel_izin_gunlerini_getir(
            okutman, yil, ay)

        # Verilen döneme ve okutmana göre, haftada hangi gün kaç saat dersi
        # (seçilen seçeneğe göre ders veya ek ders) olduğunu gösteren
        # dictionarylerden oluşan liste, seçilen yıl ve ay bir dönemi kapsıyorsa
        # bir dict, iki dönemi kapsıyorsa iki dict döner.
        ders_etkinlik_list = DU.okutman_etkinlikleri_hesaplama(
            donem_list, okutman, kontrol)

        # Bulunan tarih araliklarina, okutmanın aylık ders etkinliklerine göre
        # ayın hangi gününde dersi varsa kaç saat dersi olduğu bilgisi,
        # izinliyse İ, resmi tatilse R bilgisini bir dictionary e doldurur.
        okutman_aylik_plan, ders_saati = DU.ders_saati_doldur(
            donem_list, ders_etkinlik_list, resmi_tatil_list,
            personel_izin_list, tarih_araligi, yil, ay)

        data_list['Öğretim Elemanı'] = okutman_adi

        for gun in range(1, takvim[1] + 1):
            if gun in okutman_aylik_plan:
                data_list[' ' + str(gun)] = str(okutman_aylik_plan[gun])
            else:
                data_list[' ' + str(gun)] = ' '

        data_list[ders_saati_turu] = str(ders_saati)

        item = {
            "type": "table-multiRow",
            "fields": data_list,
            "actions": False,
            'key': okutman.key
        }

        self.output['objects'].append(item)

        _form.pdf_sec = fields.Button(_(u"Pdf Çıkar"))
        _form.help_text = _(u"""
                         R: Resmi Tatil
                         İ: İzinli""")
        self.form_out(_form)
    def ucret_hesapla(self):
        """
        Seçilen ay ve yıla göre, seçilen her bir öğretim elemanının
        resmi tatil ve izinleri dikkate alarak aylık ders saati planlamasını
        yapar
        """
        okutman_personel = Personel.objects.get(user=self.current.user)
        okutman = Okutman.objects.get(personel=okutman_personel)
        okutman_adi = okutman.ad + ' ' + okutman.soyad

        yil = self.current.task_data["yil"]  # girilen yil
        ay = self.current.task_data["ay"]  # girilen ayin orderi
        ay_isim = self.current.task_data["ay_isim"]  # ayin adi

        takvim = calendar.monthrange(yil, ay)
        # verilen yıl ve aya göre tuple şeklinde ayın ilk gününü
        # ve ayın kaç gün sürdüğü bilgisini döndürür.
        # Ayın ilk günü = 0-6 Pazt-Pazar
        # 2016 yılı Temmuz ayı için = (4,31)

        birim_no = self.current.role.unit.yoksis_no  # rolden gelecek
        birim_unit = Unit.objects.get(yoksis_no=birim_no)

        # Secilen ay hangi donemleri kapsiyor, kac donemi kapsıyorsa
        # o donemleri dondürür.
        donem_list = Donem.takvim_ayina_rastlayan_donemler(yil, ay, takvim)

        # Resmi tatilerin gununu (23, 12, 8) gibi ve doneme gore akademik takvim donduruyor
        resmi_tatil_list, akademik_takvim_list = Takvim.resmi_tatil_gunleri_getir(donem_list, birim_unit, yil, ay)

        # Kapsadığı dönemlere göre ders baslangıc ve bitis tarihlerini
        # baz alarak kapsadığı her bir dönemin seçilen ayda hangi gün
        # aralıklarını kapsadığı bilgisini tuple olarak dondurur. Bir
        # dönemi kapsıyorsa bir tuple, iki dönemi kapsıyorsa iki tuple
        # döner. (4,12) (19,31) gibi
        tarih_araligi = DU.donem_aralik_dondur(donem_list, yil, ay, takvim, akademik_takvim_list)

        object_list = ['Öğretim Elemanı']
        tarih_list = list(range(1, takvim[1] + 1))
        for tarih in tarih_list:
            object_list.append(' ' + str(tarih))

        # object_list = ['Ogretim Elemani', 'bir', 'iki', 'uc']
        _form = JsonForm(current=self.current)

        kontrol = self.current.task_data["control"]
        if kontrol:
            _form.title = _(u"%(ad)s - %(birim)s %(yil)s-%(ay)s AYI DERS PUANTAJ TABLOSU") % {
                'ad': okutman_adi.upper(),
                'birim': birim_unit.name,
                'yil': yil,
                'ay': ay_isim.upper()}
            ders_saati_turu = _(u'Ders Saati')

        else:
            _form.title = _(u"%s - %s %s-%s AYI EK DERS PUANTAJ TABLOSU") % (
            okutman_adi.upper(), birim_unit.name, yil, ay_isim.upper())
            ders_saati_turu = _(u'Ek Ders Saati')

        object_list.append(ders_saati_turu)
        self.output['objects'] = [object_list]

        data_list = OrderedDict({})

        # Seçilen okutmanın İzin ve Ücretsiz İzinlerini dikkate alarak, verilen ayda
        # hangi günler izinli olduğunu liste halinde döndürmeye yarayan method
        # [17,18,19] gibi
        personel_izin_list = Izin.personel_izin_gunlerini_getir(okutman, yil, ay)

        # Verilen döneme ve okutmana göre, haftada hangi gün kaç saat dersi
        # (seçilen seçeneğe göre ders veya ek ders) olduğunu gösteren
        # dictionarylerden oluşan liste, seçilen yıl ve ay bir dönemi kapsıyorsa
        # bir dict, iki dönemi kapsıyorsa iki dict döner.
        ders_etkinlik_list = DU.okutman_etkinlikleri_hesaplama(donem_list, okutman, kontrol)

        # Bulunan tarih araliklarina, okutmanın aylık ders etkinliklerine göre
        # ayın hangi gününde dersi varsa kaç saat dersi olduğu bilgisi,
        # izinliyse İ, resmi tatilse R bilgisini bir dictionary e doldurur.
        okutman_aylik_plan, ders_saati = DU.ders_saati_doldur(donem_list, ders_etkinlik_list,
                                                              resmi_tatil_list, personel_izin_list,
                                                              tarih_araligi, yil, ay)

        data_list['Öğretim Elemanı'] = okutman_adi

        for gun in range(1, takvim[1] + 1):
            if gun in okutman_aylik_plan:
                data_list[' ' + str(gun)] = str(okutman_aylik_plan[gun])
            else:
                data_list[' ' + str(gun)] = ' '

        data_list[ders_saati_turu] = str(ders_saati)

        item = {
            "type": "table-multiRow",
            "fields": data_list,
            "actions": False,
            'key': okutman.key
        }

        self.output['objects'].append(item)

        _form.pdf_sec = fields.Button(_(u"Pdf Çıkar"))
        _form.help_text = _(u"""
                         R: Resmi Tatil
                         İ: İzinli""")
        self.form_out(_form)
Example #34
0
    def test_wf_baslangic_ve_guncel_donem(self):
        # guncel_donem_degistirme iş akışının propertysi test için init= True olarak belirlenmiştir.
        self.prepare_client('guncel_donem_degistirme', username='******')

        # İş akışı başlatılır.
        self.client.post()

        # 'wf_initial_values' keyinin olduğu kontrol edilir.
        assert 'wf_initial_values' in self.client.current.task_data

        # 'guncel_donem' keyinin olduğu kontrol edilir.
        assert 'guncel_donem' in self.client.current.task_data['wf_initial_values']

        # 'start_date' keyinin olduğu kontrol edilir.
        assert 'start_date' in self.client.current.task_data['wf_initial_values']

        # guncel_donem hesaplanırken parametre olarak current verilirse ve
        # 'wf_init_variables' içerisinde guncel_donem bilgisi varsa bu bilgi kullanılır.
        assert Donem.guncel_donem(self.client.current).key == \
               self.client.current.task_data['wf_initial_values']['guncel_donem']['key'] == \
               Donem.objects.get(guncel=True).key

        # Test başlamadan önce cache içerisinde bulunan data yedeklenir.
        cache_data = GuncelDonem().get()

        # Cache temizlenir.
        GuncelDonem().delete()

        # Temizlendiği kontrol edilir.
        assert GuncelDonem().get() == None

        # Güncel dönem getirilir.
        guncel_donem = Donem.guncel_donem()

        # Dönemin veritabanından doğru getirildiği kontrol edilir.
        assert guncel_donem.key == Donem.objects.get(guncel=True).key

        # Güncel dönem veritabanından getirilirken, güncel dönem bilgisı cache'e de koyulur.
        # Cache'in boş olmadığı kontrol edilir.
        assert GuncelDonem().get() is not None

        # Cache'e koyulan dönem bilgisinin güncel dönem olduğu kontrol edilir.
        assert GuncelDonem().get()['key'] == guncel_donem.key

        # Güncel olmayan herhangi bir dönem alınır.
        guncel_olmayan_donem = Donem.objects.filter(guncel=False)[0]

        # Güncel dönem ile güncel olmayan dönemin farklı olduğu kontrol edilir.
        assert guncel_olmayan_donem.key != guncel_donem.key

        # Güncel olmayan bu bölümün veritabanı key bilgisi cache'e koyulur.
        GuncelDonem().set({'key': guncel_olmayan_donem.key}, 1000)

        # Güncel dönem sorgusu yapıldığında, cache'de varsa önceliğin cache olduğu kontrol edilir.
        donem = Donem.guncel_donem()

        # Dönen dönemin sonucu cache'de bulunan dönem olduğu kontrol edilir.
        assert donem.key == guncel_olmayan_donem.key

        # propertysi olmayan bir iş akışı seçilir.
        self.prepare_client('zaman_dilimi_duzenle', username='******')

        # iş akışı başlatılır.
        self.client.post()

        # current task_data içerisinde 'wf_initial_values' keyinin olmadığı kontrol edilir.
        assert 'wf_initial_values' not in self.client.current.task_data

        # Yedeklenen cache datası tekrardan yerine koyulur.
        GuncelDonem().set(cache_data, 360000)
Example #35
0
    def ucret_hesapla(self):
        """
        Seçilen ay ve yıla göre, seçilen her bir öğretim elemanının
        resmi tatil ve izinleri dikkate alarak aylık ders saati planlamasını
        yapar
        """
        # Ders seçim türüne göre ayarlamalar yapılır.
        ek_ders, ders_turu = (
            True, 'Ek') if self.input['form']['ek_ders'] == 1 else (False, '')

        yil = self.current.task_data["yil"]  # girilen yil
        ay = self.current.task_data["ay"]  # girilen ayin orderi
        ay_isim = self.current.task_data["ay_isim"]  # ayin adi

        # verilen ayın son gunu bulunur 28,31 gibi
        ilk, son = yil_ve_aya_gore_ilk_ve_son_gun(yil, ay)
        ayin_son_gunu = son.day

        birim_unit = self.current.role.unit

        # Secilen ay hangi donemleri kapsiyor, kac donemi kapsıyorsa
        # o donemleri dondürür.
        donem_list = Donem.takvim_ayina_rastlayan_donemler(yil, ay)

        # Resmi tatillerin gununu (23, 12, 8) gibi döndürür.
        resmi_tatil_list = resmi_tatil_gunleri_getir(birim_unit, yil, ay)

        # Kapsadığı dönemlere göre ders baslangıc ve bitis tarihlerini
        # baz alarak kapsadığı her bir dönemin seçilen ayda hangi gün
        # aralıklarını kapsadığı bilgisini tuple olarak dondurur. Bir
        # dönemi kapsıyorsa bir tuple, iki dönemi kapsıyorsa iki tuple
        # döner. (1,12) (19,31) gibi
        tarih_araligi = ders_etkinligine_gore_tarih_araligi(
            donem_list, yil, ay, birim_unit)

        table_head = ['Öğretim Elemanı']
        table_head.extend([str(d) for d in range(1, ayin_son_gunu + 1)])
        table_head.append('Toplam')

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

        # Seçilen okutmanların bulunmaması demek,
        title = _(
            u"%(baslik)s %(yil)s-%(ay)s AYI %(ders)s DERS PUANTAJ TABLOSU") % {
                'baslik': self.current.task_data["title"],
                'yil': yil,
                'ay': ay_isim.upper(),
                'ders': ders_turu.upper(),
            }

        _form = PuantajFormu(title=title)
        self.form_out(_form)

        for secilen_okutman in self.current.task_data["secilen_okutmanlar"]:
            okutman = Okutman.objects.get(secilen_okutman['key'])

            # Seçilen okutmanın İzin ve Ücretsiz İzinlerini dikkate alarak, verilen ayda
            # hangi günler izinli olduğunu liste halinde döndürmeye yarayan method
            # [17,18,19] gibi
            personel_izin_list = personel_izin_gunlerini_getir(
                okutman, yil, ay)

            # Verilen döneme ve okutmana göre, haftada hangi gün kaç saat dersi
            # (seçilen seçeneğe göre ders veya ek ders) olduğunu gösteren
            # dictionarylerden oluşan liste, seçilen yıl ve ay bir dönemi kapsıyorsa
            # bir dict, iki dönemi kapsıyorsa iki dict döner.
            ders_etkinlik_list = doneme_gore_okutman_etkinlikleri(
                donem_list, okutman, ek_ders)

            # Bulunan tarih araliklarina, okutmanın aylık ders etkinliklerine göre
            # ayın hangi gününde dersi varsa kaç saat dersi olduğu bilgisi,
            # izinliyse İ, resmi tatilse R bilgisini bir dictionary e doldurur.
            okutman_aylik_plan, ders_saati = okutman_aylik_plani(
                donem_list, ders_etkinlik_list, resmi_tatil_list,
                personel_izin_list, tarih_araligi, yil, ay)

            # Okutmanın oluşturulan bilgilerinin ekrana basılacağı şeklinin oluşturulması
            okutman_bilgi_listesi = okutman_bilgileri_doldur(
                okutman, ayin_son_gunu, okutman_aylik_plan, ders_saati)

            item = {
                "type": "table-multiRow",
                "fields": okutman_bilgi_listesi,
                "actions": False,
            }

            self.output['objects'].append(item)
    def test_academic_calendar(self):
        """
        Adalet Meslek Yüksekokulu Öğrencisi rolüne sahip ogrenci_1 adlı kullanıcı giriş yaptığında,
        xxxxxxxxxxxxxx keyine sahip rektörlüğe ait akademik takvimi görmesi beklenir.
        Çünkü bölümüne veya fakültesine ait bir akademik takvim tanımlanmamıştır.

        Bu iş akışı ilk adımda rektörlüğe ait akademik takvim kayıtlarını listeler.

        Veritabanından çekilen akademik takvim kayıtlarının sayısı ile sunucudan dönen akademik takvim
        kayıtlarının sayısı karşılastırılıp test edilir.

        Akademik takvim kaydının nesnelerinden biri seçilir, seçilen nesnenin etkinliği, başlangıcı ve
        bitişi sunucudan dönen etkinlik, başlangıç ve bitiş kayıtlarıyla karşılaştırılıp test edilir.

        ogrenci_1 adlı kullanıcıya çıkış yaptırılır.

        Kamu Hukuku Bölümü öğrencisi rolüne sahip ogrenci_2 adlı kullanıcı giriş yaptığında, xxxxxxxxxx keyine sahip
        Kamu Hukuku Bölümü akademik takvimi görmesi beklenir.Çünkü kendi bölümüne ait tanımlı akademik takvim vardır.

        Bu iş akışı ilk adımda eğitim fakültesine ait akademik takvim kayıtlarını listeler.

        Veritabanından çekilen akademik takvim kayıtlarının sayısı ile sunucudan dönen akademik takvim
        kayıtlarının sayısı karşılastırılıp test edilir.

        Akademik takvim kaydının nesnelerinden biri seçilir, seçilen nesnenin etkinliği, başlangıcı ve
        bitişi sunucudan dönen etkinlik, başlangıç ve bitiş kayıtlarıyla karşılaştırılır.

        """

        def get_akademik_takvim(unit, ogretim_yili):
            try:
                akademik_takvim = AkademikTakvim.objects.get(birim=unit, ogretim_yili=ogretim_yili)
                return akademik_takvim
            except ObjectDoesNotExist:
                parent_yoksis_no = unit.parent_unit_no
                birim = Unit.objects.get(yoksis_no=parent_yoksis_no)
                return get_akademik_takvim(birim, ogretim_yili)

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

        # Veritabınından ogrenci_1 adlı kullanıcı seçilir.
        user = User.objects.get(username='******')

        # Rol'ün kayıtlı olduğu birim getirilir.
        unit = user.role_set[0].role.unit

        ogretim_yili = OgretimYili.objects.get(yil=Donem.guncel_donem().baslangic_tarihi.year)

        # Birimin kayıtlı olduğu akademik takvim kayıtlarını getirir.
        akademik_takvim = get_akademik_takvim(unit, ogretim_yili)

        # Sunucudan dönen akademik takvim kayıtları ile veritabanından çekilen akademik kayıtları
        # karşılaştırılıp test edilir
        assert len(akademik_takvim.etkinlikler()) == len(resp.json['object']['fields'])

        # Akademik takvim kaydının nesnelerinden biri seçilir.
        takvim = akademik_takvim.etkinlikler()[4]
        # Takvim kaydının etkinliğini getirir.
        etkinlik = takvim.etkinlik

        assert dict(AKADEMIK_TAKVIM_ETKINLIKLERI).get(str(etkinlik), '') == \
               resp.json['object']['fields'][4][
                   'Etkinlik']
        assert format_datetime(takvim.baslangic) == resp.json['object']['fields'][4][
            u'Başlangıç']
        assert format_datetime(takvim.bitis) == resp.json['object']['fields'][4][
            u'Bitiş']

        # Kullanıcıya çıkış yaptırılır.
        self.client.set_path('/logout')
        self.client.post()

        # Veritabınından ogrenci_2 adlı kullanıcı seçilir.
        usr = User.objects.get(username='******')
        time.sleep(1)

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

        # Rol'ün kayıtlı olduğu birim getirilir.
        unit = usr.role_set[0].role.unit

        # Birimin kayıtlı olduğu akademik takvim kayıtını getirir.
        akademik_takvim = get_akademik_takvim(unit, ogretim_yili)

        # Sunucudan dönen akademik takvim kayıtları ile veritabanından çekilen akademik kayıtları
        # karşılaştırılıp test edilir.
        assert len(akademik_takvim.etkinlikler()) == len(response.json['object']['fields'])

        # Akademik takvim kaydının nesnelerinden biri seçilir.
        takvim = akademik_takvim.etkinlikler()[5]
        # Takvim kaydının etkinliğini getirir.
        etkinlik = takvim.etkinlik

        assert response.json['object']['fields'][5][u'Etkinlik'] == dict(
            AKADEMIK_TAKVIM_ETKINLIKLERI).get(
            str(etkinlik), '')
        assert response.json['object']['fields'][5][u'Başlangıç'] == format_datetime(takvim.baslangic)
        assert response.json['object']['fields'][5][u'Bitiş'] == format_datetime(takvim.bitis)