&1', $output, $return_var); $pathNetworkFolder = 'L:/Sampling_Labels/'; $letterPath = 'L:'; return array($pathNetworkFolder, $letterPath); } public function printerSampling() { exec('net use K: \\\\10.148.5.68\\Labelshare /user:Administrator 2>&1', $output, $return_var); $pathNetworkFolder = 'K:/Sampling_Labels/'; $letterPath = 'K:'; return array($pathNetworkFolder, $letterPath); } public function splitName($fullName) { $words = explode(' ', $fullName); // Pisahkan nama berdasarkan spasi $line1 = ''; $line2 = ''; // Tambahkan kata-kata ke baris pertama hingga mencapai batas 20 karakter foreach ($words as $word) { if (strlen($line1 . ' ' . $word) <= 27) { $line1 .= (empty($line1) ? '' : ' ') . $word; } else { // Setelah line1 penuh, pindahkan kata ke line2 if (strlen($line2 . ' ' . $word) <= 19) { $line2 .= (empty($line2) ? '' : ' ') . $word; } } } // Jika Line 2 lebih dari 19 karakter, hapus kata terakhir sampai sesuai while (strlen($line2) > 19) { $wordsLine2 = explode(' ', $line2); array_pop($wordsLine2); // Hapus kata terakhir $line2 = implode(' ', $wordsLine2); // Gabungkan kembali } // Kembalikan kedua baris sebagai array return ['line1' => $line1, 'line2' => $line2]; } // Untuk Ruang Laboratorium public function labelCollection($access) { $time = microtime(true); $logTime = date('d-m-Y_H_i_s', $time) . sprintf('_%03d', ($time - floor($time)) * 1000); $filename = "collection(".$access.")_".$logTime; $networkPath = ""; $db = \Config\Database::connect(); $sql = "SELECT p.PATNUMBER as UHID, ctr.REQNUMBER as BV, concat (p.FIRSTNAMESK, ' ', p.NAME) as NAME, p.SEX, DATEDIFF(YEAR, BirthDate, GETDATE()) - CASE WHEN MONTH(BirthDate) > MONTH(GETDATE()) OR (MONTH(BirthDate) = MONTH(GETDATE()) AND DAY(BirthDate) > DAY(GETDATE())) THEN 1 ELSE 0 END AS AGE, sr.COLLECTIONDATE, p.BIRTHDATE from SP_REQUESTS sr left join cmod.dbo.CM_TM_REQUESTS ctr on ctr.REFFID=sr.HOSTORDERNUMBER left join SP_REQUESTS st on sr.SP_ACCESSNUMBER=st.SP_ACCESSNUMBER left join PATIENTS p on p.PATID=sr.PATID where st.SP_ACCESSNUMBER='$access'"; $query = $db->query($sql); $results = $query->getResultArray(); $item = $results[0]; $uhid = ltrim($item['UHID'], '0'); $bv = $item['BV']; $sex = $item['SEX'] == 1 ? "M" : "F"; $title = $item['SEX'] == 1 ? "Mr" : "Mrs"; $name = $item['NAME']; $age = $item['AGE']; $birthdate = $item['BIRTHDATE']; $date = \DateTime::createFromFormat('Y-m-d H:i:s.v', $birthdate); if ($date) { $birthdate = $date->format('d/m/Y'); } else { $birthdate = ""; } $collectiondate = $item['COLLECTIONDATE']; $date = \DateTime::createFromFormat('Y-m-d H:i:s.v', $collectiondate); if ($date) { $collectiondate = $date->format('d/m/Y H:i'); } else { $collectiondate = ""; } $fixName = $this->splitName($name); $name1 = $fixName['line1']; $name2 = $fixName['line2']; if ($sex == 'M') { $jarak = '42'; } else { $jarak = '53'; } $label=""; $role = session()->get('userrole'); // Ruang Analis Printer POSTEK C168/200s + 16 untuk sudut if ($role == 'admin' || $role == 'user') { $label = "N OD q400 Q200,10+0 I8,A,001 D10 A5,19,0,2,1,1,N,\"$title.$name1\" A$jarak,36,0,2,1,1,N,\"$name2\" A5,58,0,1,1,1,N,\"DoB: $birthdate\" A337,58,0,1,1,1,N,\"$sex {$age}Y\" B16,73,0,1,4,8,70,N,\"$access\" A120,148,0,1,1,1,N,\"REQ# $access\" A5,165,0,2,1,1,N,\"VN:$bv\" A5,182,0,2,1,1,N,\"RM:$uhid\" A195,182,0,2,1,1,N,\"$collectiondate\" P1 "; $printer = $this->printerLab(); } else if ($role == 'sampling') { $label = "N OD q400 Q185,10+0 I8,A,001 D10 A4,3,0,2,1,1,N,\"$title.$name1\" A$jarak,20,0,2,1,1,N,\"$name2\" A4,42,0,1,1,1,N,\"DoB: $birthdate\" A337,42,0,1,1,1,N,\"$sex {$age}Y\" B15,57,0,1,4,8,70,N,\"$access\" A120,132,0,1,1,1,N,\"REQ# $access\" A4,164,0,2,1,1,N,\"RM:$uhid\" A4,147,0,2,1,1,N,\"VN:$bv\" A195,164,0,2,1,1,N,\"$collectiondate\" P1 "; $printer = $this->printerSampling(); } else { // Eksekusi Kode Berikut Apabila Role Bukan Analis atau Sampling return $this->response->setJSON([ 'message' => "Akses Tidak Berwenang", 'error' => "Hak Akses Anda Tidak Dikenali", 'status' => false, ]); } // $folder = "C:/data/"; $folder = $printer[0]; $fullPath = $folder . $filename; // Tulis file ke folder tujuan if (!file_put_contents($fullPath, $label)) { //exec('net use '. $letterPath .' /delete 2>&1', $output, $return_var); // Eksekusi Kode Berikut Apabila Ada Error return $this->response->setJSON([ 'error' => $output, 'message' => "Gagal Melakukan Print, Mohon Ulangi Atau Cek Koneksi Printer Anda", 'status' => false, ]); } else { // Hapus Koneksi //exec('net use '. $letterPath .' /delete 2>&1', $output, $return_var); return $this->response->setJSON( [ 'message' => "Print Berhasil!" , 'status' => true, ]); } } // Untuk Ruang Laboratorium public function labelPostek($sample, $title, $name, $sex, $age, $barcode, $uhid, $bv, $collection_date, $birthdate) { $fixName = $this->splitName($name); $name1 = $fixName['line1']; $name2 = $fixName['line2']; if ($sex == 'M') { $jarak = '42'; } else { $jarak = '53'; } // Printer Posteck + 16 untuk sudut $sampleLabel ="N OD q400 Q200,10+0 I8,A,001 D10 A5,21,0,2,1,1,N,\"$title.$name1\" A$jarak,38,0,2,1,1,N,\"$name2\" A325,43,0,2,1,1,N,\"$sex {$age}Y\" A5,65,0,2,1,1,N,\"$sample\" A204,65,0,2,1,1,N,\"DoB: $birthdate\" B37,86,0,1,4,8,70,N,\"$barcode\" A115,161,0,2,1,1,N,\"SAM# $barcode\" A5,183,0,2,1,1,N,\"RM:$uhid\" A195,183,0,2,1,1,N,\"$collection_date\" P1 "; return $sampleLabel; } // Untuk Ruang Sampling public function labelZebra($sample, $title, $name, $sex, $age, $barcode, $uhid, $bv, $collection_date, $birthdate) { $fixName = $this->splitName($name); $name1 = $fixName['line1']; $name2 = $fixName['line2']; if ($sex == 'M') { $jarak = '42'; } else { $jarak = '53'; } $sampleLabel ="N OD q400 Q185,10+0 I8,A,001 D10 A4,3,0,2,1,1,N,\"$title.$name1\" A$jarak,20,0,2,1,1,N,\"$name2\" A325,25,0,2,1,1,N,\"$sex {$age}Y\" A4,47,0,2,1,1,N,\"$sample\" A204,47,0,2,1,1,N,\"DoB: $birthdate\" B37,68,0,1,4,8,70,N,\"$barcode\" A115,143,0,2,1,1,N,\"SAM# $barcode\" A4,165,0,2,1,1,N,\"RM:$uhid\" A195,165,0,2,1,1,N,\"$collection_date\" P1 "; return $sampleLabel; } public function printSingle($access, $sampletype) { $time = microtime(true); $logTime = date('d-m-Y_H_i_s', $time) . sprintf('_%03d', ($time - floor($time)) * 1000); $filename = "sample(".$sampletype.")_".$logTime; $role = session()->get('userrole'); $networkPath = ""; $db = \Config\Database::connect(); $sql = "select p.PATNUMBER as UHID, sr.HOSTORDERNUMBER as BV, concat (p.FIRSTNAMESK, ' ',p.NAME) as NAME, p.SEX, DATEDIFF(YEAR, BirthDate, GETDATE()) - CASE WHEN MONTH(BirthDate) > MONTH(GETDATE()) OR (MONTH(BirthDate) = MONTH(GETDATE()) AND DAY(BirthDate) > DAY(GETDATE())) THEN 1 ELSE 0 END AS AGE, ds.SHORTTEXT AS FULLTEXT, st.SAMPLETYPE+right(sr.SP_ACCESSNUMBER,5) as BARCODE, sr.COLLECTIONDATE, p.BIRTHDATE from SP_TUBES st left join SP_REQUESTS sr on st.SP_ACCESSNUMBER=sr.SP_ACCESSNUMBER left join PATIENTS p on p.PATID=sr.PATID left join DICT_SAMPLES_TYPES ds on ds.SAMPCODE=st.SAMPLETYPE where st.SP_ACCESSNUMBER='$access' AND ds.SAMPCODE = '$sampletype'"; $query = $db->query($sql); $results = $query->getResultArray(); $item = $results[0]; $uhid = ltrim($item['UHID'], '0'); $bv = $item['BV']; $sex = $item['SEX'] == 1 ? "M" : "F"; $title = $item['SEX'] == 1 ? "Mr" : "Mrs"; $name = $item['NAME']; if ($sampletype == '200'){ $sample = 'SERUM KIMIA'; } else if ($sampletype == '250'){ $sample = 'SERUM IMUN'; } else { $sample = $item['FULLTEXT']; } $barcode = $item['BARCODE']; $age = $item['AGE']; $birthdate = $item['BIRTHDATE']; $date = \DateTime::createFromFormat('Y-m-d H:i:s.v', $birthdate); if ($date) { $birthdate = $date->format('d/m/Y'); } else { $birthdate = ""; } $collectiondate = $item['COLLECTIONDATE']; $date = \DateTime::createFromFormat('Y-m-d H:i:s.v', $collectiondate); if ($date) { $collectiondate = $date->format('d/m/Y H:i'); } else { $collectiondate = ""; } // Ruang Analis Printer POSTEK C168/200s if ($role === 'admin' || $role === 'user') { $printer = $this->printerLab(); $label = $this->labelPostek($sample, $title, $name, $sex, $age, $barcode, $uhid, $bv, $collectiondate, $birthdate); } else if ($role === 'sampling') { $printer = $this->printerSampling(); $label = $this->labelZebra($sample, $title, $name, $sex, $age, $barcode, $uhid, $bv, $collectiondate, $birthdate); } else { // Eksekusi Kode Berikut Apabila Role Bukan Analis atau Sampling return $this->response->setJSON([ 'message' => "Akses Tidak Berwenang", 'error' => "Hak Akses Anda Tidak Dikenali", 'status' => false, ]); } // $folder = "C:/data/"; $folder = $printer[0]; $fullPath = $folder . $filename; // Tulis file ke folder tujuan if (!file_put_contents($fullPath, $label)) { //exec('net use '. $letterPath .' /delete 2>&1', $output, $return_var); // Eksekusi Kode Berikut Apabila Ada Error return $this->response->setJSON([ 'error' => $output, 'message' => "Gagal Melakukan Print, Mohon Ulangi Atau Cek Koneksi Printer Anda", 'status' => false, ]); } else { // Hapus Koneksi //exec('net use '. $letterPath .' /delete 2>&1', $output, $return_var); return $this->response->setJSON( [ 'message' => "Print Berhasil!" , 'status' => true, ]); } } public function printAll($access) { $db = \Config\Database::connect(); $sql = "select SAMPLETYPE from SP_TUBES where SP_ACCESSNUMBER='$access'"; $query = $db->query($sql); $results = $query->getResultArray(); foreach($results as $data) { $sample = $data['SAMPLETYPE']; $this->printSingle($access, $sample); } $this->labelCollection($access); } }