def test_okutman_ders_ucreti_goruntuleme(self): for loop in range(2): # ogretim_elemani_2 kullanıcısıyla giriş yapılır. user = User.objects.get(username='******') # testi yazılacak iş akışı seçilir. self.prepare_client('/okutman_ders_ucreti_goruntuleme', user=user) self.client.post() if loop == 0: for i in range(2): # 2016 yılı Mayıs ayı seçilir. Veritabanında seçilen yıl ve # ayı içeren dönem bulunmamaktadır. 'Dönem Bulunamadı' başlıklı # hata mesajının çıkması beklenir. resp = self.client.post(form={ "ay_sec": 5, "yil_sec": 2013, "sec": 1 }) assert resp.json['forms']['schema'][ "title"] == "Dönem Bulunamadı" if i == 0: # İlk döngüde hata mesajından sonra eğer geriye dönülmesi seçilirse, # tarih seçme ekranına geri dönmesi beklenir. resp = self.client.post(form={ "iptal": "null", "geri_don": 1, "sec": 1 }, flow="tarih_sec") assert resp.json['forms']['schema'][ "title"] == "Puantaj Tablosu Hazırlamak İstediğiniz Yıl ve Ayı Seçiniz" if i == 1: # Eğer iptal butonuna basılırsa, işem iptali hakkında bilgilendirme # mesajı çıkması beklenir. resp = self.client.post( form={ "iptal": 1, "geri_don": "null", "sec": 1 }, flow="islem_iptali_bilgilendir") assert resp.json["msgbox"][ "title"] == "Durum Mesajı" and "iptal" in resp.json[ "msgbox"]["msg"] if loop == 1: # Geçerli bir dönemin bulunduğu tarih seçilir. resp = self.client.post(form={ "ay_sec": 11, "yil_sec": 2016, "sec": 1 }) # Ders ücreti hesaplama türü seçim ekranına gelmesi beklenir. assert resp.json['forms']['schema'][ "title"] == u"Puantaj Tablosu Hesaplama Türü Seçiniz" # Tür seçildikten sonra ekrana Puantaj Tablosu çıkarılması beklenir. resp = self.client.post(form={"ek_ders": 'null', "ders": 1}) assert "PUANTAJ TABLOSU" in resp.json['forms']['schema'][ "title"] # Kullanıcı adından öğretim görevlisinin adı soyadı bulunur. # Oluşturulan puantaj tablosunun doğru öğretim görevlisi adına # oluşturulup oluşturulmadığı kontrol edilir. okutman = user.personel.okutman okutman_adi = okutman.__unicode__() # Bir döneme denk geldiği kontrol edilir. donem_list = Donem.takvim_ayina_rastlayan_donemler(2016, 11) assert len(donem_list) == 1 ders_etkinlik_list = doneme_gore_okutman_etkinlikleri( donem_list, okutman, False) # Etkinlik olan günlerin etkinlik listede olduğu kontrol edilir. for etkinlik in DersEtkinligi.objects.filter( donem=donem_list[0], okutman=okutman, ek_ders=False): assert etkinlik.gun in ders_etkinlik_list[0] # Personel izin listesi getirilir. personel_izin_list = personel_izin_gunlerini_getir( okutman, 2016, 11) birim_unit = Unit.objects.get( yoksis_no=okutman.donemdeki_gorev_yeri(donem_list[0])) resmi_tatil_list = resmi_tatil_gunleri_getir( birim_unit, 2016, 5) assert 19 and 1 in resmi_tatil_list[0] tarih_araligi = ders_etkinligine_gore_tarih_araligi( donem_list, 2016, 11, birim_unit) resmi_tatil_list = resmi_tatil_gunleri_getir( birim_unit, 2016, 11) aylik_plan = okutman_aylik_plani(donem_list, ders_etkinlik_list, resmi_tatil_list, personel_izin_list, tarih_araligi, 2016, 11) son_gun = yil_ve_aya_gore_ilk_ve_son_gun(2016, 11)[1].day for i in range(son_gun): if resp.json['objects'][1]['fields'][" %i" % (i + 1)] == ' ': assert i + 1 not in aylik_plan[0] elif resp.json['objects'][1]['fields'][" %i" % (i + 1)] == 'İ': assert aylik_plan[0][i + 1] == 'İ' elif resp.json['objects'][1]['fields'][" %i" % (i + 1)] == 'R': assert aylik_plan[0][i + 1] == 'R' else: hafta_gun = date(2016, 11, i + 1).isoweekday() assert resp.json['objects'][1]['fields'][ " %i" % (i + 1)] == str( ders_etkinlik_list[0][hafta_gun]) assert resp.json['objects'][1]['fields'][ " %i" % (i + 1)] == str(aylik_plan[0][i + 1]) # Personel'in izin günlerinin doğru olup olmadığı test edilir. assert personel_izin_list == [16, 17, 18, 19, 20, 21] # Puantaj tablosu'nda öğretim görevlisinin isminin olduğu test edilir. assert okutman_adi.upper( ) in resp.json['forms']['schema']["title"].upper()
def test_okutman_ders_ucreti_goruntuleme(self): for loop in range(2): # ogretim_elemani_2 kullanıcısıyla giriş yapılır. user = User.objects.get(username='******') # testi yazılacak iş akışı seçilir. self.prepare_client('/okutman_ders_ucreti_goruntuleme', user=user) self.client.post() if loop == 0: for i in range(2): # 2016 yılı Mayıs ayı seçilir. Veritabanında seçilen yıl ve # ayı içeren dönem bulunmamaktadır. 'Dönem Bulunamadı' başlıklı # hata mesajının çıkması beklenir. resp = self.client.post(form={"ay_sec": 5, "yil_sec": 2013, "sec": 1}) assert resp.json['forms']['schema']["title"] == "Dönem Bulunamadı" if i == 0: # İlk döngüde hata mesajından sonra eğer geriye dönülmesi seçilirse, # tarih seçme ekranına geri dönmesi beklenir. resp = self.client.post(form={"iptal": "null", "geri_don": 1, "sec": 1}, flow="tarih_sec") assert resp.json['forms']['schema'][ "title"] == "Puantaj Tablosu Hazırlamak İstediğiniz Yıl ve Ayı Seçiniz" if i == 1: # Eğer iptal butonuna basılırsa, işem iptali hakkında bilgilendirme # mesajı çıkması beklenir. resp = self.client.post(form={"iptal": 1, "geri_don": "null", "sec": 1}, flow="islem_iptali_bilgilendir") assert resp.json["msgbox"]["title"] == "Durum Mesajı" and "iptal" in resp.json["msgbox"]["msg"] if loop == 1: # Geçerli bir dönemin bulunduğu tarih seçilir. resp = self.client.post(form={"ay_sec": 11 , "yil_sec": 2016, "sec": 1}) # Ders ücreti hesaplama türü seçim ekranına gelmesi beklenir. assert resp.json['forms']['schema'][ "title"] == u"Puantaj Tablosu Hesaplama Türü Seçiniz" # Tür seçildikten sonra ekrana Puantaj Tablosu çıkarılması beklenir. resp = self.client.post(form={"ek_ders": 'null', "ders": 1}) assert "PUANTAJ TABLOSU" in resp.json['forms']['schema']["title"] # Kullanıcı adından öğretim görevlisinin adı soyadı bulunur. # Oluşturulan puantaj tablosunun doğru öğretim görevlisi adına # oluşturulup oluşturulmadığı kontrol edilir. okutman = user.personel.okutman okutman_adi = okutman.__unicode__() # Bir döneme denk geldiği kontrol edilir. donem_list = Donem.takvim_ayina_rastlayan_donemler(2016, 11) assert len(donem_list) == 1 ders_etkinlik_list = doneme_gore_okutman_etkinlikleri(donem_list, okutman, False) # Etkinlik olan günlerin etkinlik listede olduğu kontrol edilir. for etkinlik in DersEtkinligi.objects.filter(donem=donem_list[0], okutman=okutman, ek_ders=False): assert etkinlik.gun in ders_etkinlik_list[0] # Personel izin listesi getirilir. personel_izin_list = personel_izin_gunlerini_getir(okutman, 2016, 11) birim_unit = Unit.objects.get(yoksis_no=okutman.donemdeki_gorev_yeri(donem_list[0])) resmi_tatil_list = resmi_tatil_gunleri_getir(birim_unit,2016,5) assert 19 and 1 in resmi_tatil_list[0] tarih_araligi = ders_etkinligine_gore_tarih_araligi(donem_list, 2016, 11, birim_unit) resmi_tatil_list = resmi_tatil_gunleri_getir(birim_unit, 2016, 11) aylik_plan = okutman_aylik_plani(donem_list, ders_etkinlik_list, resmi_tatil_list, personel_izin_list, tarih_araligi,2016, 11) son_gun = yil_ve_aya_gore_ilk_ve_son_gun(2016, 11)[1].day for i in range(son_gun): if resp.json['objects'][1]['fields'][" %i"%(i+1)]== ' ': assert i+1 not in aylik_plan[0] elif resp.json['objects'][1]['fields'][" %i"%(i+1)]== 'İ': assert aylik_plan[0][i+1] == 'İ' elif resp.json['objects'][1]['fields'][" %i"%(i+1)]== 'R': assert aylik_plan[0][i+1] == 'R' else: hafta_gun = date(2016,11,i+1).isoweekday() assert resp.json['objects'][1]['fields'][" %i"%(i+1)] == str(ders_etkinlik_list[0][hafta_gun]) assert resp.json['objects'][1]['fields'][" %i"%(i+1)] == str(aylik_plan[0][i+1]) # Personel'in izin günlerinin doğru olup olmadığı test edilir. assert personel_izin_list == [16, 17, 18, 19, 20, 21] # Puantaj tablosu'nda öğretim görevlisinin isminin olduğu test edilir. assert okutman_adi.upper() in resp.json['forms']['schema']["title"].upper()
def test_ders_ucreti_hesaplama(self): for loop in range(3): # mutemet kullanıcısıyla giriş yapılır. user = User.objects.get(username='******') # testi yazılacak iş akışı seçilir. self.prepare_client('/ders_ucreti_hesaplama', user=user) self.client.post() if loop == 0: for i in range(2): # 2016 yılı Aralık ayı seçilir. Veritabanında seçilen yıl ve # ayı içeren dönem bulunmamaktadır. 'Dönem Bulunamadı' başlıklı # hata mesajının çıkması beklenir. resp = self.client.post(form={"ay_sec": 5, "yil_sec": 2013, "sec": 1}) assert resp.json['forms']['schema']["title"] == "Dönem Bulunamadı" if i == 0: # İlk döngüde hata mesajından sonra eğer geriye dönülmesi seçilirse, # tarih seçme ekranına geri dönmesi beklenir. resp = self.client.post(form={"iptal": "null", "geri_don": 1, "sec": 1}, flow="tarih_sec") assert resp.json['forms']['schema'][ "title"] == "Puantaj Tablosu Hazırlamak İstediğiniz Yıl ve Ayı Seçiniz" if i == 1: # Eğer iptal butonuna basılırsa, işlem iptali hakkında bilgilendirme # mesajı çıkması beklenir. resp = self.client.post(form={"iptal": 1, "geri_don": "null", "sec": 1}, flow="islem_iptali_bilgilendir") assert resp.json["msgbox"]["title"] == "Durum Mesajı" and "iptal" in resp.json["msgbox"]["msg"] if loop == 1: # Geçerli bir dönemin bulunduğu tarih seçildiğinde, mutemetin # işlem yaptığı birime ait öğretim görevlilerinin isimlerinin # olduğu bir form gelmesi beklenir. resp = self.client.post(form={"ay_sec": 11, "yil_sec": 2016, "sec": 1}) assert resp.json['forms']['schema']["title"] == "Okutman Seçiniz" # Ekrana gelen öğretim görevlisi sayısıyla veritabanındaki sayının # aynı olması beklenir. birim_no = self.client.current.role.unit.yoksis_no assert len(resp.json['forms']['model']["OkutmanListesi"]) == len( [o for o in Okutman.objects for gorev_birimi in o.GorevBirimi if gorev_birimi.yoksis_no == birim_no and gorev_birimi.donem == Donem.guncel_donem()]) okutman_listesi = resp.json['forms']['model']["OkutmanListesi"] # Varsayılan olarak tüm öğretim görevlileri seçili halde gelir. # Seçimleri kaldırılır. for i in range(len(okutman_listesi)): okutman_listesi[i]['secim'] = False for i in range(2): # Hiçbir öğretim görevlisi seçmeden ilerlemeye çalışıldığında, işlem # yapacak öğretim görevlisi olmadığından hata mesajı göstermesi beklenir. resp = self.client.post(form={"OkutmanListesi": okutman_listesi, "sec": 1}) assert resp.json['forms']['schema']["title"] == "Öğretim Görevlisi Seçmelisiniz" if i == 0: # İlk döngüde hata mesajından sonra eğer geriye dönülmesi seçilirse, # öğretim görevlisi seçme ekranına geri dönmesi beklenir. resp = self.client.post(form={"iptal": "null", "geri_don": 1, "sec": 1}, flow="okutman_sec") assert resp.json['forms']['schema']["title"] == \ "Okutman Seçiniz" if i == 1: # Eğer iptal butonuna basılırsa, işlem iptali hakkında bilgilendirme # mesajı çıkması beklenir. resp = self.client.post(form={"iptal": 1, "geri_don": "null", "sec": 1}, flow="islem_iptali_bilgilendir") assert resp.json["msgbox"]["title"] == "Durum Mesajı" and "iptal" in resp.json["msgbox"]["msg"] if loop == 2: # Geçerli bir tarih ve öğretim görevlisi seçilmesi senaryosu. resp = self.client.post(form={"ay_sec": 5, "yil_sec": 2016, "sec": 1}) okutman_listesi = resp.json['forms']['model']["OkutmanListesi"] for i in range(3): birim_no = self.client.current.role.unit.yoksis_no birim_unit = Unit.objects.get(yoksis_no=birim_no) # 2016 yılı Şubat ayı verilir. Bahar dönemi ders başlangıcı 21 Şubat olduğu # için tarih aralığının (21,29) olması kontrol edilir. if i == 0: donem_list = Donem.takvim_ayina_rastlayan_donemler(2016, 2) assert len(donem_list) == 1 tarih_araligi = ders_etkinligine_gore_tarih_araligi(donem_list, 2016, 2, birim_unit) assert tarih_araligi == [(21, 29)] # 2016 yılı Temmuz ayı verilir. Temmuz ayı Bahar dönemi bitişi ve Yaz dönemi başlangıcıdır. # 2 döneme denk gelir. Ama Temmuz ayında sadece yaz döneminin ders etkinlikleri vardır. # 2 döneme rastlayıp sadece 1 dönemin ders etkinliklerine rastladığı için, tarih aralığının # 2 tuple dan oluşması ve bir tanesinin birbirine eşit olması beklenir. if i == 1: donem_list = Donem.takvim_ayina_rastlayan_donemler(2016, 7) assert len(donem_list) == 2 tarih_araligi = ders_etkinligine_gore_tarih_araligi(donem_list, 2016, 7, birim_unit) assert tarih_araligi == [(1, 0), (15, 31)] # 2016 yılı Mayıs ayı verilir. Mayıs ayı Bahar dönemine rastlar. # 19 Mayıs ve 1 Mayıs'ın resmi tatil listesinde olması beklenir. else: donem_list = Donem.takvim_ayina_rastlayan_donemler(2016, 5) assert len(donem_list) == 1 resmi_tatil_list = resmi_tatil_gunleri_getir(birim_unit, 2016, 5) assert 19 and 1 in resmi_tatil_list[0] tarih_araligi = ders_etkinligine_gore_tarih_araligi(donem_list, 2016, 5, birim_unit) assert tarih_araligi == [(1, 31)] # Varsayılan olarak tüm öğretim görevlileri seçili olarak # gelmesini kontrol eder. for i in range(len(okutman_listesi)): assert okutman_listesi[i]['secim'] == True # Hepsi seçili olarak bir sonraki adıma ilerlenir. resp = self.client.post(form={"OkutmanListesi": okutman_listesi, "sec": 1}) # Ders ücreti hesaplama türü seçim ekranına gelmesi beklenir. assert resp.json['forms']['schema'][ "title"] == "Puantaj Tablosu Hesaplama Türü Seçiniz" resp = self.client.post(form={"ek_ders": 'null', "ders": 1}) for j, okutman in enumerate(okutman_listesi): okutman = Okutman.objects.get(okutman['key']) ders_etkinlik_list = doneme_gore_okutman_etkinlikleri(donem_list, okutman, False) # Etkinlik olan günlerin etkinlik listede olduğu kontrol edilir. for etkinlik in DersEtkinligi.objects.filter(donem=donem_list[0], okutman=okutman, ek_ders=False): assert etkinlik.gun in ders_etkinlik_list[0] # Personel izin listesi getirilir. personel_izin_list = personel_izin_gunlerini_getir(okutman, 2016, 5) aylik_plan = okutman_aylik_plani(donem_list, ders_etkinlik_list, resmi_tatil_list, personel_izin_list, tarih_araligi, 2016, 5) son_gun = yil_ve_aya_gore_ilk_ve_son_gun(2016, 5)[1].day for i in range(son_gun): if resp.json['objects'][j + 1]['fields'][" %i" % (i + 1)] == ' ': assert i + 1 not in aylik_plan[0] elif resp.json['objects'][j + 1]['fields'][" %i" % (i + 1)] == 'İ': assert aylik_plan[0][i + 1] == 'İ' elif resp.json['objects'][j + 1]['fields'][" %i" % (i + 1)] == 'R': assert aylik_plan[0][i + 1] == 'R' else: hafta_gun = date(2016, 5, i + 1).isoweekday() assert resp.json['objects'][j + 1]['fields'][" %i" % (i + 1)] == str( ders_etkinlik_list[0][hafta_gun]) assert resp.json['objects'][j + 1]['fields'][" %i" % (i + 1)] == str(aylik_plan[0][i + 1]) # Tür seçildikten sonra ekrana Puantaj Tablosu çıkarılması beklenir. assert "PUANTAJ TABLOSU" in resp.json['forms']['schema']["title"]
def 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 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_ders_ucreti_hesaplama(self): for loop in range(3): # mutemet kullanıcısıyla giriş yapılır. user = User.objects.get(username='******') # testi yazılacak iş akışı seçilir. self.prepare_client('/ders_ucreti_hesaplama', user=user) self.client.post() if loop == 0: for i in range(2): # 2016 yılı Aralık ayı seçilir. Veritabanında seçilen yıl ve # ayı içeren dönem bulunmamaktadır. 'Dönem Bulunamadı' başlıklı # hata mesajının çıkması beklenir. resp = self.client.post(form={ "ay_sec": 5, "yil_sec": 2013, "sec": 1 }) assert resp.json['forms']['schema'][ "title"] == "Dönem Bulunamadı" if i == 0: # İlk döngüde hata mesajından sonra eğer geriye dönülmesi seçilirse, # tarih seçme ekranına geri dönmesi beklenir. resp = self.client.post(form={ "iptal": "null", "geri_don": 1, "sec": 1 }, flow="tarih_sec") assert resp.json['forms']['schema'][ "title"] == "Puantaj Tablosu Hazırlamak İstediğiniz Yıl ve Ayı Seçiniz" if i == 1: # Eğer iptal butonuna basılırsa, işlem iptali hakkında bilgilendirme # mesajı çıkması beklenir. resp = self.client.post( form={ "iptal": 1, "geri_don": "null", "sec": 1 }, flow="islem_iptali_bilgilendir") assert resp.json["msgbox"][ "title"] == "Durum Mesajı" and "iptal" in resp.json[ "msgbox"]["msg"] if loop == 1: # Geçerli bir dönemin bulunduğu tarih seçildiğinde, mutemetin # işlem yaptığı birime ait öğretim görevlilerinin isimlerinin # olduğu bir form gelmesi beklenir. resp = self.client.post(form={ "ay_sec": 11, "yil_sec": 2016, "sec": 1 }) assert resp.json['forms']['schema'][ "title"] == "Okutman Seçiniz" # Ekrana gelen öğretim görevlisi sayısıyla veritabanındaki sayının # aynı olması beklenir. birim_no = self.client.current.role.unit.yoksis_no assert len( resp.json['forms']['model']["OkutmanListesi"]) == len([ o for o in Okutman.objects for gorev_birimi in o.GorevBirimi if gorev_birimi.yoksis_no == birim_no and gorev_birimi.donem == Donem.guncel_donem() ]) okutman_listesi = resp.json['forms']['model']["OkutmanListesi"] # Varsayılan olarak tüm öğretim görevlileri seçili halde gelir. # Seçimleri kaldırılır. for i in range(len(okutman_listesi)): okutman_listesi[i]['secim'] = False for i in range(2): # Hiçbir öğretim görevlisi seçmeden ilerlemeye çalışıldığında, işlem # yapacak öğretim görevlisi olmadığından hata mesajı göstermesi beklenir. resp = self.client.post(form={ "OkutmanListesi": okutman_listesi, "sec": 1 }) assert resp.json['forms']['schema'][ "title"] == "Öğretim Görevlisi Seçmelisiniz" if i == 0: # İlk döngüde hata mesajından sonra eğer geriye dönülmesi seçilirse, # öğretim görevlisi seçme ekranına geri dönmesi beklenir. resp = self.client.post(form={ "iptal": "null", "geri_don": 1, "sec": 1 }, flow="okutman_sec") assert resp.json['forms']['schema']["title"] == \ "Okutman Seçiniz" if i == 1: # Eğer iptal butonuna basılırsa, işlem iptali hakkında bilgilendirme # mesajı çıkması beklenir. resp = self.client.post( form={ "iptal": 1, "geri_don": "null", "sec": 1 }, flow="islem_iptali_bilgilendir") assert resp.json["msgbox"][ "title"] == "Durum Mesajı" and "iptal" in resp.json[ "msgbox"]["msg"] if loop == 2: # Geçerli bir tarih ve öğretim görevlisi seçilmesi senaryosu. resp = self.client.post(form={ "ay_sec": 5, "yil_sec": 2016, "sec": 1 }) okutman_listesi = resp.json['forms']['model']["OkutmanListesi"] for i in range(3): birim_no = self.client.current.role.unit.yoksis_no birim_unit = Unit.objects.get(yoksis_no=birim_no) # 2016 yılı Şubat ayı verilir. Bahar dönemi ders başlangıcı 21 Şubat olduğu # için tarih aralığının (21,29) olması kontrol edilir. if i == 0: donem_list = Donem.takvim_ayina_rastlayan_donemler( 2016, 2) assert len(donem_list) == 1 tarih_araligi = ders_etkinligine_gore_tarih_araligi( donem_list, 2016, 2, birim_unit) assert tarih_araligi == [(21, 29)] # 2016 yılı Temmuz ayı verilir. Temmuz ayı Bahar dönemi bitişi ve Yaz dönemi başlangıcıdır. # 2 döneme denk gelir. Ama Temmuz ayında sadece yaz döneminin ders etkinlikleri vardır. # 2 döneme rastlayıp sadece 1 dönemin ders etkinliklerine rastladığı için, tarih aralığının # 2 tuple dan oluşması ve bir tanesinin birbirine eşit olması beklenir. if i == 1: donem_list = Donem.takvim_ayina_rastlayan_donemler( 2016, 7) assert len(donem_list) == 2 tarih_araligi = ders_etkinligine_gore_tarih_araligi( donem_list, 2016, 7, birim_unit) assert tarih_araligi == [(1, 0), (15, 31)] # 2016 yılı Mayıs ayı verilir. Mayıs ayı Bahar dönemine rastlar. # 19 Mayıs ve 1 Mayıs'ın resmi tatil listesinde olması beklenir. else: donem_list = Donem.takvim_ayina_rastlayan_donemler( 2016, 5) assert len(donem_list) == 1 resmi_tatil_list = resmi_tatil_gunleri_getir( birim_unit, 2016, 5) assert 19 and 1 in resmi_tatil_list[0] tarih_araligi = ders_etkinligine_gore_tarih_araligi( donem_list, 2016, 5, birim_unit) assert tarih_araligi == [(1, 31)] # Varsayılan olarak tüm öğretim görevlileri seçili olarak # gelmesini kontrol eder. for i in range(len(okutman_listesi)): assert okutman_listesi[i]['secim'] == True # Hepsi seçili olarak bir sonraki adıma ilerlenir. resp = self.client.post(form={ "OkutmanListesi": okutman_listesi, "sec": 1 }) # Ders ücreti hesaplama türü seçim ekranına gelmesi beklenir. assert resp.json['forms']['schema'][ "title"] == "Puantaj Tablosu Hesaplama Türü Seçiniz" resp = self.client.post(form={"ek_ders": 'null', "ders": 1}) for j, okutman in enumerate(okutman_listesi): okutman = Okutman.objects.get(okutman['key']) ders_etkinlik_list = doneme_gore_okutman_etkinlikleri( donem_list, okutman, False) # Etkinlik olan günlerin etkinlik listede olduğu kontrol edilir. for etkinlik in DersEtkinligi.objects.filter( donem=donem_list[0], okutman=okutman, ek_ders=False): assert etkinlik.gun in ders_etkinlik_list[0] # Personel izin listesi getirilir. personel_izin_list = personel_izin_gunlerini_getir( okutman, 2016, 5) aylik_plan = okutman_aylik_plani(donem_list, ders_etkinlik_list, resmi_tatil_list, personel_izin_list, tarih_araligi, 2016, 5) son_gun = yil_ve_aya_gore_ilk_ve_son_gun(2016, 5)[1].day for i in range(son_gun): if resp.json['objects'][j + 1]['fields'][" %i" % (i + 1)] == ' ': assert i + 1 not in aylik_plan[0] elif resp.json['objects'][j + 1]['fields'][" %i" % (i + 1)] == 'İ': assert aylik_plan[0][i + 1] == 'İ' elif resp.json['objects'][j + 1]['fields'][" %i" % (i + 1)] == 'R': assert aylik_plan[0][i + 1] == 'R' else: hafta_gun = date(2016, 5, i + 1).isoweekday() assert resp.json['objects'][j + 1]['fields'][ " %i" % (i + 1)] == str( ders_etkinlik_list[0][hafta_gun]) assert resp.json['objects'][j + 1]['fields'][ " %i" % (i + 1)] == str(aylik_plan[0][i + 1]) # Tür seçildikten sonra ekrana Puantaj Tablosu çıkarılması beklenir. assert "PUANTAJ TABLOSU" in resp.json['forms']['schema'][ "title"]