Merge branch 'development' of https://git.abbauf.com/Magang-2025/Kasir into development

This commit is contained in:
dhilanradya 2025-10-21 10:02:45 +07:00
commit 98a8096725
3 changed files with 1553 additions and 30 deletions

View File

@ -141,14 +141,17 @@ docker compose --env-file .env.production up -d --build
# Siapkan database # Siapkan database
docker exec -it abbauf_kasir_app php artisan migrate --seed docker exec -it abbauf_kasir_app php artisan migrate --seed
# Atau import database secara manual
docker exec -i abbauf_kasir_db mysql -u kasir_user -pkasir_password kasir_db < ./toko_emas.sql
# Periksa database (opsional) # Periksa database (opsional)
docker exec -it abbauf_kasir_db bash docker exec -it abbauf_kasir_db bash
mysql -u root -p mysql -u kasir_user -pkasir_password kasir_db
``` ```
### 8. Print Label ### 8. Print Label
- Install driver, ada pada folder `./driver/` untuk windows 64bit. - Install driver, ada pada folder `./driver/NiimbotPrinterDriverInstall_3.0.0.5.exe` untuk windows 64bit.
- Pilih `NIIMBOT B3S_P` pada saat install driver. - Pilih `NIIMBOT B3S_P` pada saat install driver.
- Sambungkan printer ke komputer via USB. - Sambungkan printer ke komputer via USB.
- Nyalakan printer. - Nyalakan printer.
@ -157,6 +160,16 @@ mysql -u root -p
- Pilih printer `NIIMBOT B3S_P` dan atur kertas ke ukuran kertas `40mm x 30mm`, margin `Default`, scale `Default` - Pilih printer `NIIMBOT B3S_P` dan atur kertas ke ukuran kertas `40mm x 30mm`, margin `Default`, scale `Default`
- Klik print - Klik print
### 9. Print Nota
- Pastikan printer terhubung dengan komputer via USB.
- Nyalakan printer.
- Install driver, ada pada folder `./driver/L120_x64_213UsHomeExportAsiaML.exe`.
- Lakukan transaksi penjualan pada aplikasi, atau pilih nota yang akan diprint di `Laporan > Riwayat transaksi`.
- Klik tombol print pada halaman tersebut
- Pilih ukuran kertas A4, margin `Minimum`, scale `95`
- Klik print
--- ---
## 🌐 Akses Aplikasi ## 🌐 Akses Aplikasi

View File

@ -37,7 +37,9 @@ const printBarcode = () => {
const printWindow = window.open('', '_blank'); const printWindow = window.open('', '_blank');
const kode = props.code || 'N/A'; const kode = props.code || 'N/A';
const nama = props.item.nama || 'N/A'; const nama = props.item.nama || 'N/A';
const berat = props.item.berat ? `(${props.item.berat} g)` : ''; const berat = props.item.berat ? `${props.item.berat} g` : '';
const kadar = props.item.kadar ? `${props.item.kadar} K` : '';
const harga = props.item.harga_jual ? `Rp${props.item.harga_jual.toLocaleString('id-ID')},00` : '';
printWindow.document.write(` printWindow.document.write(`
<html> <html>
@ -70,29 +72,47 @@ const printBarcode = () => {
height: 38mm; height: 38mm;
} }
.barcode-container { .left-side {
width: 12mm; width: 12.5mm;
height: 38mm; height: 38mm;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} position: relative;
}
.barcode-img {
transform: rotate(90deg); .left-content {
transform-origin: center; position: absolute;
max-height: 12mm; width: fit-content;
max-width: 12mm; height: 12.5mm;
} transform: rotate(90deg);
transform-origin: center;
.details-container { display: flex;
width: 12mm; align-items: center;
gap: 2mm;
}
.barcode-img {
height: 10mm;
width: auto;
flex-shrink: 0;
}
.info-box {
display: flex;
flex-direction: column;
gap: 0.5mm;
font-size: 5pt;
line-height: 1.2;
}
.right-side {
width: 12.5mm;
height: 38mm; height: 38mm;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
position: relative; position: relative;
overflow: hidden;
} }
.item-name { .item-name {
@ -101,25 +121,30 @@ const printBarcode = () => {
white-space: normal; white-space: normal;
word-wrap: break-word; word-wrap: break-word;
position: absolute; position: absolute;
width: 32mm; width: 36mm;
text-align: center;
transform: rotate(270deg); transform: rotate(270deg);
top: 50%;
left: 50%;
transform-origin: center; transform-origin: center;
translate: -50% -50%;
} }
</style> </style>
</head> </head>
<body> <body>
<div class="label"> <div class="label">
<div class="barcode-container"> <!-- Sisi Kiri: Barcode + Info -->
<img id="barcode-img" class="barcode-img" <div class="left-side">
src="${barcodeUrl.value}" alt="Barcode" /> <div class="left-content">
<img id="barcode-img" class="barcode-img" src="${barcodeUrl.value}" alt="Barcode" />
<div class="info-box">
${harga ? `<div>${harga}</div>` : ''}
${berat ? `<div>Berat: ${berat}</div>` : ''}
${kadar ? `<div>Kadar: ${kadar}</div>` : ''}
</div>
</div>
</div> </div>
<div class="details-container"> <div class="right-side">
<div class="item-name">${nama} ${berat}</div> <div class="item-name">${nama}</div>
</div> </div>
</div> </div>
</body> </body>

1485
storage/toko_emas.sql Normal file

File diff suppressed because one or more lines are too long