Skip to content
This repository has been archived by the owner on Jun 21, 2019. It is now read-only.

Commit

Permalink
Merge branch 'feature/ders_ucreti_hesaplama' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
alirizakeles committed Jul 26, 2016
2 parents fcef089 + 5fc9567 commit df08481
Show file tree
Hide file tree
Showing 9 changed files with 8,776 additions and 10 deletions.
7,409 changes: 7,409 additions & 0 deletions tests/fixtures/puantaj_data_set.csv

Large diffs are not rendered by default.

278 changes: 278 additions & 0 deletions ulakbus/diagrams/ders_ucreti_hesaplama.bpmn

Large diffs are not rendered by default.

263 changes: 263 additions & 0 deletions ulakbus/diagrams/okutman_ders_ucreti_goruntuleme.bpmn

Large diffs are not rendered by default.

12 changes: 9 additions & 3 deletions ulakbus/lib/common.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# -*- coding: utf-8 -*-

from ..models import AkademikTakvim, ObjectDoesNotExist, Unit, Room, DersEtkinligi, SinavEtkinligi
# todo: remove
#from ulakbus.models import AkademikTakvim, ObjectDoesNotExist, Unit, Room, DersEtkinligi
from math import floor
import datetime

Expand All @@ -9,6 +11,8 @@
# CPSolver'ın ID alanlarında kabul ettiği maximum değer
SOLVER_MAX_ID = 900000000000000000

AYLAR = [(1, 'Ocak'),( 2, 'Şubat'), (3, 'Mart'), (4, 'Nisan'), (5, 'Mayıs'), (6, 'Haziran'), (7, 'Temmuz'),
(8, 'Ağustos'), (9, 'Eylül'), (10, 'Ekim'), (11, 'Kasım'), (12, 'Aralık')]

def saat2slot(saat):
return saat * 60 / SLOT_SURESI
Expand Down Expand Up @@ -47,14 +51,16 @@ def datetime2timestamp(dt):
"""
return (dt - datetime.datetime(1970, 1, 1)).total_seconds()

def get_akademik_takvim(unit):
def get_akademik_takvim(unit,ogretim_yili):
#verilen ogretim yilina gore guncel akademik
# dondurmesi icin ogretim_yili parametresi eklenmistir.
try:
akademik_takvim = AkademikTakvim.objects.get(birim_id=unit.key)
akademik_takvim = AkademikTakvim.objects.get(birim_id=unit.key,ogretim_yili = ogretim_yili)
return akademik_takvim
except ObjectDoesNotExist:
yoksis_key = unit.parent_unit_no
birim = Unit.objects.get(yoksis_no=yoksis_key)
return get_akademik_takvim(birim)
return get_akademik_takvim(birim,ogretim_yili)


def ders_programi_doldurma(root):
Expand Down
8 changes: 7 additions & 1 deletion ulakbus/models/ders_programi_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@


class DersEtkinligi(Model):

class Meta:
verbose_name = "Ders Etkinliği"
search_fields = ['unit_yoksis_no', 'room', 'okutman']
Expand All @@ -26,6 +26,12 @@ class Meta:
published = fields.Boolean('Ders Planı Yayınlanma Durumu', index=True)
# Arama amaçlı
ders = Ders('Ders', index=True)
ek_ders = fields.Boolean(index=True)
sure = fields.Integer("Ders Etkinliği Süresi",index=True)

# teori = field.Integer("Ders Teori Saati", index=True)
# uygulama = field.Integer("Ders Uygulama Saati", index=True)
# dersin süresinin ne kadarı teori ne kadarı uygulama gibi 2+2, 4+0 gibi

# to be calculated
room = Room('Derslik')
Expand Down
71 changes: 65 additions & 6 deletions ulakbus/models/ogrenci.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@
from .auth import Unit
from .buildings_rooms import Room, RoomType
from .personel import Personel

from datetime import timedelta
from datetime import date
from ulakbus.models.personel import Izin

class HariciOkutman(Model):
"""Harici Okutman Modeli
Expand Down Expand Up @@ -201,6 +203,7 @@ class Donem(Model):
baslangic_tarihi = field.Date("Başlangıç Tarihi", index=True, format="%d.%m.%Y")
bitis_tarihi = field.Date("Bitiş Tarihi", index=True, format="%d.%m.%Y")
guncel = field.Boolean(index=True)
ogretim_yili = field.Integer("Öğretim Yılı", index=True)

@classmethod
def guncel_donem(cls):
Expand All @@ -225,6 +228,35 @@ class Meta:
def __unicode__(self):
return '%s %s' % (self.ad, self.baslangic_tarihi)

@staticmethod
def donem_dondur(yil,ay,takvim):

baslangic = date(yil, ay, 01)
bitis = date(yil, ay, takvim[1])

donem_list = []
for donem in Donem.objects.filter():

# Dönemin bitiş tarihi seçilen ay içerisinde oluyorsa
# 01.08.2016 - 13.08.2016 - 31.08.2016 (Yaz Dönemi Bitişi)
if donem.bitis_tarihi >= baslangic and donem.bitis_tarihi <= bitis:
donem_list.append(donem)

# Dönemin başlangıç tarihi seçilen ay içerisinde oluyorsa
# 01.02.2016 - 21.02.2016 - 29.02.2016 (Güz Dönemi Başlangıcı)
elif donem.baslangic_tarihi >= baslangic and donem.baslangic_tarihi <= bitis:
donem_list.append(donem)

# Dönem, seçilen ayın bütün günlerini kapsıyorsa
# 21.02.2016 - Nisan Ayı - 15.06.2016 (Güz Dönemi)
elif donem.baslangic_tarihi < baslangic and donem.bitis_tarihi > bitis:
donem_list.append(donem)

# Eğer iki donem varsa bitis tarihi once olani ilk siraya koyar.
if len(donem_list) == 2 and donem_list[0].bitis_tarihi > donem_list[1].bitis_tarihi:
donem_list[0],donem_list[1] = donem_list[1], donem_list[0]

return donem_list

class Program(Model):
"""Program Modeli
Expand Down Expand Up @@ -330,6 +362,10 @@ class DerslikTurleri(ListNode):
sinif_turu = RoomType()
ders_saati = field.Integer("Ders Saati", index=True)

# teori = field.Integer("Ders Teori Saati", index=True)
# uygulama = field.Integer("Ders Uygulama Saati", index=True)
# dersin süresinin ne kadarı teori ne kadarı uygulama gibi 2+2, 4+0 gibi

class Meta:
app = 'Ogrenci'
verbose_name = "Ders"
Expand Down Expand Up @@ -969,8 +1005,13 @@ def __unicode__(self):
('63', 'Yaz Dönemi Başlangıcı'),
('64', 'Yaz Dönemi Derslerin Bitişi'),
('65', 'Yaz Dönemi Sınavların Başlangıcı'),
('66', 'Yaz Dönemi Bitişi')

('66', 'Yaz Dönemi Bitişi'),
('67', 'Güz Dönemi Dersler'),
('68', 'Bahar Dönemi Dersler'),
('69', 'Yaz Dönemi Dersler'),
('70', '1 Mayıs İşçi Bayrami'),
('71', '23 Nisan Ulusal Egemenlik ve Çocuk Bayramı'),
('72', '19 Mayıs Genclik ve Spor Bayramı')


]
Expand All @@ -988,8 +1029,8 @@ class AkademikTakvim(Model):
"""

birim = Unit("Birim", index=True)
yil = field.Date("Yıl", index=True)

# yil = field.Date("Yıl", index=True)
ogretim_yili = field.Integer("Öğretim Yılı", index=True)

class Meta:
app = 'Ogrenci'
Expand Down Expand Up @@ -1035,9 +1076,10 @@ class Takvim(Model):
baslangic = field.DateTime("Başlangıç", index=True, format="%d.%m.%Y", required=False)
bitis = field.DateTime("Bitiş", index=True, format="%d.%m.%Y", required=False)
akademik_takvim = AkademikTakvim("Akademik Takvim")
resmi_tatil = field.Boolean("Resmi Tatil", index = True)

def pre_save(self):
if not self.baslangic or not self.bitis:
if not self.baslangic and not self.bitis:
raise Exception("Tarihlerden en az bir tanesi dolu olmalidir.")

class Meta:
Expand All @@ -1048,9 +1090,26 @@ class Meta:
def __unicode__(self):
return '%s %s %s' % (self.akademik_takvim.birim, self.akademik_takvim.yil, self.etkinlik)

@staticmethod
def resmi_tatil_gunleri_getir(donem_list,birim_unit,yil,ay):

from ulakbus.lib.common import get_akademik_takvim

resmi_tatil_list = []
akademik_takvim_list = []
for donem in donem_list:
akademik_takvim = get_akademik_takvim(birim_unit,donem.ogretim_yili)
resmi_tatiller = Takvim.objects.filter(akademik_takvim = akademik_takvim,resmi_tatil= True)

tatil_list=[]
for resmi_tatil in resmi_tatiller:
for gun in Izin.zaman_araligi(resmi_tatil.baslangic, resmi_tatil.bitis):
if gun.month==ay and gun.year==yil:
tatil_list.append(gun.day)
resmi_tatil_list.append(tatil_list)
akademik_takvim_list.append(akademik_takvim)

return resmi_tatil_list, akademik_takvim_list

class DonemDanisman(Model):
"""Dönem Danışmanları Modeli
Expand Down
50 changes: 50 additions & 0 deletions ulakbus/models/personel.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
from ulakbus.lib.personel import gorunen_kademe_hesapla
from .auth import Unit, User
from ulakbus.settings import SICIL_PREFIX
from datetime import timedelta


class Personel(Model):
Expand Down Expand Up @@ -409,6 +410,55 @@ class Meta:
def __unicode__(self):
return '%s %s' % (self.tip, self.onay)

@staticmethod
def personel_izin_gunlerini_getir(okutman,yil,ay):
"""
Args:
okutman: okutman object
yil: 2016
ay: 7
Returns: Seçilen yıl ve ay içinde
okutmanın izin ve ücretsiz izinlerini
gün şeklinde döndüren liste.
"""
personel_izin_list = []

personel_izinler = Izin.objects.filter(personel = okutman.personel)

for personel_izin in personel_izinler:
for gun in Izin.zaman_araligi(personel_izin.baslangic, personel_izin.bitis):
if gun.month == ay and gun.year == yil:
personel_izin_list.append(gun.day)

personel_ucretsiz_izinler = UcretsizIzin.objects.filter(personel=okutman.personel)

for personel_izin in personel_ucretsiz_izinler:
for gun in Izin.zaman_araligi(personel_izin.baslangic_tarihi, personel_izin.bitis_tarihi):
if gun.month == ay and gun.year == yil:
personel_izin_list.append(gun.day)

return personel_izin_list

@staticmethod
def zaman_araligi(baslangic, bitis):
"""
Verilen iki tarih arasinda kalan tarihleri
donduren method.
Args:
baslangic: Date 02.04.2016
bitis: Date 04.04.2016
Returns:
[02.04.2016,03.04.2016,04.04.2016]
"""

for n in range(int((bitis - baslangic).days) + 1):
yield baslangic + timedelta(n)


class UcretsizIzin(Model):
"""Ücretsiz izin Modeli
Expand Down
Loading

0 comments on commit df08481

Please sign in to comment.