diff --git a/app/Http/Controllers/StrukController.php b/app/Http/Controllers/StrukController.php
new file mode 100644
index 0000000..e1173a2
--- /dev/null
+++ b/app/Http/Controllers/StrukController.php
@@ -0,0 +1,51 @@
+find($id);
+
+ if (!$data) {
+ return response()->json(['error'=>'Transaksi tidak ditemukan'], 404);
+ }
+
+ // Debug: Let's see what data structure we have
+ // dd([
+ // 'transaksi' => $data->toArray(),
+ // 'item_count' => $data->itemTransaksi->count(),
+ // 'has_sales' => $data->sales ? true : false,
+ // ]);
+
+ // After debugging, uncomment this:
+
+ $pdf = Pdf::loadView('exports.struk', $data->toArray())
+ ->setPaper([0, 0, 1224 * 0.75, 528 * 0.75], 'landscape')
+ ->setOptions([
+ 'isHtml5ParserEnabled' => true,
+ 'isRemoteEnabled' => true,
+ 'defaultFont' => 'DejaVu Sans'
+ ]);
+
+ $filename = 'Struk_' . $data->kode_transaksi . '.pdf';
+ return $pdf->download($filename);
+
+
+ } catch (\Exception $e) {
+ return response()->json([
+ 'error' => 'Debug Error',
+ 'message' => $e->getMessage(),
+ 'line' => $e->getLine(),
+ 'file' => $e->getFile()
+ ], 500);
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/Http/Controllers/TransaksiController.php b/app/Http/Controllers/TransaksiController.php
index c975503..350a82f 100644
--- a/app/Http/Controllers/TransaksiController.php
+++ b/app/Http/Controllers/TransaksiController.php
@@ -25,15 +25,15 @@ class TransaksiController extends Controller
$transaksi->total_items = $transaksi->itemTransaksi->count();
$transaksi->tanggal = $transaksi->created_at->format('d/m/Y');
});
- return response()->json($transaksi);
-
+ return response()->json($transaksi);
+
}
// Detail transaksi by ID
public function show($id)
{
- $transaksi = Transaksi::with(['kasir', 'sales', 'items.produk.foto'])->findOrFail($id);
+ $transaksi = Transaksi::with(['kasir', 'sales', 'itemTransaksi.produk.foto'])->findOrFail($id);
return response()->json($transaksi);
}
@@ -64,7 +64,7 @@ class TransaksiController extends Controller
$transaksi = Transaksi::create([
'kode_transaksi' => 'belum pak',
- 'id_kasir' => $kasir->id,
+ 'id_kasir' => $kasir->id,
'id_sales' => $request->id_sales,
'nama_sales' => $sales->nama ?? 'N/A',
'nama_pembeli' => $request->nama_pembeli,
diff --git a/resources/js/components/BrankasList.vue b/resources/js/components/BrankasList.vue
index af0ee7c..ffda540 100644
--- a/resources/js/components/BrankasList.vue
+++ b/resources/js/components/BrankasList.vue
@@ -107,19 +107,37 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -151,6 +169,7 @@
diff --git a/resources/js/components/NavigationComponent.vue b/resources/js/components/NavigationComponent.vue
index e5d8a8f..4f3f89a 100644
--- a/resources/js/components/NavigationComponent.vue
+++ b/resources/js/components/NavigationComponent.vue
@@ -13,9 +13,9 @@ const baseItems = [
{
label: "Manajemen Produk",
subItems: [
- { label: "Brankas", route: "/brankas" },
- { label: "Nampan", route: "/nampan" },
{ label: "Produk", route: "/produk" },
+ { label: "Nampan", route: "/nampan" },
+ { label: "Brankas", route: "/brankas" },
{ label: "Kategori", route: "/kategori" },
{ label: "Sales", route: "/sales" },
]
diff --git a/resources/js/components/ProductCard.vue b/resources/js/components/ProductCard.vue
index bac5015..e70a0c8 100644
--- a/resources/js/components/ProductCard.vue
+++ b/resources/js/components/ProductCard.vue
@@ -1,31 +1,59 @@
-
-
-
![]()
-
[tidak ada foto]
-
-
+
+
- {{ product.nama }}
+
+
![]()
+
[tidak ada foto]
+
+
+
+ {{ product.nama }}
+
+
+
+
+
+
+
+ !
+
+
+
+
+ Stok menipis: {{ product.items_count }} pcs
+
+
+
diff --git a/resources/js/components/StrukOverlay.vue b/resources/js/components/StrukOverlay.vue
index 055ae13..ac66435 100644
--- a/resources/js/components/StrukOverlay.vue
+++ b/resources/js/components/StrukOverlay.vue
@@ -55,11 +55,11 @@
| Jml |
- Item |
+ Item |
Posisi |
Berat |
Kadar |
- Harga |
+ Harga |
@@ -132,7 +132,7 @@
Total Harga
Rp
-
+
{{ grandTotal.toLocaleString() }},-
@@ -158,8 +158,8 @@
-
@@ -230,7 +230,7 @@ const toastClasses = computed(() => {
const baseClasses = 'text-white'
const typeClasses = {
error: 'bg-red-500',
- success: 'bg-green-500',
+ success: 'bg-green-500',
info: 'bg-blue-500'
}
return `${baseClasses} ${typeClasses[toastType.value]}`
@@ -264,7 +264,7 @@ const showSimpleToast = (type, message, duration = 3000) => {
toastType.value = type
toastMessage.value = message
showToast.value = true
-
+
setTimeout(() => {
showToast.value = false
}, duration)
@@ -317,7 +317,7 @@ const handleSimpan = () => {
nama_pembeli: namaPembeli.value,
no_hp: nomorTelepon.value,
alamat: alamat.value,
- ongkosBikin: ongkosBikin.value || 0,
+ ongkos_bikin: ongkosBikin.value || 0, // Pastikan nama field benar
total_harga: grandTotal.value,
items: props.pesanan
})
@@ -334,11 +334,10 @@ const simpanTransaksi = async (dataTransaksi) => {
});
showSimpleToast('success', 'Transaksi berhasil disimpan!', 2000)
-
+
// Delay untuk memberikan waktu user membaca notifikasi
setTimeout(() => {
- props.pesanan.value = [];
- props.isOpen = false;
+ emit('close');
window.location.reload();
}, 2200);
@@ -379,4 +378,4 @@ function formatInput(e) {
font-family: "PT Serif", serif;
font-weight: 400;
}
-
\ No newline at end of file
+
diff --git a/resources/js/components/StrukView.vue b/resources/js/components/StrukView.vue
new file mode 100644
index 0000000..34e8f81
--- /dev/null
+++ b/resources/js/components/StrukView.vue
@@ -0,0 +1,271 @@
+
+
+
+
+
+
+
+
+
+ tokomas_Jakartacitayam
+
+
+ tokomas_Jakartacitayam
+
+
+ 08158851178
+
+
{{ transaksi.kode_transaksi || 'N/A' }}
+
+
+
+
![Logo]()
+
+
+
+
Tanggal :
+
{{ formatDate(transaksi.created_at) }}
+
+
Nama :
+
{{ transaksi.nama_pembeli || '-' }}
+
+
Alamat :
+
{{ transaksi.alamat || '-' }}
+
+
No.Hp :
+
{{ transaksi.no_hp || '-' }}
+
+
+
+
+
+
+
+
+ | Jml |
+ Item |
+ Posisi |
+ Berat |
+ Kadar |
+ Harga |
+
+
+
+
+
+ |
+ 1
+ |
+
+
+
+
+
+
+ IMG
+
+
+
+
+
+ {{ item.produk?.nama || '' }}
+ |
+
+ {{ item.posisi_asal || 'Brankas' }}
+ |
+
+ {{ formatNumber(item.produk.berat) }}g
+ |
+
+ {{ item.produk.kadar }}k
+ |
+
+
+ Rp{{ formatNumber(item.harga_deal) }}
+
+ |
+
+
+
+
+
+
+
+
+
PERHATIAN
+
+ - Berat barang telah ditimbang dan disaksikan oleh pembeli.
+ - Barang yang dikembalikan menurut harga pasaran dan dipotong ongkos bikin, barang rusak
+ lain harga.
+ - Barang yang sudah dibeli berarti sudah diperiksa dan disetujui.
+ - Surat ini harap dibawa pada saat menjual kembali.
+
+
+
+
+
+
Hormat Kami
+
+
{{ transaksi.nama_sales || '-' }}
+
+
+
+
+
+
+
+
+
+
Ongkos bikin
+
diluar harga jual
+
+
+
Rp
+
+ {{ (transaksi.ongkos_bikin || 0).toLocaleString() }},-
+
+
+
+
+
+
+
Total Harga
+
+
Rp
+
+ {{ (transaksi.total_harga || 0).toLocaleString() }},-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Terima kasih sudah berbelanja dengan kami
+
+
+
+
+
+
+
+
diff --git a/resources/js/components/TrayList.vue b/resources/js/components/TrayList.vue
index 27cae7c..14404e5 100644
--- a/resources/js/components/TrayList.vue
+++ b/resources/js/components/TrayList.vue
@@ -49,33 +49,23 @@
-
-
-
-
![foto produk]()
-
-
{{ item.produk?.nama }}
-
{{ item.kode_item }}
-
-
-
- {{ item.produk?.berat }}g
-
-
-
+
+
+
+
![foto produk]()
+
+
{{ item.produk?.nama }}
+
{{ item.kode_item }}
+
+
+
+ {{ item.produk?.berat }}g
+
+
+
@@ -107,7 +97,7 @@
{{ selectedItem.kode_item }}
- {{ selectedItem.produk?.nama }}
+ {{ selectedItem.produk.nama }}
@@ -128,9 +118,14 @@
+
+
+
+
+
diff --git a/resources/views/exports/struk.blade.php b/resources/views/exports/struk.blade.php
new file mode 100644
index 0000000..37053ee
--- /dev/null
+++ b/resources/views/exports/struk.blade.php
@@ -0,0 +1,542 @@
+
+
+
+
+
+ Struk Transaksi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Tanggal :
+
+ @if(isset($created_at))
+ @php
+ $date = \Carbon\Carbon::parse($created_at);
+ $days = ['Minggu', 'Senin', 'Selasa', 'Rabu', 'Kamis', 'Jumat', 'Sabtu'];
+ $dayName = $days[$date->dayOfWeek];
+ $formattedDate = $dayName . '/' . $date->format('d-m-Y');
+ @endphp
+ {{ $formattedDate }}
+ @else
+ N/A
+ @endif
+
+
+
Nama :
+
{{ $nama_pembeli ?? 'N/A' }}
+
+
Alamat :
+
{{ $alamat ?? 'N/A' }}
+
+
No.Hp :
+
{{ $no_hp ?? 'N/A' }}
+
+
+
+
+
+
+
+
+ | Jml |
+ Item |
+ Posisi |
+ Berat |
+ Kadar |
+ Harga |
+
+
+
+ @if(isset($item_transaksi) && count($item_transaksi) > 0)
+ @foreach($item_transaksi as $item)
+
+ |
+ @if(isset($item['harga_deal']) && $item['harga_deal'])
+ 1
+ @endif
+ |
+
+
+ @if(isset($item['produk']['foto'][0]['url']))
+ 
+ @else
+
+ @endif
+ {{ $item['produk']['nama'] ?? '' }}
+
+ |
+
+ @if(isset($item['produk']['nama']) && $item['produk']['nama'])
+ {{ $item['nampan']['nama'] ?? 'Brankas' }}
+ @endif
+ |
+
+ @if(isset($item['produk']['berat']) && $item['produk']['berat'])
+ {{ $item['produk']['berat'] }}g
+ @endif
+ |
+
+ @if(isset($item['produk']['kadar']) && $item['produk']['kadar'])
+ {{ $item['produk']['kadar'] }}k
+ @endif
+ |
+
+ @if(isset($item['harga_deal']) && $item['harga_deal'])
+ Rp{{ number_format($item['harga_deal'], 0, ',', '.') }}
+ @endif
+ |
+
+ @endforeach
+ @endif
+
+ {{-- Add empty rows to ensure minimum 2 rows --}}
+ @for($i = (isset($item_transaksi) ? count($item_transaksi) : 0); $i < 2; $i++)
+
+ |
+
+
+ |
+ |
+ |
+ |
+ |
+
+ @endfor
+
+
+
+
+
+
+
+
PERHATIAN
+
+ - Berat barang telah ditimbang dan disaksikan oleh pembeli.
+ - Barang yang dikembalikan menurut harga pasaran dan dipotong ongkos bikin, barang rusak lain harga.
+ - Barang yang sudah dibeli berarti sudah diperiksa dan disetujui.
+ - Surat ini harap dibawa pada saat menjual kembali.
+
+
+
+
+
+
Hormat Kami
+
{{ $sales['nama'] ?? 'N/A' }}
+
+
+
+
+
+
+
+
+
Ongkos bikin
+
diluar harga jual
+
+
+
Rp
+
{{ number_format($ongkos_bikin ?? 0, 0, ',', '.') }}
+
+
+
+
+
+
Total Harga
+
+
Rp
+
+ {{ number_format($total_harga ?? 0, 0, ',', '.') }},-
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/routes/web.php b/routes/web.php
index 1dcd6ea..3f09d4e 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -10,6 +10,7 @@ use App\Http\Controllers\SalesController;
use App\Http\Controllers\UserController;
use App\Http\Controllers\TransaksiController;
use App\Http\Controllers\LaporanController;
+use App\Http\Controllers\StrukController;
use Illuminate\Support\Facades\Route;
@@ -63,6 +64,8 @@ Route::prefix('api')->group(function () {
Route::get('kategori', [KategoriController::class, 'index']);
Route::get('kategori/{id}', [KategoriController::class, 'show']);
Route::get('brankas', [ItemController::class, 'brankasItem']);
+
+ Route::get('/cetak-struk/{id}', [StrukController::class, 'cetak']);
});
});