- Düzenlendi
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}