Merhabalar,
Databaseden çektiğim verileri ödeme tiplerine göre gruplayıp wordde ayrı tablolara basmak istiyorum. Aşağıdaki kod ile deniyorum ancak tabloları ayrı ayrı basmıyor. Bildiğiniz başka bir yöntem varmıdır?
public function masrafDetayWord($masrafID)
{
$masraf = MasrafTakip::where('MASTAKID', $masrafID)->first();
$masrafDetaylar = MasrafDetay::where('MASRAFID', $masrafID)->get();
$templatePath = storage_path('word_sablonlar/masraf-rapor.docx');
if (!file_exists($templatePath)) {
return response()->json(['error' => 'Şablon dosyası bulunamadı!'], 404);
}
$templateProcessor = new TemplateProcessor($templatePath);
$odemeTurleri = [
'Nakit' => [],
'Kredi Kartı' => [],
'Havale/EFT' => []
];
foreach ($masrafDetaylar as $detay) {
if ($detay->ODEMETIP == '1') {
$odemeTurleri['Nakit'][] = $detay;
} elseif ($detay->ODEMETIP == '2') {
$odemeTurleri['Kredi Kartı'][] = $detay;
} elseif ($detay->ODEMETIP == '3') {
$odemeTurleri['Havale/EFT'][] = $detay;
}
}
$templateProcessor->cloneBlock('TABLE_BLOCK', count($odemeTurleri), true, true);
$tableIndex = 1;
foreach ($odemeTurleri as $kategori => $detaylar) {
if (count($detaylar) > 0) {
$templateProcessor->setValue("KATEGORI_BASLIK#$tableIndex", "$kategori");
$rows = [];
$sira_no = 1;
foreach ($detaylar as $detay) {
$rows[] = [
'SNO' => $sira_no++,
'FATURAUNVAN' => $detay->FIRMAUNVAN,
'FISNO' => $detay->FIS_NO,
'TARIH' => date('d.m.Y', strtotime($detay->FISTARIH)),
'TUTAR' => number_format($detay->TUTAR, 2, ',', '.') . " TL",
'ACIKLAMA' => $detay->ACIKLAMA
];
}
if (count($rows) > 0) {
$templateProcessor->cloneRowAndSetValues("SNO#$tableIndex", $rows);
}
}
$tableIndex++;
}
$uid = Uuid::uuid4();
$fileName = "masraf_rapor_$uid.docx";
$filePath = "masraflar/$fileName";
Storage::makeDirectory('masraflar'); // Klasör yoksa oluştur
$templateProcessor->saveAs(storage_path("app/$filePath"));
return response()->json([
'message' => 'Dosya başarıyla kaydedildi.',
'file_url' => Storage::url($filePath) // Public URL döndür
]);
}
verilerim de aşağıdaki gibi geliyor
{
"SATIRID": 11985,
"ACIKLAMA": "MANİSA SATIŞ",
"BOLGEID": "3",
"FIRMAUNVAN": "BESOT",
"FISTARIH": "2014-06-05 00:00:00.000",
"FIS_NO": "0004",
"HARCAMA_TUR": "Otopark",
"KK_ID": "0",
"MASRAFID": "1625",
"ODEMETIP": "1",
"TUR": "1",
"TUTAR": "3.00000000",
"HARCAMAID": "5",
"KISISAYI": null,
"GUNSAYI": null,
"KISIGUNORTALAMA": null
},
{
"SATIRID": 11986,
"ACIKLAMA": "BURSA SATIŞ",
"BOLGEID": "3",
"FIRMAUNVAN": "İREM KÖFTE",
"FISTARIH": "2014-06-13 00:00:00.000",
"FIS_NO": "0022",
"HARCAMA_TUR": "Yemek",
"KK_ID": "7",
"MASRAFID": "1625",
"ODEMETIP": "2",
"TUR": "1",
"TUTAR": "15.00000000",
"HARCAMAID": "255",
"KISISAYI": null,
"GUNSAYI": null,
"KISIGUNORTALAMA": null
},
Rapor şablonumda aşağıdaki gibi ayarladım
${KATEGORI_BASLIK}
Ödeme Tipi: ${Kategori}
SNo. Fiş/Fatura Unvanı Fiş No Tarih Tutar Açıklama
${SNO} ${FATURAUNVAN} ${FISNO} ${TARIH} ${TUTAR} ${ACIKLAMA}
${/KATEGORI_BASLIK}