@@ -8,19 +47,23 @@
Rekapitulasi Penerimaan Sample {{$tanggal}}
-
-
-
+
+
+
+
+
+
+
@@ -85,6 +139,8 @@
var table = document.getElementById('penerimaansamplereport');
var checkAllRows = document.getElementById('checkAllRows');
var printOrientation = document.getElementById('printOrientation');
+ var token = document.getElementById('token').value;
+ var markPrintedUrl = @json(route('markRekapPenerimaanSamplePrinted'));
var appName = @json(config('global.namaapps'));
var appDomain = @json(config('global.domainapps'));
var appSubDomain = @json(config('global.subdomainapps'));
@@ -92,14 +148,30 @@
var appAddress = @json(config('global.addressapps'));
var petugasCetak = @json(Session('nama'));
+ function updateCheckAllState() {
+ if (!table || !checkAllRows) {
+ return;
+ }
+ var rowChecks = table.querySelectorAll('tbody .row-check:not(:disabled)');
+ var checkedRows = table.querySelectorAll('tbody .row-check:not(:disabled):checked');
+ checkAllRows.checked = rowChecks.length > 0 && rowChecks.length === checkedRows.length;
+ }
+
if (checkAllRows && table) {
checkAllRows.addEventListener('change', function() {
- var rowChecks = table.querySelectorAll('tbody .row-check');
+ var rowChecks = table.querySelectorAll('tbody .row-check:not(:disabled)');
rowChecks.forEach(function(cb) {
cb.checked = checkAllRows.checked;
});
});
+
+ table.addEventListener('change', function(e) {
+ if (e.target && e.target.classList.contains('row-check')) {
+ updateCheckAllState();
+ }
+ });
}
+ updateCheckAllState();
document.getElementById('btnexport').addEventListener('click', function() {
var table = document.getElementById('penerimaansamplereport');
@@ -118,13 +190,19 @@
var selectedRows = table.querySelectorAll('tbody tr');
var printedRows = [];
+ var selectedIds = [];
+ var selectedRowElements = [];
selectedRows.forEach(function(row) {
var rowCheck = row.querySelector('.row-check');
if (rowCheck && rowCheck.checked) {
var cells = row.querySelectorAll('td');
+ var rowId = parseInt(row.getAttribute('data-id'), 10);
+ if (!isNaN(rowId)) {
+ selectedIds.push(rowId);
+ selectedRowElements.push(row);
+ }
printedRows.push([
- cells[1] ? cells[1].innerText : '',
cells[2] ? cells[2].innerText : '',
cells[3] ? cells[3].innerText : '',
cells[4] ? cells[4].innerText : '',
@@ -134,89 +212,133 @@
cells[8] ? cells[8].innerText : '',
cells[9] ? cells[9].innerText : '',
cells[10] ? cells[10].innerText : '',
- cells[11] ? cells[11].innerText : ''
+ cells[11] ? cells[11].innerText : '',
+ cells[12] ? cells[12].innerText : ''
]);
}
});
- if (printedRows.length === 0) {
+ if (printedRows.length === 0 || selectedIds.length === 0) {
alert('Pilih minimal satu baris untuk dicetak.');
return;
}
- var now = new Date();
- var orientation = printOrientation ? printOrientation.value : 'landscape';
- var tanggalCetak = now.toLocaleString('id-ID', {
- year: 'numeric',
- month: '2-digit',
- day: '2-digit',
- hour: '2-digit',
- minute: '2-digit',
- second: '2-digit'
- });
+ $.post(markPrintedUrl, { ids: selectedIds, _token: token }, function(resp) {
+ if (!resp || resp.status !== 'success') {
+ alert((resp && resp.message) ? resp.message : 'Gagal memperbarui status cetak.');
+ return;
+ }
- var printWindow = window.open('', '_blank');
- if (!printWindow) {
- alert('Pop-up diblokir browser. Izinkan pop-up untuk mencetak.');
- return;
- }
-
- var rowsHtml = '';
- printedRows.forEach(function(rowData) {
- rowsHtml += '
';
- rowData.forEach(function(value) {
- rowsHtml += '| ' + value + ' | ';
+ var affectedIds = Array.isArray(resp.affected_ids) ? resp.affected_ids : [];
+ var affectedMap = {};
+ affectedIds.forEach(function(id) {
+ affectedMap[String(id)] = true;
});
- rowsHtml += '
';
+
+ selectedRowElements.forEach(function(row) {
+ var id = row.getAttribute('data-id');
+ if (affectedMap[id]) {
+ row.classList.add('printed-row');
+ var rowCheck = row.querySelector('.row-check');
+ if (rowCheck) {
+ rowCheck.checked = false;
+ rowCheck.disabled = true;
+ }
+ var statusCell = row.querySelector('.print-status-cell');
+ if (statusCell) {
+ statusCell.innerHTML = '
Sudah Dicetak';
+ }
+ var petugasCell = row.querySelector('.petugas-cell');
+ if (petugasCell && (!petugasCell.innerText || petugasCell.innerText.trim() === '')) {
+ petugasCell.innerText = resp.printed_by || petugasCetak || '-';
+ }
+ }
+ });
+
+ checkAllRows.checked = false;
+ updateCheckAllState();
+
+ var now = new Date();
+ var orientation = printOrientation ? printOrientation.value : 'landscape';
+ var tanggalCetak = now.toLocaleString('id-ID', {
+ year: 'numeric',
+ month: '2-digit',
+ day: '2-digit',
+ hour: '2-digit',
+ minute: '2-digit',
+ second: '2-digit'
+ });
+
+ var printWindow = window.open('', '_blank');
+ if (!printWindow) {
+ alert('Pop-up diblokir browser. Izinkan pop-up untuk mencetak.');
+ return;
+ }
+
+ var rowsHtml = '';
+ printedRows.forEach(function(rowData) {
+ rowsHtml += '
';
+ rowData.forEach(function(value) {
+ rowsHtml += '| ' + value + ' | ';
+ });
+ rowsHtml += '
';
+ });
+
+ var html = ''
+ + ''
+ + '
Cetak Rekap Penerimaan Sample'
+ + ''
+ + ''
+ + '
Rekapitulasi Penerimaan Sample {{$tanggal}}
'
+ + '
'
+ + '
'
+ + ''
+ + '| No.RM | '
+ + 'Nama | '
+ + 'No.Sample | '
+ + 'Asal Pasien | '
+ + 'Daftar | '
+ + 'Order | '
+ + 'Kode | '
+ + 'Spesimen | '
+ + 'Status | '
+ + 'Tanggal Terima | '
+ + 'Petugas | '
+ + '
'
+ + '' + rowsHtml + ''
+ + '
'
+ + '
diff --git a/htdocs/routes/web.php b/htdocs/routes/web.php
index 6c841a07..dc4638de 100644
--- a/htdocs/routes/web.php
+++ b/htdocs/routes/web.php
@@ -138,6 +138,7 @@ Route::group(['middleware' => 'project.ipg'], function() {
Route::get('znreport', [ReportController::class, 'genZNreport']);
Route::get('tatreport', [ReportController::class, 'genTATreport']);
Route::get('reportpenerimaansample', [ReportController::class, 'genRekapPenerimaanSample']);
+ Route::post('reportpenerimaansample/mark-printed', [ReportController::class, 'markRekapPenerimaanSamplePrinted'])->name('markRekapPenerimaanSamplePrinted');
Route::get('/glass-report/export', [ReportController::class, 'exportGlassReport'])->name('exportGlassReport');
Route::get('rekap-antibiotik/export', [ReportController::class, 'exportRekapAntibiotik'])->name('exportRekapAntibiotik');
Route::get('list', [ListController::class, 'index']);