AdemKotilolu
Kodu vermediğiniz için Teorik Olarak Yp (Yapay Zeka) ile cevaplanmıştır.
Projenizdeki işleyişi anladım ve if yapısıyla kurduğunuz mantıkta bir sorun yaşadığınızı görüyorum. Bu tip durumlarda genellikle state management (durum yönetimi) ve koşullu işleme doğru bir şekilde yapılmazsa, beklenmeyen davranışlar ortaya çıkabilir. Size daha esnek ve düzenlenebilir bir çözüm sunmaya çalışacağım.
Öncelikle, fatura kaydedildikten sonra ilgili hareketlerin işlenmesi ve durumun güncellenmesi için bir yöntem oluşturabiliriz. Bu yöntemde, önce mevcut durumu kontrol eder ve sonra uygun işlemleri gerçekleştiririz.
Önerilen Çözüm
Aşağıdaki adımlarla ilerleyebiliriz:
Durum Kontrolü ve Güncelleme
Fatura çağrıldığında mevcut hareketleri kontrol ederiz.
Duruma göre banka veya kasa hareketlerini güncelleriz.
Kayıt İşleme
Eğer mevcut hareket yoksa veya silinmesi gerekiyorsa, silme işlemi yapılır.
Yeni hareket eklenir.
Örnek Kod Yapısı
public void FaturaHareketIsle(int faturaId, bool isBankaHareket, bool isKasaHareket)
{
using (var context = new MuhasebeContext())
{
var fatura = context.Faturalar.Find(faturaId);
if (fatura == null)
{
throw new Exception("Fatura bulunamadı.");
}
// Mevcut hareketleri kontrol et
var bankaHareket = context.BankaHareketleri.FirstOrDefault(b => b.EvrakId == faturaId);
var kasaHareket = context.KasaHareketleri.FirstOrDefault(k => k.EvrakId == faturaId);
// Banka hareketi seçiliyse
if (isBankaHareket)
{
if (kasaHareket != null)
{
context.KasaHareketleri.Remove(kasaHareket);
}
if (bankaHareket == null)
{
context.BankaHareketleri.Add(new BankaHareket { EvrakId = faturaId, /* diğer alanlar */ });
}
}
// Kasa hareketi seçiliyse
else if (isKasaHareket)
{
if (bankaHareket != null)
{
context.BankaHareketleri.Remove(bankaHareket);
}
if (kasaHareket == null)
{
context.KasaHareketleri.Add(new KasaHareket { EvrakId = faturaId, /* diğer alanlar */ });
}
}
// Hiçbir hareket seçilmemişse mevcut hareketleri sil
if (!isBankaHareket && !isKasaHareket)
{
if (bankaHareket != null)
{
context.BankaHareketleri.Remove(bankaHareket);
}
if (kasaHareket != null)
{
context.KasaHareketleri.Remove(kasaHareket);
}
}
// Değişiklikleri kaydet
context.SaveChanges();
}
}
Açıklamalar:
Durum Kontrolü:
İlk olarak, fatura çağrıldığında mevcut banka ve kasa hareketlerini kontrol ediyoruz.
Kayıt ve Silme İşlemleri:
Eğer banka hareketi seçildiyse ve kasa hareketi varsa, kasa hareketini siliyoruz.
Aynı mantıkla kasa hareketi seçildiyse ve banka hareketi varsa, banka hareketini siliyoruz.
Eğer herhangi bir hareket seçilmediyse, mevcut hareketleri siliyoruz.
Yeni Hareket Ekleme:
Banka veya kasa hareketi eklenmesi gerektiğinde, uygun tabloya yeni hareket kaydı ekliyoruz.
Bu yaklaşım, hem mevcut hareketlerin doğru yönetilmesini sağlar hem de kullanıcı tarafından belirlenen duruma göre hareketlerin güncellenmesini ve eklenmesini kolaylaştırır. Bu şekilde, onay tiki olmadan gelen kayıtları da düzenleyebilir ve doğru şekilde işleyebilirsiniz.