Adı: Bütçe Uygulaması
Türü: Web Uygulaması
Platform: .NET 2.0
Bu bütçe uygulaması ile kurumsal bütçe’nin planlanması, satınalma ve harcamaların formal bir yapıya kavuşturulup, fiansal takip, analiz imkanının ilgili kurum kullanıcılarına sunulması amaçlanmıştır.
Kurumsal bütçe oluşturulması, satınalma va harcama kayıtlarının düzenli tutulması ve güncellenmesini sağlayan bir bütçe uygulaması gerçekleştirmek.
Uygulama ile bütçe oluşturulabilecek, satınalma ve harcama kayıtları tutulacak ve kayıtlara göre bütçe güncellenecektir.
Kavram karmaşasını engellemek ve konuları doğru ifade edebilmek için aşapıda belirilen kavramlar çerçevesinde analiz yürütülecektir.
Bütçe kodu: Kurumun yapısına uygun harcama kalemlerini belirten kod ve ad niteliklerine sahip hiyerarşik tanımlama yapısı.
Bütçe kalemi:Kurumun cari yıl , bütçe kodu ve bu kod için ayrılmış para miktarını belirten kayıt.
Ödenek: Bütçe kalemine ayrılmış para miktarı
İşlem: Bütçe kalemine bağlı yapılmış satına alma faaliyetinin her biri.
Bloke: İşlem için ayrılmış para miktarı
Harcama: İşlem adına ilgili muhataba yapılan para ödeme miktarı.
Kurumun yıllık harcayabileceği maksimum paranın (toplam ödenek) tahmini harcama alanlarına paylaştırılmasını sağlamak, paylaşım üzerinden satınalma işlemlerini kayıt ve takibini yürütmek.
Bütçe Projesi ile;
Kuruma ayrılan toplam ödeneğin, kuruma ait bütçe kodlarına göre paylaşımı yapılacak (ödenek miktarlarının belirlenmesi), bu paylaşım üzerinden satın alma işlemlerinin gerçekleştirilmesi yapılacaktır.
İşlem için yeterli miktarda para ilgili bütçe kaleminden bloke edilir, ilgili bütçe kalemi altında yer alan her bir işlem blokesi toplamı ödenek miktarını aşamayacaktır.
Son aşamada harcamalar ele alınacaktır. Harcama bir işleme ait olup, her işlemin en az bir harcaması olmalı ve harcamalar toplamı işlem blokesini geçmemelidir.
Not: Proje içerisinde yer alan resim(ler) tıklanarak daha net bir görüntüleme sağlanabilir.
Belgede Bütçe Uygulaması'nın kapsamı ifade edilecek ve gerçekleştirim için gerekli tasarım aşamaları olan, veri yapıları, işlevler ve işlevlerin sınıflandırılması ve bağlı olarak modül yapıları netleştirilerek son olarak ta kullanıcı arayüzü ortaya çıkarılacaktır.
Yazılımın Hedefleri: Web tabanlı bir yaklaşımla, platform bağımsız olarak kullanıcının kurumsal mali verilerine ulaşım, ve yetki durumuna göre düzenleme imkanı sağlayarak, zaman ve emek kaybını önlemek. Ayrıca Hedef alınan kurum (Ankara İl Sağlık Müdürlüğü) benzeri kurumlarında var olduğu düşünülerek birden fazla kurum tarafından kullanılabilir olması hedeflenmiştir.
Başlıca Müşteri İsterleri: Kuruma ayrılan paranın tanımlı bütçe kodlarına göre paylaşımını sağlamak, paylaşım üzerinden işlemleri oluşturmak ve işlemler üzerinden ödemeleri gerçekleştirmek müşteri isterlerinin omurgasını oluşturmaktadır. Bu omurga üzerinden paranın paylaşımı, işlemlere ayrılan para ve bu para üzerinden ödemelerin kaydı sağlanacak ve görüntülenebilecektir.
Tasarım Sınırlamaları: Kodlama .NET tabanlı olacağından sunucu tarafı windows bağımlı olacaktır.
Çok kullanıcılı bir uygulama olmasına rağmen aynı kayıt üzerinde birden fazla kullanıcının işlem yapma olasılığı göz ardı edilmiş, ancak bazı işlem doğrulamaları veri bütünlüğü ve uygulama hedeflerinin garantilenebilmesi amacı ile sunucu taraflı kontroller ile sağlanmıştır.
Performans en öncelikli konu olarak belirlendi. Bu yüzden uygulamanın her katmanında gereği halinde fonksiyonel yapılar, gereği halinde nesne yapıları kullanılacaktır. Bu aynı zamanda projenin daha hızlı tamamlanmasını da sağlayacak diye düşünüldü. Uygulama ne tam olarak nesne yönelimli ne de fonksiyoneldir.
Uygulama sistem tasarımı modüler olarak aşağıda gösterildiği şekilde ifade edilebilir:
Kayıt işlemleri her üç form (bütçe, işlem ve harcama) için aynı sürece sahip olduklarından tek diyagram ile gösteriliyor.
Görüntüleme işlemleri her üç form (bütçe, işlem ve harcama) için aynı sürece sahip olduklarından tek diyagram ile gösteriliyor.
Performans açısından kullanıcı tarafında uygulamaya özgün yapılar kurulurken diğer taraftan da uygulama arayüzünü dinamik hale getirebilmek için nesne yönelimli yapılar kurulacaktır. Sunucu tarafında kullanıcı tarafındaki uygulama nesnelerinin tamamlayıcısı niteliğinde nesne ve işlevler tanımlanacaktır.
Kullanıcı tarafı ile sunucu arasında, uygulama başlatıldığı anda arayüze ilişkin tüm veriler yüklenmiş olacak, sonraki işlemlerin tamamında ham verilerin dışında herhangi bir data transferi olmayacak.
Sunucu Tarafı Class İlişki Diyagramı
Kullanıcı Tarafı Class İlişki Diyagramı
Veri Tabanı Diyagramı
Bütçe Form Değişkenleri
İşlem Form Değişkenleri
Harcama Form Değişkenleri
Arayüz Grafik Tasarımları
Bütçe formu
İşlem(satın alma) formu
Harcama formu (durum 1)
Harcama formu (durum 2)
Özet bütçe görünümü
Not: Proje içerisinde yer alan resim(ler) tıklanarak daha net bir görüntüleme sağlanabilir.
Projenin Gerçekleştirimine dair açıklamalar ile proje tanıtımı ve kullanımı veritabanı yapısı detaylı olarak tanımlanacatır.
Aşağıda belirtilen hususlar/ihtiyaçlar gerçekleştirim aşamasında ortaya çıkmışlar ve projenin genel mantığı çerçevesinde tasarıma dahil edilmişlerdir. Geliştirme yöntemi olarak Helezon Modeli Benimsendiğinden aşağıda belirtilen hususlar bir sorun değil projenin devemı olarak düşünülebilir.
Kodlama öncesi hazırlık amacı ile oluşturulmuş ve kodlama esnasında özellikle kritik iş kontrollerinin takibini kolaylaştırmak amacı ile oluşturulmuş bulunan kaba sistem algoritması:
Algoritmada kullanılacak kısaltmaların açıklanması:
SS (Server Side): işlevin sunucuda yerine getirilmesi
CS (Client Side): işlevin kullanıcı tarayıcısında (javascrip fn) yerine getirilmesi
VT (Veri Tabanında): İşlevin storedprocedure içerisinde yerine getirilmesi
VT ve CS kısaltmaları algoritma da peşi sıra kullanılmış, ara bsamaklarda kullanılmamıştır. Bu durumlarda en son kullanılan geçerli olduğu düşünülmelidir. Algoritma basamak başında kullanılan "+" "-" işaretleri kontrolün uygulamaya yansıtıldığını ya da yansıtılmasığını ifade etmektedir.
SP(Storedprocedure): Veri tabanında depolanmış ve adlandırılmış sorgu kümesi, VT Yapısında isimleri verilmelte ayrıca, script dosyası aşağıda sunulmaktadır. Script dosyası içinde kodlarla birlikte yeterli yorum satırları içerilmiştir.
retVal : İşlev ya da SP’nin dönüş değeri, genel olarak işlem burada sonlanır, istisnaları vardır. Bu değer kullanıcı tarafında yakalanack ve kullanıcıya gerekli ileti gösterilecektir.
- CS Listeden ibutce kalemi seç (list.row.click()) + form veilerini set et + VT butce silinebilr mi SP: butce_silinebilirMi + iptal edilmemis alt islemi var mı? + CS silinebilr mi cevabini degerlendir: + silinebilirse btnSil visible + degilse btnSil invisible + btnSil.click() [ prog.butceSil() ] + VT sil islemini bsalat SP: butce_Sil + iptal edilmemis islemi yoksa *** + butce_silinebilirMi SP: butce_silinebilirMi + iptal edilmis alt islemi varsa *** + alt islemlerin iptal edilmis harcamalari varsa + iptal edilmis harcamalari sil + iptal edilmis islemleri sil + butce kalemini sil retVal 1 + CS sil basarili ise + list.silRow() + data arr dan kayit arr i cikar + tablodan sil (table.delteRow(idx)) + liste.secRow = null + CS kaydet + genel kontrol + odenek negatif degilse + kapsam belirtilmisse + butce yili cari yil ise + yeni kayit kontrolü + kod hiearchi sinde en alt seviyedense + kayit update kontrolü + odenek, dogrudan ve ihale blokeleri toplamindan kucuk degilse + butce yili, kodu degistirilemez (form.design hallediliyor) + kontroller ok sa + VT KAYİT BASLAT SP: butce_kayit + genel kontroller + odenek negatif ise retVal -5 + log tut SP: logtut_butce + insert kontrolleri *** + butce kodu kaydi yok ise retVal -2 + CS kayit basarili ise + yeni kayitsa: + list data arr in basina data ekle + tablonun basina row ekle ve datayi manipüle et + row u sec [ list.row.click() ] + menu disayn: set düzenle mod + degilse + data arr da kayit data yi bul ve guncelle + tablo satirini yenile (guncellenmis verileri goster) + satiri hesapla (bazı alanlar dinamik olusur) + tablo colon toplamlarini hesapla ve goster + from datayi guncelle
+ CS Listeden işlem seç (list.row.click()) + form veilerini set et + işlem KAYDET + kontroller: + işlem en alt butce kaleminden yapılır [ butce tarafinda garanti ediliyor ] + işlem tarih yili butce yilindan once olamaz, sonraki yilin 3. ayindan büyük olamaz + blokeler toplami butce odenegini gecemez + şube/birim belirtilmeli + baslangic bloke belirtilmemisse blokeye esitle + alim yontemi belirtilmeli + dogrudan alim ise harca checkbox visible + degilse harca checkbox invisible + yeni kayit ise + set basbloke = bloke + islem yeni kayit degil + hrcanan > 0 ise basbloke degismez: set basbloke = bloke + iptal checked ise iptal alanları visible - gecerli tarih girilmelidir - tarih işlem tarihinden önce ve sonraki yılın 3. ayını geçemez - kontroller ok se - VT Kayit islemine basla SP: butce_kayitIslem + bloke < 0 ise retVal = -9 + kayit update ise + automatic harcama updatette gorulmnez *** + kayit iptal isteginde alt kaydi varsa retVal = -4 + gerceklesmis harcama kaydı varsa (iptal ya da degil) set basBlokesi = bloke *** + bloke iptal edilmemis harcamalar toplamindan kucukse retVal = -5 *** + kapsamdaki iptal edilmemis doğrudan blokeler toplami kapsamdaki ödenekler toplaminin %10'u gecemez retVal = -6 + blokeler toplami butce odenegini geciyorsa retVal = -7 *** + işlem iptal ise retVal = -10 + kayit UPDATE retVal = kayitID + yeni kayit ise + iptal kaydi girilemez (defautl olarak iptal gorulmez) + kayıt INSERT retVal = kayitID + autoHarca true ve alim ihale istisna ve retVal > 0 ise + harcama kaydet SP: butce_kayitHarca + kayit gerceklesmemisse retVal = -8 + retVal > 0 ise (kayıt gerceklesmisse) + iptal edilmemis islem harcamalar/blokeler toplamini butceye guncelle SP: butce_guncelleBlokeHarcanan + log tut SP: logtut_butce_islem + CS basarili insert/update + blokeler ve harcamalar toplamini butce data ve tablosuna guncelle + automatic harca true ve yeni kayıt ise + islem ve bütçe tablolarına yansımaları gerçekleştir + basarisiz ise kullanici mesaji ilet
+ CS Listeden iharcama seç (list.row.click())
+ form veilerini set et
+ işlem KAYDET
- kontroller
- harcama tarihi islem tarihinden once ve sonraki yılın 3. ayından sonra olamaz
- iptal tarihi harcama tarihinden once olamaz
- 0 ve < 0 harcama kaydi olusturulamaz
- harcamalar toplami islem blokesinden buyuk olamaz
- kontroller tamam ise
- VT kayit islemine basla: SP: butce_kayitHarca
*** + harcamalar toplamı blokeyi geciyorsa retVal -5
+ 0 ve < 0 harcama kaydi girilemez retVal -6
+ kayit INSERT retVal = kayitID
+ kayitID > 0 ise
+ log tut SP: logtut_butce_harcama
+ harcamalar toplamini islem tablosuna guncelle butce_guncelleBlokeHarcanan
+ harcama isleminin harcamalar toplamini alim yontemine gore butce tablosuna guncelle SP: butce_guncelleHarcanan
+ CS basarili harcama insert/update :
+ harcama miktarındaki degisimi
+ islem data, tablo secili row ve toplam rovuna eklenir (ilgili diğer alanlar yeniden hesaplanır)
+ butce data, tablo secili row ve toplam rowuna eklenir (ilgili diğer alanlar yeniden hesaplanır)
+ bsaraisiz ise kullanıcyı bilgilendir
*** Kritik kısımlar: bu kısımlar kullanıcı tarafında da kontrol edilebilirken aynı zamanda VT’de
kontrol edilerek çok kullanıcıdan kaynaklı olası hatalar engellenmesi amaçlanmıştır.
NOT: Analiz ve tasarım aşamalarında belirtilmemiş olsa da uygulamanın kullanıcı giriş modülü ve sistem yöneticisine ait kullanım örneği için geliştirme yapılmayacaktır. Kullanıcı giriş modülü var olan bir yapı kullanılıyor, sistem yöneticisine ait kullanım örneğinde belirtilen ihtiyaçların geliştirilmesi buradaki sürede tamamlanamayacağı için plan dışında tutulmuş, sistem uzmanı tarafından doğrudan vt yönetim araçları ile sağlanması uygun görülmüştür.
VT Oluşturma Script Dosyasını İndir
VT Sabit Tanımlamalar Script Dosyasını İndir
Aşağıda Kullanıcı tarafında yer alan ana yapılar açıklanmaktadır. Söz konusu yapılar javascript ve DOM (Docüment Object Model) etkileşimi ile çalışmakta ve kodlamayı oldukça kısaltarak, esnek, yönetilebilir ve performansa dayalı bir sistem kurulumunu mümkün kılmaktadır.
Form Class: Class olarak tasarlanmış olan bu yapının, çalışma zamanında 3 örneği (Bütçe-işlem-harcama)oluşturulmaktadır. Aşağıda belirtilecek olan list ve menü yapıları ile ilişkide olcaktır.
List Class: Class olarak tasarlanmış olan bu yapının, çalışma zamanında 3 örneği (Bütçe-işlem-harcama)oluşturulmaktadır. her form örneği oluşurken bu form aynı zamanda bir liste örneği oluşturur ve sonraki süreçte form ve liste daima birbirlerine bağlı klaırlar. Form aktive olurken liste de aktive olur, inaktive olurken listede inaktive olur.
Menü Static Class: Static Class olarak tasarlanmış bu yapı çalışma zamanında static olarak çalışır. Form aktive olurken kendisine kaydolur. Bu kaydolma esnasında formun son durum özelliklerini edinir ve disaynı ayarlar. Bu yapının asıl amacı her form için gerekli menü opsiyonları ile etkileişim kurup, gerekli işlev ile bağlantı kurmaktır. (yeni, kaydet, vazgeç, düzenle, listele, yazdır vs.)
Asenkron Istek Yapısı: Kullanıcı ile sunucu arasında gerçekleşecek istek/cevapları yönetmektir. Henüz yeterince sıkılaştırılmamış olan bu yapı ayrıca üzerinde çalışılması gerekmektedir.
Bahsedilen Yapıları içeren javaScript dosyasınıindir
Bütçe Class Aşağıda verilen "ButceKalem", "ButceIslem", "ButceHarcama" class'larına ortak zemin oluşturmaktadır. (Abstract olarak tasarlanmadı/olabilirdi.)
BütçeKalem Class "Butce" class'ında inherit edilen bu class ile gerekli kaydet sil guncelle gibi işlevler yerine getirilmekte, vegerekli dönüş deeğrleri sağlanmaktadır.
BütçeIslem Class "Butce" class'ında inherit edilen bu class ile gerekli kaydet sil guncelle gibi işlevler yerine getirilmekte, vegerekli dönüş deeğrleri sağlanmaktadır.
BütçeHarcama "Butce" class'ında inherit edilen bu class ile gerekli kaydet sil guncelle gibi işlevler yerine getirilmekte, vegerekli dönüş deeğrleri sağlanmaktadır.
Bahsedilen Yapıları içeren C# dosyasınıindir
Diğer Classlar Genel ihtiyaç duuyulan fonksiyonlar içerilmiştir.
Classları içeren C# dosyalarını indir genel fonksiyonlartarih fonksiyonları HTML fonksiyonları
Data Class VT ile bütçe class ları aarsında yer alarak gerekli VT operasyonları yönetilmektedir.
Data classını içeren C# dosyasınıindir
Detaylı kullanıcı klavuzunu indir
NOT: Belgede giriş modülü ve sistem yönetimi ele alınmamıştır. Giriş Modülü bu proje öncesinde hazır olduğundan ve bu proje daha önce yapılmış bulunana modüllerin kapsamına dahil edildiğinden proje kapsamı dışında tutuldu. Sistem yönetimi için sürenin yeterli olmayacağı düşünüldüğünden kapsam dışı tutulmuştur. Sistem yöneticisi gerekl işlem leri VT yönetim araçları ile sağlayabilecektir.
Bu belgede projenin test işlemlerine dair yapılan işlemler açıklamaları ile raporlandırılmıştır. Test takvimi, test edilen modüller ve tarifi ve test sonuçları ele alınmıştır.
Test Takvimi : Proje test takvimi aşağıda verilmiştir:
7-8 Temmuz 2012 | Test Planı |
---|---|
8-10 Temmuz 2012 | Test Uygulamaları ve Verilerinin Toplanması |
10-11 Temmuz 2012 | Test Sonuçlarının Değerlendirilmesi ve Raporlanması |
Test Edilecek Modül Gruplarının (Prosedürünün) Tarifi: Kuruma ayrılan paranın tanımlı bütçe kodlarına göre paylaşımını sağlamak, paylaşım üzerinden işlemleri oluşturmak ve işlemler üzerinden ödemeleri gerçekleştirmek müşteri isterlerinin omurgasını oluşturmaktadır. Bu omurga üzerinden paranın paylaşımı, işlemlere ayrılan para ve bu para üzerinden ödemelerin kaydı sağlanacak ve görüntülenebilecektir.
Tablodaki hücrelerin ilgili kriterlerle aynı hizada olmadan önceki hali
Tablodaki eksikliğin giderilmesinden sonraki hali
Bütçe Tablosundaki veriler:
Seçili olan bütçe kaleminin satın alma işlemi tablosundaki yapılan değişikliğin bütçe tablosunda da aynen yansıdığını görüyoruz.
Satın Alma Tablosundaki veriler:
Harcama tablosundaki seçilen kalemde yapılan değişikliğin satın alma tablosunda da aynı değerler olarak değiştiğini görüyoruz.
Yapılan testlerde bu ve benzeri testler yapılmış olup, hatalar, eksikler giderilmiştir. Kurumda aktif olarak kullanılmaya devam edildiğinden test ve eksiklerin görülmesi aktif olarak kullanıcılar tarafından yapılmakta olup, test aşaması bir nevi halen devam etmektedir.