Başlığı Yazdır
Otel / Pansiyon Takip Sistemi
KREKLAM
Merhaba arkadaşlar... HEr ne kadar bir üyemiz veya genel ve görünüş olarak FUSION bitti gibi yorumlar ve görüşler öne atılsada... Yine benim tercihim PHP-FUSION v7 oldu ve bakın neler yapılabiliyor...
www.elli7.net/images/fusiontr/oteltakip1.jpg
www.elli7.net/images/fusiontr/oteltakip2.jpg

Gelelim Bazı soruların cevaplarına!
* Bu tarz takip, muhasebe vs. programlar mutlaka Delphi, C++, C# vea Visual Studio olmalı mı?
- Kesinlikle ben buna katılmıyorum. Eğer bir programın birden fazla ve uzak kullanıcısı olacaksa mutlaka bir server varolmalı. Ha SQL server Ha MySSQL server ne farkediyor. Sunucu makinada kesinlikle ve kesinlikle bir server durumu var...

* Masaüstü programların bir çoğu mobil destekli mi?
- Elbette değil, çünkü mobil için Android, iOs vs. mutlaka başka bir uygulama yapılmak zorunda ama PHP de değil, web mimarisi üzerinde çalışacağından responsive be bootstrap framework ile bu sorun ortadan kalkar...

* Ya yedekleme nolcak yedekleme?
- Arkadaşlar gelin etmeyin... Kullanıcının manuel yedek alması veya D sürücüsüne yedekleme oromatik veya manuel ( Virüs sızan bir makina için ) çokta önemli değil.. Sunucunuzdan yedekleme diski isteyin +10 TL'ye sağlıyorlar. veya Vronjob diye bir olay var.. MySQL yedeklense yeterli oluyor. Alan sıkıntımız yok...

* İyi de kardeşim web serverlar ne kadar güvenli?
- Senin kullandığın windows serverdan 10 kat daha güvenli olacağı kesin

* Daha mı pahalı ?
- Elbette hayır.. İşyerinize fiziklel bir sunucu kurduğunuzu varsayalım. Bu işi ADSL ile yapmak ( 1 Mbps Upload) ile ne kadar mantıklı bilemiyorum. Ama metro hat çektirseniz aylık 1000 TL, En kötü DELL sunucu 3500 TL, E bunun elektriği, soğutması kabineti bakımı bilmem nesi var. Buna extra personel gerek...

Sizi Tüm derlerinizden kurtaracak yazılım mimarisi eninde sonunda web mimarisi üzerine kurulacak... Tüm projeler hatta büyük projeler webe taşınmaya başlamış ve kurumsal olanlarla artık edevlet entegresi, ebeyanneme gibi taşınıyor. Kaldı ki eticaret uygulamalarını düşünün?

* Açık kaynak kod, herkes üzerinde oynar?
- Haklısınız sunucumda tüm yazılımlar çık kaynak kod. Bir tane şifrelenmiş dosya yok.. Koyma kardeşim başkasının sunucusunaGrin Sunucunda başka kullanıcılara da host falan satma..


Nihayetinde emniyet dahi kimlik bildirim sistemini JAVA tabanlı AKBS'den almış ve tamamen online sisteme geçmiştir...

İLerleme katettikçe paylaşımlara devam edeceğim.. Modüler sistem sayesinde yetkilendirme yapılabilecek...
ÇIRAK USTAYI SOLLAMAZSA SANAT ÖLÜR
HATALI SOLLARSA ÇIRAK ÖLÜR
http://www.krekla...
http://www.elli7.net
 
Google Adsence
25/09/2017 05:29


Reklam Botu

Mesaj: n^x
Katılım: Asla

IP: Yok  
KREKLAM
Evet, Sistemden biraz daha bahsedelim ve kodlamaya geçelim..

ODALAR Tablosu :
Kaynağı İndir  Kod

CREATE TABLE IF NOT EXISTS `ots_odalar` (
  `oid` int(10) NOT NULL AUTO_INCREMENT,
  `odano` varchar(50) COLLATE utf8_turkish_ci NOT NULL,
  `obaslik` varchar(200) COLLATE utf8_turkish_ci NOT NULL,
  `ocift` varchar(10) COLLATE utf8_turkish_ci NOT NULL,
  `otek` varchar(10) COLLATE utf8_turkish_ci NOT NULL,
  `ofiyat` decimal(5,2) NOT NULL DEFAULT '0.00',
  `ocheckin` int(10) NOT NULL,
  `ocheckout` int(10) NOT NULL,
  `otemizlik` varchar(10) COLLATE utf8_turkish_ci NOT NULL,
  `odurum` varchar(10) COLLATE utf8_turkish_ci NOT NULL,
  `odetay` text COLLATE utf8_turkish_ci NOT NULL,
  `okat` varchar(10) COLLATE utf8_turkish_ci NOT NULL,
  PRIMARY KEY (`oid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci AUTO_INCREMENT=5 ;





bu tabloyu inceleyecek olursak, oda numarası, oda ismi, tek kişilik yatak sayısı, çift kişilik yatak sayısı, oda fiyatı, giriş ve çıkış tarihleri, oda durumu (dolu veya boş) oda temizlik durumu (temiz veya kirli) oda detayları ve odanın katı gibi bilgileri tutuyoruz.

Ayrıca birde müşteri tablomuz olacak, bu tablomuzda müşteri TC/Pasaportno, adsı soyadı, telefon numarası, kalacağı oda, giriş ve çıkış tarihleri, ödeme yöntemi ( nakit, visa, çek vs) gibi bilgiler tutulacak... Aynı zamanda giriş ve çıkış tarihleri ilgili odanın kaydına işlenirken, aynı bilgiler müşteri kimliği ile loglama yapılmak üzere farklı bir tabloda tutulacak. Raporlama yapabilmek için bu gerekli...

Peki kayıt aşamaları program kullanıcısının hatasını minimize etmek için nasıl işlemeli...
www.elli7.net/images/fusiontr/ots001.jpg

Yukarıda görüldüğü gibi ODA seçilmeden, giriş tarihi, çıkış tarihi ve KAYDET düğmesi çalışmıyor. Bu kısıylamayı JQUERY ile yapıyoruz.

ODA SEÇİLDİĞİ zaman checkin(giriş) tarih alanı aktif ediliyor. Tarih alanına ajax kontrolü ekliyoruz ve change olayında;
* Eğer datetimepicker'dan seçilen tarih bugünden önceki bir gün ise ajax ile kontrol yapılıp JSON olarak hata döndürüyoruz.
* Eğer eğer seçilen tarih çıkış tarihi ile bugünkü tarih aralığındaysa yine hata döndürüyoruz. Odamız müsait değil!
* Diğer durumlarda ise ONAY adında JSON değişkeninden gelen değer 1 ise, checkout tarihini aktif ediyoruz. tüm bu işlemleri jquery ajax metoduyla gerçekleştiriyoruz. İşte kod örneğimiz.
Kaynağı İndir  Kod

   $("#mcheckin").change(function(){
      var giris=$("#mcheckin").val();
      var odaid=$("#moda option:selected").val();
      
      $.ajax({
         type: "POST",
         dataType: "json",
         url: "fonksiyonlar.php",
         data: {"gtarih":giris,"odano":odaid},
         success: function(data) {
            $("#girishata").html(data.girishata);
            if(data.onay==1){
               $("#mcheckout").attr("disabled",false);
            }else{
               $("#mcheckout").attr("disabled",true);
            }
         }
      });
      return false;
   });





ve görsel karşılığı..
www.elli7.net/images/fusiontr/ots002.jpg

Evet eğer şartlar uyum sağlıyorsa, checkout yani çıkış tarihi alanı aktif olacak. Eğer çıkış tarihi yine giriş tarihinden önceki bir gün ise hata dönüyor, değilse kaydet düğmesi aktif oluyor.
www.elli7.net/images/fusiontr/ots003.jpg

son olarak tüm şartlar sağlandıysa KAYDET düğmesi aktif oluyor...
www.elli7.net/images/fusiontr/ots004.jpg

Evet, şu anda tabloda göremediğiniz farklı alanlar var, ödeme yöntemi gibi. Bunlar elbette ücretli kısımlar ve paylaşmayacağım.

Peki kaydet düğmesine basıldığında hangi işlemler yapılacak...
* Öncelikle oda durumu onaylıysa ve temizlik onayı varsa müşteri kaydına izin verilecek. Oda temiz değilse veya bugün çıkacak olan müşterinin çıkışı yapılmadıysa yine izin yok... Hatalı kayıt kabul etmiyoruz.

* Tüm şartlar sağlandığında ise, odaid numarasına göre gerekli düzenlemeler yapılacak. Ayrıca log ltabloumuzda bu hareket raporlanmak üzere işlenecek...

* İşin içinde ödeme olduğu içinde kasa tablomuza ödeme bilgilerini de kaydediyoruz. Kullanıcı personel akşam patrona günsonu verebilecek...

Kodlama ilerledikçe paylaşımlara devam edeceğim..
ÇIRAK USTAYI SOLLAMAZSA SANAT ÖLÜR
HATALI SOLLARSA ÇIRAK ÖLÜR
http://www.krekla...
http://www.elli7.net
 
hsarica
Paylaşacak mısınız? Yoksa ücretli bir uygulamamı olacak?
 
KREKLAM
Ücretli olacak, ama geliştirmek veya böyle uygulamalar yazmak isteyenler için kaynak kodlarını bir çoğunu paylaşıyorum.
ÇIRAK USTAYI SOLLAMAZSA SANAT ÖLÜR
HATALI SOLLARSA ÇIRAK ÖLÜR
http://www.krekla...
http://www.elli7.net
 
hsarica
Fiyat?
 
KREKLAM
Proje tamamlandığında belirlenecek
ÇIRAK USTAYI SOLLAMAZSA SANAT ÖLÜR
HATALI SOLLARSA ÇIRAK ÖLÜR
http://www.krekla...
http://www.elli7.net
 
KREKLAM
Müşteri kayıt esnasından kayıt işleminde aynı müşteriyi birden fazla eklemeyi engellemek için T.C. Kimlik numarasını kullanıyoruz. Peki müşteri yabancıysa ne olacak. Bu kez de Pasaport numarasını kullanmaktayız.

Tablo alanımızda TC alanı bir tane fakat iki farklı veri girilme ihtimali var.
TC Kimlik Numaraları 11 hane Pasaport numaraları ise 7 hane bu durumda ne yapmamız gerekiyor.

Öncelikle form içerisinde iki adet radio input elementimiz olmalı.
Kaynağı İndir  Kod

<div class='col-md-6 col-sm-6 col-xs-12'>
   <input type='radio' name='ktur' value='TC' checked> Kimlik Numarası
   <input type='radio' name='ktur' value='PAS'> Pasaport Numarası<br>
   <input type='text' id='mtckayit' name='mtc' required='required' class='form-control col-md-7 col-xs-12' data-inputmask=\"'mask' : '99999999999'\" style='display:block'>
   <input type='text' id='mpasno' name='mtc' required='required' class='form-control col-md-7 col-xs-12' style='display:none'>
   <div id='tchata'></div>
</div>





Kimlik Numaramızı seçtirecek olan radio ön tanımlı olarak seçili durumda. Öyleyse müşteri tc numarasını temsil eden input alanı aktif, pasaport numarasını temsil eden input alanı ise gizli olmalı...

Şimdi seçili olan radio input değerine göre jquery kullanarak eğer TC seçiliyse, TC input alanınız gösterip, pasaport input alanını gizlemeliyiz. Değilse işlemin tam tersini yapacağız.

Kaynağı İndir  Kod

   $('#mekleform input').on('change', function() {
     var tip = $('input[name=ktur]:checked', '#mekleform').val();
     if(tip=="TC"){
      $("#mtckayit").show();
      $("#mpasno").hide();
     }else{
      $("#mtckayit").hide();
      $("#mpasno").show();       
     }
   });




Buraya kadar tamam. Peki bu giriş alanlarından girilen kimlik/pasaport numarası bilgileri daha önce tabloya kayıt edilmiş mi? Bunu kontrol edeceğiz. Eğer daha önce bu bilgilerle kayıt yapılmışsa KAYDET düğmemiz aktif olacak ve form submit edilebilecek, Eğer bu bilgiler daha önce girildiyse KAYDET düğmemiz pasif olacak ve tıklama ile formu submit edemeyeceğiz. Ayrıca hata mesajı göstereceğiz.
Kaynağı İndir  Kod

   $("#mkaydet").attr("disabled",true);
   $("#mtckayit").blur(function(){
      var tc = $("#mtckayit").val();
      $.ajax({
         type: "POST",
         dataType: "json",
         url: "fonksiyonlar.php",
         data: {"mtc":tc},
         success: function(kayitcevap) {
            if(kayitcevap.sonuc=="ok"){
               $("#mkaydet").attr("disabled",false);
               $("#tchata").html(kayitcevap.mesaj);
            }else{
               $("#mkaydet").attr("disabled",true);
               $("#tchata").html(kayitcevap.mesaj);
            }
         }
      });
      return false;      
   });

   $("#mpasno").blur(function(){
      var tc = $("#mpasno").val();
      $.ajax({
         type: "POST",
         dataType: "json",
         url: "fonksiyonlar.php",
         data: {"mtc":tc},
         success: function(kayitcevap) {
            if(kayitcevap.sonuc=="ok"){
               $("#mkaydet").attr("disabled",false);
               $("#tchata").html(kayitcevap.mesaj);
            }else{
               $("#mkaydet").attr("disabled",true);
               $("#tchata").html(kayitcevap.mesaj);
            }
         }
      });
      return false;      
   });
   





Ajax çağrısına cevap veren php kodlarımız ise aşağıdaki gibi olacaktır...
Kaynağı İndir  Kod

   if(isset($_POST["mtc"]) && isnum($_POST["mtc"])){
      
      $result=dbquery("SELECT * FROM ".DB_MUSTERILER." WHERE mtc='".$_POST["mtc"]."' ");
      if(dbrows($result)!=0){
         $data=dbarray($result);
         $sonuclar["sonuc"]="ok";
         $sonuclar["mesaj"]=$data["madsoyad"]." adli müşteriyi ".showdate("longdate",$data["mkayittarihi"])." tarihinde kaydetmiştiniz.";
      }else{
         $sonuclar["sonuc"]="ok";
         $sonuclar["mesaj"]=$_POST["mtc"]." T.C. Kimlik Numarasına kayıtlı müşteri yok.";
      }
      
      echo json_encode($sonuclar);
   }





Böylelikle programı kullanan kullanıcının hatalı işlem yapmasını engellemiş olacağız. Yani kullanıcı alanları doldurmadan zaten KAYDET düğmesine basamayacak çünkü pasif durumda. Kimlik Numarası alanı maskeli ve 11 hane zorunluluğu ve sadece rakam zorunluluğuna sahip olacağından hatalı giriş yapamayacak. Ayrıca Pasaport Numarası alanında bu zorunluluk olmadığından U ile başlayan ve 6 haneli numaraya giriş izni verilecek. Bu şartlar sağlanmadığı sürece Jquery bu işlemlere izin vermiyor...

Ve görsel Sonuç..
www.elli7.net/images/fusiontr/ots-mkayit1.jpg
www.elli7.net/images/fusiontr/ots-mkayit2.jpg

Ve önemli not.... DİK DURUN....
Burada işlemlere kullanıcı açısından baktığımızda, "La nolcak müşterinin alt tarafı 4 tane bilgisini saklayacağız. Basit bir program yap sen bana uygun fiyatlı olsun" demek yetmiyor. İşte bu kadar kod sadece TC Kimlik veya Pasaport giriş alanının tespiti ve verinin doğru girilmesi için gereken işlemler... Daha bunun diğer alanların doğrulanması, kaydedilmesi, düzenlemensi, silinmesi ve bu işlemi yapan kullanıcın log kayıtlarının işlenmesi gibi işlemleri de mevcut... ;) :):):)
ÇIRAK USTAYI SOLLAMAZSA SANAT ÖLÜR
HATALI SOLLARSA ÇIRAK ÖLÜR
http://www.krekla...
http://www.elli7.net
 
KREKLAM
Eveet Şimdi gelelim CHECKIN ( Müşteriyi Odaya Yerleştirme işlemi )

www.elli7.net/images/fusiontr/checkin1.jpg

Checkin işleminde kullanıcı hatasını minimize etmek veya sıfıra indirmek için bazı katı kurallarımız olmalı. Yukarıdaki görselde görüldüğü üzere ilk başta müşteri listemiz var. Müşteri listemiz müşteriler tablomuzdan çekiliyor. Tablomuzda musteridurum adında bir alan var. CHECKIN işlemi gerçekleştiğinde bu alanın değeri 1 yapılıyor. Böylece müşterinin o anda konaklayıp konaklamadığını anlayabiliyoruz.

Öyleyse listemiz hazırlanırken WHERE mdurum=0 şartı koşarak, sadece konaklamayan müşterilerin listesini hazırlamalıyız. Aksi durumda yanlışlıkla aynı müşteriyi tekrar odaya alabilme ihtimalimiz var.

Konaklama tablomuzu şu şekilde hazırlıyoruz.
Kaynağı İndir  Kod

//DB_KONAKLAMA kid, ktcpas, kadsoyad, ktelefon, kodano, kcheckin, kcheckout, kfiyat, koyontem, kdurum, kmusid





tc,adsoyad, telefon, odano, giris tarihi, çıkış tarihi, fiyat, ödeme yöntemi, müşteri no ve durum

Müşteri listesinden herhangi bir isim seçildiğinde jquery ajax metdu devreye girecek ve müşteri id sine göre o müşterinin hangi bilgileri konaklama tablosunda tutulacaksa ilgili input alanlarına yerleştirilir. Otomatik gelen bilgiler olacağından input alanları düzenlemez olmalıdır. O nedenle disabled özelleliğini aktif ediyoruz.

Bu işlemi yapacak ajax ve php kodları aşağıdaki gibi olacaktır.
Kaynağı İndir  Kod

   $("#kmusid").change(function(){
      var mid=$("#kmusid option:selected").val();
      $.ajax({
         type: "POST",
         dataType: "json",
         url: "fonksiyonlar.php",
         data: {"musid": mid },
         success: function(cevaplar) {
            $("#ktelefon").val(cevaplar.telefon);
                                .... diğer alanların işlenmesi.......
         }
      });      
      return false;
   });





PHP
Kaynağı İndir  Kod

   if(isset($_POST["musid"])){
      $mid=$_POST["musid"];
      //DB_MUSTERILER mid, mtc, madsoyad, mtelefon, mdurum, mkayittarihi, mkimlikturu
      $result2=dbquery("SELECT * FROM ".DB_MUSTERILER." WHERE mid='".$mid."' ");
      $data2=dbarray($result2);
      $mbilgiler["telefon"] = $data2["mtelefon"];
      ...diğer lanların işlenmesi.....
      echo json_encode($mbilgiler);
   }





Bir sonraki aşamamız ise oda seçimi olacaktır. Odalarımız birden fazla kişinin konaklamasına müsait bunun için odaya bir konaklama limiti koymuyoruz. Çünkü ilave yatak eklenebilir... Fakaaat, doğru kişiyi doğru odaya yerleştirdiğimizi de önizlememiz bize oldukça kolaylık sağlayacaktır. Bunun için oda seçildiğinde yeni bir ajax metodu çalışacak ve o anda o odada konaklayanları açıklama olarak hemen altına getirecektir. Böylece bir çocuğu ve bir kişinin eşini yanlış odaya ekleme şansını ortadan kaldıracağız.

Ayrıca oda seçim işlemindeki ajax metodu oda fiyatını da ilgili alana getirecek ve bu alan düzenlemez şekilde pasif olacaktır.

Şimdi karşımıza bir HANDİKAP çıktı. her kişi için ayrı ayrı fiyat gelecek! peki bunu nasıl çözeceğiz. Raporlama esnasından odaya gör işlem yapılacağından, oda numarasına göre hesaplama ve raporlama yapacağız.... Bu şekilde de hatalı işlemi o aşamaya geldiğimde anlatacağım...
ÇIRAK USTAYI SOLLAMAZSA SANAT ÖLÜR
HATALI SOLLARSA ÇIRAK ÖLÜR
http://www.krekla...
http://www.elli7.net
 
KREKLAM
Bu arada, php-fusion seoda kötü diyenler için ufak bir not düşmek istedim. Konuyu daha yeni açtık ve yaz sezonunda otel ve pansiyonları bu kadar aktif reklam verdiği dönemde işte konu başlığımızın başarısı...

www.elli7.net/images/fusiontr/fusionseo111.jpg
ÇIRAK USTAYI SOLLAMAZSA SANAT ÖLÜR
HATALI SOLLARSA ÇIRAK ÖLÜR
http://www.krekla...
http://www.elli7.net
 
KREKLAM
Pratik bir kaç bilgi daha eklersek, giriş ve çıkış tarihlerinde bazı kısıtlamalar olmak zorunda...
* Giriş tarihi bugünden eski bir tarih seçilemez
* Çıkış tarihi giriş tarihinden eski bir tarih olamaz
* Çıkış tarihi 30 günden fazla olamaz ( 1 aydan fazla konaklayacaklar için kira sözleşmesi yapılmalı. Hergün aynı adam için kimlik bildirimi yapılmamalı)
* Kayıt öncesindeki kontrolllerde giriş tarihi çıkış tarihinden daha yeni olamaz.

bunun için input type=''date'' kullanırsak. Nesnenin min özelliğini kullanarak bu işlemi kolayca yapabiliriz.

Kaynağı İndir  Kod
<input type='date' id='kcheckin' name='kcheckin' min='".date('Y')."-".date('m')."-".date('d')."' class='form-control'>




Örnek :
www.elli7.net/images/fusiontr/ots-005.jpg
ÇIRAK USTAYI SOLLAMAZSA SANAT ÖLÜR
HATALI SOLLARSA ÇIRAK ÖLÜR
http://www.krekla...
http://www.elli7.net
 
Atlanılacak Forum: