Merhabalar;
Veritabanına kaydetmesi için bir for döngüsü kurmak istiyorum. hakedisVeriler de 2 adet tarih var bu tarihler for döngüsüne girecek ve odenekDilimler tablosundan verileri getirecek. Veritabanına kaydederken bir hesap yaptırıyorum. Bu hesabın sonucuna göre kalan tutar var ise odenekDilimler döngüsü tekrar çalışıp kalan tutar için aynı ayda tekrar kayıt oluşturması gerekiyor. Kalan tutar yok ise bu odenekDilimler döngüsü bitirip hakedisVeriler de sonraki aya geçmesini istiyorum. Bu döngüyü nasıl kurabilirim.
$hakedisVeriler =
array:2 [ // app\Http\Controllers\Onyuz\FiyatFarkiController.php:2109
0 => array:4 [
"hakedis_tutari" => 159172.13114754
"projes_id" => 60
"proje_hakedis_id" => "253"
"itibar_tarihi" => "2023-09-01"
]
1 => array:4 [
"hakedis_tutari" => 164477.86885246
"projes_id" => 60
"proje_hakedis_id" => "253"
"itibar_tarihi" => "2023-10-01"
]
]
foreach ($hakedisVeriler as $veri) {
$kalan_ay = 0;
$kalan_yil = 0;
$kalan_tarih = 0;
$kalan_tutar = 0;
if ($kalan_tutar > 0){
$veriHakedisTutari = $kalan_tutar;
$veriHakedisAy = $kalan_ay;
$veriHakedisYil = $kalan_yil;
$odenekDilimler = FiyatFarkiProjeOdenekDilimAylar::where('projes_id', $proje->id)
->where('ay', '>=', $kalan_ay)
->where('yil', $kalan_yil)
->orderBy('yil', 'asc')
->orderBy('ay', 'asc')
->get();
}else{
$veriItibarTarihi = Carbon::parse($veri['itibar_tarihi']);
$veriHakedisTutari = $veri['hakedis_tutari'];
$veriHakedisAy = $veriItibarTarihi->month;
$veriHakedisYil = $veriItibarTarihi->year;
$odenekDilimler = FiyatFarkiProjeOdenekDilimAylar::where('projes_id', $proje->id)
->where('ay', '>=', $veriHakedisAy)
->where('yil', $veriHakedisYil)
->orderBy('yil', 'asc')
->orderBy('ay', 'asc')
->get();
}
$pn = number_format($pn, $pn_basamak);
foreach ($odenekDilimler as $odenekDilim) {
if ($kalan_tutar > 0){
$odenekAy = $kalan_ay;
$odenekYil = $kalan_yil;
$odenekTutari = $kalan_tutar;
$kullanilanTutar = min($veriHakedisTutari - $avansTutari, $odenekTutari);
}else{
$odenekAy = $odenekDilim->ay;
$odenekYil = $odenekDilim->yil;
$odenekTutari = $odenekDilim->aylik_odenek_tutari;
$kullanilanTutar = min($veriHakedisTutari - $avansTutari, $odenekTutari);
}
$fiyatFarkiTutari = FiyatFarkiProjeFiyatFarkiTutarlar::where('projes_id', $proje->id)
->where('proje_hakedis_id', $hakedisId)
->where('odenek_yil', $odenekYil)
->where('odenek_ay', $odenekAy)
->where('ff_esas_net_tutar', $kullanilanTutar)
->first();
if ($fiyatFarkiTutari) {
$fiyatFarkiTutari->projes_id = $proje->id;
$fiyatFarkiTutari->proje_hakedis_id = $hakedisId;
$fiyatFarkiTutari->odenek_yil = $odenekYil;
$fiyatFarkiTutari->odenek_ay = $odenekAy;
$fiyatFarkiTutari->imalat_yil = $veriHakedisYil;
$fiyatFarkiTutari->imalat_ay = $veriHakedisAy;
$fiyatFarkiTutari->ff_esas_net_tutar = $kullanilanTutar;
$fiyatFarkiTutari->ff_esas_brut_tutar = $kullanilanTutar;
$fiyatFarkiTutari->avans_mahsubu = $avansTutari;
$fiyatFarkiTutari->b_katsayisi = 0.90;
$fiyatFarkiTutari->pn_degeri = $pn;
$fiyatFarkiTutari->save();
$ff_tutar = $fiyatFarkiTutari->ff_esas_net_tutar * $fiyatFarkiTutari->b_katsayisi * ($fiyatFarkiTutari->pn_degeri - 1);
if ($fiyatFarkiTutari->odenek_yil === $fiyatFarkiTutari->imalat_yil && $fiyatFarkiTutari->imalat_ay === $fiyatFarkiTutari->odenek_ay) {
$fiyatFarkiTutari->aciklama = 'Kendi Ödenek Diliminden';
} else {
$fiyatFarkiTutari->aciklama = 'Sonraki Ödenek Diliminden';
}
$fiyatFarkiTutari->ff_tutar = $ff_tutar;
$fiyatFarkiTutari->save();
} else {
$fiyatFarkiTutari = new FiyatFarkiProjeFiyatFarkiTutarlar();
$fiyatFarkiTutari->projes_id = $proje->id;
$fiyatFarkiTutari->proje_hakedis_id = $hakedisId;
$fiyatFarkiTutari->odenek_yil = $odenekYil;
$fiyatFarkiTutari->odenek_ay = $odenekAy;
$fiyatFarkiTutari->imalat_yil = $hakedisYil;
$fiyatFarkiTutari->imalat_ay = $hakedisAy;
$fiyatFarkiTutari->ff_esas_net_tutar = $kullanilanTutar;
$fiyatFarkiTutari->avans_mahsubu = $avansTutari;
$fiyatFarkiTutari->ff_esas_brut_tutar = $kullanilanTutar;
$fiyatFarkiTutari->b_katsayisi = 0.90;
$fiyatFarkiTutari->pn_degeri = $pn;
$fiyatFarkiTutari->save();
$ff_tutar = $fiyatFarkiTutari->ff_esas_net_tutar * $fiyatFarkiTutari->b_katsayisi * ($fiyatFarkiTutari->pn_degeri - 1);
if ($fiyatFarkiTutari->odenek_yil === $fiyatFarkiTutari->imalat_yil && $fiyatFarkiTutari->imalat_ay === $fiyatFarkiTutari->odenek_ay) {
$fiyatFarkiTutari->aciklama = 'Kendi Ödenek Diliminden';
} else {
$fiyatFarkiTutari->aciklama = 'Sonraki Ödenek Diliminden';
}
$fiyatFarkiTutari->ff_tutar = $ff_tutar;
$fiyatFarkiTutari->save();
}
$veriHakedisTutari -= $kullanilanTutar;
$kalan_tutar = $odenekTutari - $kullanilanTutar;
$kalan_tarih = Carbon::parse('1'.'-'.$odenekAy.'-'.$odenekYil);
}
}