JustPaste.it

PersonelKayit

var
  PersonelKayit: Tclform;
  PersonelScroll: TCLVertScrollBox;
  DBConnection: TCLSQLiteConnection;
  PersonelQuery: TCLSQLiteQuery;
 
  // Paneller
  pnlPersUst, pnlPersOrta, pnlPersAlt, pnlPersButton, pnlPersListe: TclProPanel;
  
  // Üst Panel Bileşenleri
  lblAd, lblSoyad, lblTCKN, lblDogumTarihi, lblTelefon, lblEposta: TClProLabel;
  txtAd, txtSoyad, txtTCKN, txtDogumTarihi, txtTelefon, txtEposta: TclProEdit;
  
  // Orta Panel Bileşenleri
  lblAdres: TClProLabel;
  txtAdres: TCLMemo;
  lblPozisyon, lblMaas, lblAktif: TClProLabel;
  cmbPozisyon: TClProComboBox;
  txtMaas: TclProEdit;
  chkAktif: TClProCheckBox;
  
  // Button Panel
  btnTemizle, btnKaydet, btnGuncelle, btnSil: TClProButton;
  
  // Liste Panel
  lblPersonelListesi: TClProLabel;
  ListViewPersonel: TClProListView;
  btnListeyiYenile: TClProButton;
 
{
  // Form Oluşturma
  PersonelKayit = Tclform.Create(self);
  PersonelKayit.SetFormColor('#83a09f', '', clGNone);
  PersonelKayit.Caption = 'Personel Kayıt Formu';
  PersonelKayit.Width = 800;
  PersonelKayit.Height = 700;
  
  // Veritabanı Bağlantısı
  DBConnection = PersonelKayit.AddNewSQLiteConnection(PersonelKayit, 'DBConnection');
  DBConnection.DatabaseName = 'PersonelDB.db';
  
  // SQL Sorgusu
  PersonelQuery = PersonelKayit.AddNewSQLiteQuery(DBConnection, 'PersonelQuery');
  PersonelQuery.SQL.Text = 'CREATE TABLE IF NOT EXISTS Personel (' +
                           'PersonelID INTEGER PRIMARY KEY AUTOINCREMENT, ' +
                           'Ad TEXT, Soyad TEXT, TCKN TEXT, DogumTarihi TEXT, ' +
                           'Telefon TEXT, Eposta TEXT, Adres TEXT, ' +
                           'PozisyonID INTEGER, Maas REAL, Aktifmi INTEGER)';
  PersonelQuery.ExecSQL;
  
  // Scroll Box
  PersonelScroll = PersonelKayit.AddNewVertScrollBox(PersonelKayit, 'PersonelScroll');
  PersonelScroll.Align = alClient;
  
  //////////////////////////////////////////////////////////////////
  // ÜST PANEL - Temel Bilgiler
  pnlPersUst = PersonelKayit.AddNewProPanel(PersonelScroll, 'pnlPersUst');
  pnlPersUst.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#2E3B4E');
  pnlPersUst.SetclProSettings(pnlPersUst.clProSettings);
  pnlPersUst.Align = alTop;
  pnlPersUst.Height = 200;
  
  // Ad
  lblAd = PersonelKayit.AddNewProLabel(pnlPersUst, 'lblAd', 'Ad');
  lblAd.clProSettings.FontColor = clAlphaColor.clWhite;
  lblAd.clProSettings.FontSize = 12;
  lblAd.clProSettings.TextSettings.Font.Style = [fsBold];
  lblAd.Height = 25;
  lblAd.Align = alTop;
  
  txtAd = PersonelKayit.AddNewProEdit(pnlPersUst, 'txtAd', '');
  txtAd.Height = 30;
  txtAd.Align = alTop;
  
  // Soyad
  lblSoyad = PersonelKayit.AddNewProLabel(pnlPersUst, 'lblSoyad', 'Soyad');
  lblSoyad.clProSettings.FontColor = clAlphaColor.clWhite;
  lblSoyad.clProSettings.FontSize = 12;
  lblSoyad.clProSettings.TextSettings.Font.Style = [fsBold];
  lblSoyad.Height = 25;
  lblSoyad.Align = alTop;
  
  txtSoyad = PersonelKayit.AddNewProEdit(pnlPersUst, 'txtSoyad', '');
  txtSoyad.Height = 30;
  txtSoyad.Align = alTop;
  
  // TCKN
  lblTCKN = PersonelKayit.AddNewProLabel(pnlPersUst, 'lblTCKN', 'TC Kimlik No');
  lblTCKN.clProSettings.FontColor = clAlphaColor.clWhite;
  lblTCKN.clProSettings.FontSize = 12;
  lblTCKN.clProSettings.TextSettings.Font.Style = [fsBold];
  lblTCKN.Height = 25;
  lblTCKN.Align = alTop;
  
  txtTCKN = PersonelKayit.AddNewProEdit(pnlPersUst, 'txtTCKN', '');
  txtTCKN.Height = 30;
  txtTCKN.Align = alTop;
  
  //////////////////////////////////////////////////////////////////
  // ORTA PANEL - İletişim Bilgileri
  pnlPersOrta = PersonelKayit.AddNewProPanel(PersonelScroll, 'pnlPersOrta');
  pnlPersOrta.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#2E3B4E');
  pnlPersOrta.SetclProSettings(pnlPersOrta.clProSettings);
  pnlPersOrta.Align = alTop;
  pnlPersOrta.Height = 180;
  
  // Doğum Tarihi
  lblDogumTarihi = PersonelKayit.AddNewProLabel(pnlPersOrta, 'lblDogumTarihi', 'Doğum Tarihi');
  lblDogumTarihi.clProSettings.FontColor = clAlphaColor.clWhite;
  lblDogumTarihi.clProSettings.FontSize = 12;
  lblDogumTarihi.clProSettings.TextSettings.Font.Style = [fsBold];
  lblDogumTarihi.Height = 25;
  lblDogumTarihi.Align = alTop;
  
  txtDogumTarihi = PersonelKayit.AddNewProEdit(pnlPersOrta, 'txtDogumTarihi', 'GG/AA/YYYY');
  txtDogumTarihi.Height = 30;
  txtDogumTarihi.Align = alTop;
  
  // Telefon
  lblTelefon = PersonelKayit.AddNewProLabel(pnlPersOrta, 'lblTelefon', 'Telefon');
  lblTelefon.clProSettings.FontColor = clAlphaColor.clWhite;
  lblTelefon.clProSettings.FontSize = 12;
  lblTelefon.clProSettings.TextSettings.Font.Style = [fsBold];
  lblTelefon.Height = 25;
  lblTelefon.Align = alTop;
  
  txtTelefon = PersonelKayit.AddNewProEdit(pnlPersOrta, 'txtTelefon', '');
  txtTelefon.Height = 30;
  txtTelefon.Align = alTop;
  
  // E-posta
  lblEposta = PersonelKayit.AddNewProLabel(pnlPersOrta, 'lblEposta', 'E-posta');
  lblEposta.clProSettings.FontColor = clAlphaColor.clWhite;
  lblEposta.clProSettings.FontSize = 12;
  lblEposta.clProSettings.TextSettings.Font.Style = [fsBold];
  lblEposta.Height = 25;
  lblEposta.Align = alTop;
  
  txtEposta = PersonelKayit.AddNewProEdit(pnlPersOrta, 'txtEposta', '');
  txtEposta.Height = 30;
  txtEposta.Align = alTop;
  
  //////////////////////////////////////////////////////////////////
  // ALT PANEL - İş Bilgileri
  pnlPersAlt = PersonelKayit.AddNewProPanel(PersonelScroll, 'pnlPersAlt');
  pnlPersAlt.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#2E3B4E');
  pnlPersAlt.SetclProSettings(pnlPersAlt.clProSettings);
  pnlPersAlt.Align = alTop;
  pnlPersAlt.Height = 250;
  
  // Adres
  lblAdres = PersonelKayit.AddNewProLabel(pnlPersAlt, 'lblAdres', 'Adres');
  lblAdres.clProSettings.FontColor = clAlphaColor.clWhite;
  lblAdres.clProSettings.FontSize = 12;
  lblAdres.clProSettings.TextSettings.Font.Style = [fsBold];
  lblAdres.Height = 25;
  lblAdres.Align = alTop;
  
  txtAdres = PersonelKayit.AddNewMemo(pnlPersAlt, 'txtAdres', '');
  txtAdres.Height = 80;
  txtAdres.Align = alTop;
  
  // Pozisyon
  lblPozisyon = PersonelKayit.AddNewProLabel(pnlPersAlt, 'lblPozisyon', 'Pozisyon');
  lblPozisyon.clProSettings.FontColor = clAlphaColor.clWhite;
  lblPozisyon.clProSettings.FontSize = 12;
  lblPozisyon.clProSettings.TextSettings.Font.Style = [fsBold];
  lblPozisyon.Height = 25;
  lblPozisyon.Align = alTop;
  
  cmbPozisyon = PersonelKayit.AddNewProComboBox(pnlPersAlt, 'cmbPozisyon');
  cmbPozisyon.Items.Add('Yönetici');
  cmbPozisyon.Items.Add('Muhasebe');
  cmbPozisyon.Items.Add('Satış');
  cmbPozisyon.Items.Add('Destek');
  cmbPozisyon.Height = 30;
  cmbPozisyon.Align = alTop;
  
  // Maaş
  lblMaas = PersonelKayit.AddNewProLabel(pnlPersAlt, 'lblMaas', 'Maaş');
  lblMaas.clProSettings.FontColor = clAlphaColor.clWhite;
  lblMaas.clProSettings.FontSize = 12;
  lblMaas.clProSettings.TextSettings.Font.Style = [fsBold];
  lblMaas.Height = 25;
  lblMaas.Align = alTop;
  
  txtMaas = PersonelKayit.AddNewProEdit(pnlPersAlt, 'txtMaas', '');
  txtMaas.Height = 30;
  txtMaas.Align = alTop;
  
  // Aktif mi?
  lblAktif = PersonelKayit.AddNewProLabel(pnlPersAlt, 'lblAktif', 'Aktif Çalışan');
  lblAktif.clProSettings.FontColor = clAlphaColor.clWhite;
  lblAktif.clProSettings.FontSize = 12;
  lblAktif.clProSettings.TextSettings.Font.Style = [fsBold];
  lblAktif.Height = 25;
  lblAktif.Align = alTop;
  
  chkAktif = PersonelKayit.AddNewProCheckBox(pnlPersAlt, 'chkAktif', '');
  chkAktif.Checked = True;
  chkAktif.Align = alTop;
  chkAktif.Height = 30;
  
  //////////////////////////////////////////////////////////////////
  // BUTON PANELİ
  pnlPersButton = PersonelKayit.AddNewProPanel(PersonelScroll, 'pnlPersButton');
  pnlPersButton.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#2E3B4E');
  pnlPersButton.SetclProSettings(pnlPersButton.clProSettings);
  pnlPersButton.Align = alTop;
  pnlPersButton.Height = 60;
  
  // Temizle Butonu
  btnTemizle = PersonelKayit.AddNewProButton(pnlPersButton, 'btnTemizle', 'Temizle');
  btnTemizle.Align = alLeft;
  btnTemizle.Width = pnlPersButton.Width / 4;
  btnTemizle.OnClick = @TemizleClick;
  
  // Kaydet Butonu
  btnKaydet = PersonelKayit.AddNewProButton(pnlPersButton, 'btnKaydet', 'Kaydet');
  btnKaydet.Align = alLeft;
  btnKaydet.Width = pnlPersButton.Width / 4;
  btnKaydet.OnClick = @KaydetClick;
  
  // Güncelle Butonu
  btnGuncelle = PersonelKayit.AddNewProButton(pnlPersButton, 'btnGuncelle', 'Güncelle');
  btnGuncelle.Align = alLeft;
  btnGuncelle.Width = pnlPersButton.Width / 4;
  btnGuncelle.OnClick = @GuncelleClick;
  
  // Sil Butonu
  btnSil = PersonelKayit.AddNewProButton(pnlPersButton, 'btnSil', 'Sil');
  btnSil.Align = alLeft;
  btnSil.Width = pnlPersButton.Width / 4;
  btnSil.OnClick = @SilClick;
  
  //////////////////////////////////////////////////////////////////
  // LİSTE PANELİ
  pnlPersListe = PersonelKayit.AddNewProPanel(PersonelScroll, 'pnlPersListe');
  pnlPersListe.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#2E3B4E');
  pnlPersListe.SetclProSettings(pnlPersListe.clProSettings);
  pnlPersListe.Align = alClient;
  pnlPersListe.Height = 300;
  
  // Liste Başlığı
  lblPersonelListesi = PersonelKayit.AddNewProLabel(pnlPersListe, 'lblPersonelListesi', 'Personel Listesi');
  lblPersonelListesi.clProSettings.FontColor = clAlphaColor.clWhite;
  lblPersonelListesi.clProSettings.FontSize = 14;
  lblPersonelListesi.clProSettings.TextSettings.Font.Style = [fsBold];
  lblPersonelListesi.Align = alTop;
  lblPersonelListesi.Height = 30;
  
  // Yenile Butonu
  btnListeyiYenile = PersonelKayit.AddNewProButton(pnlPersListe, 'btnListeyiYenile', 'Listeyi Yenile');
  btnListeyiYenile.Align = alTop;
  btnListeyiYenile.Height = 30;
  btnListeyiYenile.OnClick = @ListeyiYenileClick;
  
  // Personel Listesi
  ListViewPersonel = PersonelKayit.AddNewProListView(pnlPersListe, 'ListViewPersonel');
  ListViewPersonel.Align = alClient;
  ListViewPersonel.clProSettings.ViewType = lvList;
  ListViewPersonel.clProSettings.ColCount = 1;
  ListViewPersonel.clProSettings.ItemHeight = 80;
  ListViewPersonel.clProSettings.ItemSpace = 5;
  ListViewPersonel.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#FFFFFF');
  ListViewPersonel.OnItemClick = @ListeElemanSecildi;
  
  // Formu Çalıştır
  PersonelKayit.Run;
  
  // Verileri Yükle
  ListeyiYenileClick(nil);
}
 
// Temizle Butonu İşlevi
procedure TemizleClick(Sender: TObject);
begin
  txtAd.Text := '';
  txtSoyad.Text := '';
  txtTCKN.Text := '';
  txtDogumTarihi.Text := 'GG/AA/YYYY';
  txtTelefon.Text := '';
  txtEposta.Text := '';
  txtAdres.Text := '';
  cmbPozisyon.ItemIndex := -1;
  txtMaas.Text := '';
  chkAktif.Checked := True;
end;
 
// Kaydet Butonu İşlevi
procedure KaydetClick(Sender: TObject);
begin
  PersonelQuery.SQL.Text := 'INSERT INTO Personel (Ad, Soyad, TCKN, DogumTarihi, ' +
                           'Telefon, Eposta, Adres, PozisyonID, Maas, Aktifmi) ' +
                           'VALUES (:Ad, :Soyad, :TCKN, :DogumTarihi, :Telefon, ' +
                           ':Eposta, :Adres, :PozisyonID, :Maas, :Aktifmi)';
  
  PersonelQuery.ParamByName('Ad').AsString := txtAd.Text;
  PersonelQuery.ParamByName('Soyad').AsString := txtSoyad.Text;
  PersonelQuery.ParamByName('TCKN').AsString := txtTCKN.Text;
  PersonelQuery.ParamByName('DogumTarihi').AsString := txtDogumTarihi.Text;
  PersonelQuery.ParamByName('Telefon').AsString := txtTelefon.Text;
  PersonelQuery.ParamByName('Eposta').AsString := txtEposta.Text;
  PersonelQuery.ParamByName('Adres').AsString := txtAdres.Text;
  PersonelQuery.ParamByName('PozisyonID').AsInteger := cmbPozisyon.ItemIndex + 1;
  PersonelQuery.ParamByName('Maas').AsFloat := StrToFloatDef(txtMaas.Text, 0);
  PersonelQuery.ParamByName('Aktifmi').AsInteger := Integer(chkAktif.Checked);
  
  try
    PersonelQuery.ExecSQL;
    ShowMessage('Personel başarıyla kaydedildi.');
    ListeyiYenileClick(nil);
    TemizleClick(nil);
  except
    on E: Exception do
      ShowMessage('Hata: ' + E.Message);
  end;
end;
 
// Güncelle Butonu İşlevi
procedure GuncelleClick(Sender: TObject);
var
  SelectedID: Integer;
begin
  if ListViewPersonel.Selected = nil then
  begin
    ShowMessage('Lütfen güncellenecek personeli seçin.');
    Exit;
  end;
  
  SelectedID := Integer(ListViewPersonel.Selected.Data);
  
  PersonelQuery.SQL.Text := 'UPDATE Personel SET ' +
                           'Ad = :Ad, Soyad = :Soyad, TCKN = :TCKN, ' +
                           'DogumTarihi = :DogumTarihi, Telefon = :Telefon, ' +
                           'Eposta = :Eposta, Adres = :Adres, ' +
                           'PozisyonID = :PozisyonID, Maas = :Maas, ' +
                           'Aktifmi = :Aktifmi WHERE PersonelID = :PersonelID';
  
  PersonelQuery.ParamByName('Ad').AsString := txtAd.Text;
  PersonelQuery.ParamByName('Soyad').AsString := txtSoyad.Text;
  PersonelQuery.ParamByName('TCKN').AsString := txtTCKN.Text;
  PersonelQuery.ParamByName('DogumTarihi').AsString := txtDogumTarihi.Text;
  PersonelQuery.ParamByName('Telefon').AsString := txtTelefon.Text;
  PersonelQuery.ParamByName('Eposta').AsString := txtEposta.Text;
  PersonelQuery.ParamByName('Adres').AsString := txtAdres.Text;
  PersonelQuery.ParamByName('PozisyonID').AsInteger := cmbPozisyon.ItemIndex + 1;
  PersonelQuery.ParamByName('Maas').AsFloat := StrToFloatDef(txtMaas.Text, 0);
  PersonelQuery.ParamByName('Aktifmi').AsInteger := Integer(chkAktif.Checked);
  PersonelQuery.ParamByName('PersonelID').AsInteger := SelectedID;
  
  try
    PersonelQuery.ExecSQL;
    ShowMessage('Personel bilgileri güncellendi.');
    ListeyiYenileClick(nil);
  except
    on E: Exception do
      ShowMessage('Hata: ' + E.Message);
  end;
end;
 
// Sil Butonu İşlevi
procedure SilClick(Sender: TObject);
var
  SelectedID: Integer;
begin
  if ListViewPersonel.Selected = nil then
  begin
    ShowMessage('Lütfen silinecek personeli seçin.');
    Exit;
  end;
  
  if MessageDlg('Uyarı', 'Bu personeli silmek istediğinize emin misiniz?', 
                mtConfirmation, [mbYes, mbNo], 0) = mrNo then Exit;
  
  SelectedID := Integer(ListViewPersonel.Selected.Data);
  
  PersonelQuery.SQL.Text := 'DELETE FROM Personel WHERE PersonelID = :PersonelID';
  PersonelQuery.ParamByName('PersonelID').AsInteger := SelectedID;
  
  try
    PersonelQuery.ExecSQL;
    ShowMessage('Personel silindi.');
    ListeyiYenileClick(nil);
    TemizleClick(nil);
  except
    on E: Exception do
      ShowMessage('Hata: ' + E.Message);
  end;
end;
 
// Listeyi Yenile Butonu İşlevi
procedure ListeyiYenileClick(Sender: TObject);
var
  Item: TClProListViewItem;
begin
  ListViewPersonel.Items.Clear;
  
  PersonelQuery.SQL.Text := 'SELECT * FROM Personel ORDER BY Ad, Soyad';
  PersonelQuery.Open;
  
  while not PersonelQuery.Eof do
  begin
    Item := ListViewPersonel.Items.Add;
    Item.Data := Pointer(PersonelQuery.FieldByName('PersonelID').AsInteger);
    Item.Text := PersonelQuery.FieldByName('Ad').AsString + ' ' + 
                 PersonelQuery.FieldByName('Soyad').AsString + #13#10 +
                 'TCKN: ' + PersonelQuery.FieldByName('TCKN').AsString + ' | ' +
                 'Pozisyon: ' + IntToStr(PersonelQuery.FieldByName('PozisyonID').AsInteger) + #13#10 +
                 'Maaş: ' + FloatToStr(PersonelQuery.FieldByName('Maas').AsFloat) + ' TL | ' +
                 'Durum: ' + BoolToStr(PersonelQuery.FieldByName('Aktifmi').AsBoolean, 'Aktif', 'Pasif');
    
    PersonelQuery.Next;
  end;
  PersonelQuery.Close;
end;
 
// Liste Elemanı Seçildiğinde
procedure ListeElemanSecildi(Sender: TObject; Item: TClProListViewItem);
begin
  if Item = nil then Exit;
  
  PersonelQuery.SQL.Text := 'SELECT * FROM Personel WHERE PersonelID = :PersonelID';
  PersonelQuery.ParamByName('PersonelID').AsInteger := Integer(Item.Data);
  PersonelQuery.Open;
  
  if not PersonelQuery.IsEmpty then
  begin
    txtAd.Text := PersonelQuery.FieldByName('Ad').AsString;
    txtSoyad.Text := PersonelQuery.FieldByName('Soyad').AsString;
    txtTCKN.Text := PersonelQuery.FieldByName('TCKN').AsString;
    txtDogumTarihi.Text := PersonelQuery.FieldByName('DogumTarihi').AsString;
    txtTelefon.Text := PersonelQuery.FieldByName('Telefon').AsString;
    txtEposta.Text := PersonelQuery.FieldByName('Eposta').AsString;
    txtAdres.Text := PersonelQuery.FieldByName('Adres').AsString;
    cmbPozisyon.ItemIndex := PersonelQuery.FieldByName('PozisyonID').AsInteger - 1;
    txtMaas.Text := FloatToStr(PersonelQuery.FieldByName('Maas').AsFloat);
    chkAktif.Checked := PersonelQuery.FieldByName('Aktifmi').AsBoolean;
  end;
  
  PersonelQuery.Close;
end;