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 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 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 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 ders_etkinligine_gore_tarih_araligi(donem_list, yil, ay, birim_unit): tarih_araligi = [] # Hangi dönemin ders başlangıç ve bitiş tarihinin # dikkate alınacağını belirlemek için Akademik Takvim'de # bulunan etkinlik döneme göre seçilir. for donem in donem_list: # İçinde bulunulan dönemin ders başlangıç ve bitiş tarihlerini # bulmak için kullanılır. etkinlik = 66 if 'Güz' in donem.ad else 67 if 'Bahar' in donem.ad else 68 # Kapsanan donemin ders baslangic tarihi akademik_takvim = get_akademik_takvim(birim_unit, donem.ogretim_yili) ders_bas_tarih = Takvim.objects.get( akademik_takvim=akademik_takvim, etkinlik=etkinlik).baslangic.date() # Kapsanan donemin ders bitis tarihi ders_bit_tarih = Takvim.objects.get(akademik_takvim=akademik_takvim, etkinlik=etkinlik).bitis.date() # Seçilen ayın ilk günü = 01.08.2016 # Seçilen ayın son günü = 31.08.2016 ay_baslangic, ay_bitis = yil_ve_aya_gore_ilk_ve_son_gun(yil, ay) # 08.08.2016 > 01.08.2016 # baslangic_tarih = 08.08.2016 # dönem başlangıcı ve ders başlangıcı seçilen ayın içindedir # 05.09.2016 > 01.08.2016 # baslangic_tarih = 31.08.2016 # dönem başlangıcı seçilen ayın içindedir ama ders başlangıcı diğer aya sarkmıştır # 15.07.2016 < 01.08.2016 # baslangic_tarih = 01.08.2016 # dönem başlangıcı ve ders başlangıcı seçilen aydan öncedir # 15.08.2016 < 31.08.2016 # bitis_tarih = 15.08.2016 # dönem bitişi ve ders bitişi seçilen ayın içindedir # 25.07.2016 < 31.08.2016 # bitis_tarih = 01.08.2016 # dönem bitişi seçilen ayın içindedir ama ders bitişi bir önceki aydır # 15.09.2016 > 31.08.2016 # bitis_tarih = 31.08.2016 # dönem bitişi ve ders bitişi seçilen aydan sonradır if not ders_bas_tarih > ay_baslangic: baslangic_tarih = ay_baslangic.day elif ders_bas_tarih.month == ay: baslangic_tarih = ders_bas_tarih.day else: baslangic_tarih = ay_bitis.day if not ders_bit_tarih < ay_bitis: bitis_tarih = ay_bitis.day elif ders_bit_tarih.month == ay: bitis_tarih = ders_bit_tarih.day else: bitis_tarih = ay_baslangic.day # Eğer tuple lardan birisi (1,1) ya da (31,31) gibiyse bu # seçilen ayın içinde bir döneme rast geldiğini fakat ders etkinliğine # rast gelmediğini gösterir, mesela Temmuz ayının seçildiğini varsayarsak # yaz dönem başlangıcı 25 Temmuz olsun, ama ders etkinliği 3 Ağustosa sarkmış # olsun. Bu durumda ders etkinlikleri seçilen aydan sonraki ayda olduğu için, # (31,31) tuple'ı döner, böylelikle hesaplama yapılırken döngünün dönmemesi # sağlanmış olur. Hesaplama yapılırken günlerin düzgün hesaplanabilmesi için, # tuple'ın ikinci elemanı bir arttırılır. Bunun içinde eğer tuple'ın iki elemanı # da eşitse hesaplama yapılırken bir arttırılacağından burada ikinci eleman # bir azaltılır. if baslangic_tarih == bitis_tarih: bitis_tarih -= 1 tarih_araligi.append((baslangic_tarih, bitis_tarih)) return tarih_araligi
def ders_etkinligine_gore_tarih_araligi(donem_list, yil, ay, birim_unit): tarih_araligi = [] # Hangi dönemin ders başlangıç ve bitiş tarihinin # dikkate alınacağını belirlemek için Akademik Takvim'de # bulunan etkinlik döneme göre seçilir. for donem in donem_list: # İçinde bulunulan dönemin ders başlangıç ve bitiş tarihlerini # bulmak için kullanılır. etkinlik = 66 if 'Güz' in donem.ad else 67 if 'Bahar' in donem.ad else 68 # Kapsanan donemin ders baslangic tarihi akademik_takvim = get_akademik_takvim(birim_unit, donem.ogretim_yili) ders_bas_tarih = Takvim.objects.get(akademik_takvim=akademik_takvim, etkinlik=etkinlik).baslangic.date() # Kapsanan donemin ders bitis tarihi ders_bit_tarih = Takvim.objects.get(akademik_takvim=akademik_takvim, etkinlik=etkinlik).bitis.date() # Seçilen ayın ilk günü = 01.08.2016 # Seçilen ayın son günü = 31.08.2016 ay_baslangic, ay_bitis = yil_ve_aya_gore_ilk_ve_son_gun(yil, ay) # 08.08.2016 > 01.08.2016 # baslangic_tarih = 08.08.2016 # dönem başlangıcı ve ders başlangıcı seçilen ayın içindedir # 05.09.2016 > 01.08.2016 # baslangic_tarih = 31.08.2016 # dönem başlangıcı seçilen ayın içindedir ama ders başlangıcı diğer aya sarkmıştır # 15.07.2016 < 01.08.2016 # baslangic_tarih = 01.08.2016 # dönem başlangıcı ve ders başlangıcı seçilen aydan öncedir # 15.08.2016 < 31.08.2016 # bitis_tarih = 15.08.2016 # dönem bitişi ve ders bitişi seçilen ayın içindedir # 25.07.2016 < 31.08.2016 # bitis_tarih = 01.08.2016 # dönem bitişi seçilen ayın içindedir ama ders bitişi bir önceki aydır # 15.09.2016 > 31.08.2016 # bitis_tarih = 31.08.2016 # dönem bitişi ve ders bitişi seçilen aydan sonradır if not ders_bas_tarih > ay_baslangic: baslangic_tarih = ay_baslangic.day elif ders_bas_tarih.month == ay: baslangic_tarih = ders_bas_tarih.day else: baslangic_tarih = ay_bitis.day if not ders_bit_tarih < ay_bitis: bitis_tarih = ay_bitis.day elif ders_bit_tarih.month == ay: bitis_tarih = ders_bit_tarih.day else: bitis_tarih = ay_baslangic.day # Eğer tuple lardan birisi (1,1) ya da (31,31) gibiyse bu # seçilen ayın içinde bir döneme rast geldiğini fakat ders etkinliğine # rast gelmediğini gösterir, mesela Temmuz ayının seçildiğini varsayarsak # yaz dönem başlangıcı 25 Temmuz olsun, ama ders etkinliği 3 Ağustosa sarkmış # olsun. Bu durumda ders etkinlikleri seçilen aydan sonraki ayda olduğu için, # (31,31) tuple'ı döner, böylelikle hesaplama yapılırken döngünün dönmemesi # sağlanmış olur. Hesaplama yapılırken günlerin düzgün hesaplanabilmesi için, # tuple'ın ikinci elemanı bir arttırılır. Bunun içinde eğer tuple'ın iki elemanı # da eşitse hesaplama yapılırken bir arttırılacağından burada ikinci eleman # bir azaltılır. if baslangic_tarih == bitis_tarih: bitis_tarih -= 1 tarih_araligi.append((baslangic_tarih, bitis_tarih)) return tarih_araligi