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)
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
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)
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
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 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
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)
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
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
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()
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
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
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)
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
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 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 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
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)
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
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)
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)
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)
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)