formulariumService = $formulariumService; } public function index(Request $request, $id) { if ($request->search) { return Formularium::when($request->search ?? null, function ($formularium) use ($request, $id) { $formularium->where('formularium_template_id', $id) ->where('name', 'LIKE', '%' . $request->search . '%') ->orWhere('code', 'LIKE', '%' . $request->search . '%'); })->paginate(15); } else { $formulariums = Formularium::query() // ->filter($request->toArray()) ->where('formularium_template_id', $id) ->orderBy('name', 'ASC') ->paginate(15); return $formulariums; } return $formulariums; } /** * Show the form for creating a new resource. * @return Renderable */ public function create() { return view('internal::create'); } /** * Store a newly created resource in storage. * @param Request $request * @return Renderable */ public function store(Request $request, $id) { $request->validate([ 'name' => 'required|string|max:255', 'file' => 'optional|file|mimes:xlsx,xls', ]); $formularium = Formularium::create($request->all()); return $formularium; } /** * Show the specified resource. * @param int $id * @return Renderable */ public function show($id) { return view('internal::show'); } /** * Show the form for editing the specified resource. * @param int $id * @return Renderable */ public function edit($id) { return view('internal::edit'); } /** * Update the specified resource in storage. * @param Request $request * @param int $id * @return Renderable */ public function update(Request $request, $id) { // } /** * Remove the specified resource from storage. * @param int $id * @return Renderable */ public function destroy($id) { // } public function import(Request $request, $id) { $request->validate([ 'file' => 'required|file|mimes:xls,xlsx,csv,txt', ]); // dd($request->toArray()); $file_name = now()->getPreciseTimestamp(3).'-'.$request->file('file')->getClientOriginalName(); $file = $request->file('file')->storeAs('temp', $file_name, 'public'); // 🚀 Paksa simpan ke local/public // $importLog = $corporate->importLogs()->create([ // 'type' => 'diagnosis-exclusions', // 'file_path' => $file, // 'status' => 'pending', // 'progress' => 0, // ]); $import = new ImportService(); $import->read(Storage::disk('public')->path('temp/'.$file_name)); $import->write(Storage::disk('public')->path('temp/result-'.$file_name), 'xsls'); foreach ($import->sheetsIterator() as $sheetIndex => $sheet) { $doc_headers_indexes = []; foreach ($sheet->getRowIterator() as $index => $row) { if ($index == 1) { // First Row Must be Header foreach ($row->getCells() as $index => $cell) { $title = $cell->getValue(); $title = preg_replace( "/\r|\n/", " ", $title ); $title = preg_replace('/\xc2\xa0/', " ", $title ); $title = rtrim($title); $title = ltrim($title); $doc_headers_indexes[$index] = $title; } // Write Header to File $result_headers = array_merge($doc_headers_indexes, ['Ingest Code', 'Ingest Note']); $import->addArrayToRow($result_headers); // TODO Validate if First Row not Header } else { // Next Row Should be Data $row_data = []; $row_map = [ 0 => 'code', 1 => 'name', 2 => 'description', 3 => 'manufacturer', 4 => 'category_name', 5 => 'kategori_obat', 6 => 'uom', 7 => 'general_indication', 8 => 'composition', 9 => 'atc_code', 10 => 'class', 11 => 'bpom_registration', 12 => 'classifications', 13 => 'cat_for', ]; foreach ($row->getCells() as $header_index => $cell) { if (isset($row_map[$header_index])) { $value = $cell->getValue(); $value = preg_replace( "/\r|\n/", " ", $value ); $value = preg_replace('/\xc2\xa0/', " ", $value ); $value = rtrim($value); $value = ltrim($value); $row_data[$row_map[$header_index]] = $cell->getValue(); } } try { // Process the Row Data if ( // empty($row_data['code']) && // empty($row_data['description']) && empty($row_data['code']) && empty($row_data['name']) && empty($row_data['description']) && empty($row_data['manufacturer']) && empty($row_data['category_name']) && empty($row_data['kategori_obat']) && empty($row_data['uom']) && empty($row_data['general_indication']) && empty($row_data['composition']) && empty($row_data['atc_code']) && empty($row_data['class']) && empty($row_data['bpom_registration']) && empty($row_data['classifications']) && empty($row_data['cat_for']) ) { continue; } // Save the Row $formulariumService = new FormulariumService(); $formulariumService->handleFormuariumTemplateRow($row_data, $id); // Write Success Result to File $import->addArrayToRow(array_merge($row_data, [ 'Ingest Code' => 200, 'Ingest Note' => 'Success', ]), $sheet->getName()); } catch (ImportRowException $e) { // Write Data Validation Error to File $import->addArrayToRow(array_merge($row_data, [ 'Ingest Code' => $e->getCode(), 'Ingest Note' => $e->getMessage(), ]), $sheet->getName()); } catch (\Exception $e) { throw new \Exception($e); // Write Server Error to File $import->addArrayToRow(array_merge($row_data, [ 'Ingest Code' => 500, 'Ingest Note' => env('APP_DEBUG') ? $e->getMessage() : 'Server Error', ]), $sheet->getName()); } } } break; // Only Read First Row } $import->reader->close(); Storage::delete('temp/'.$file_name); $import->writer->close(); return [ // 'total_successed_row' => $imported_plan_data, // 'total_failed_row' => count($failed_plan_data), // 'failed_row' => $failed_plan_data, 'result_file' => [ 'url' => Storage::disk('public')->url('temp/result-'.$file_name), 'name' => 'result-'.$file_name, ] ]; } public function generateFormulariumList(Request $request) { // Mendapatkan data yang akan diekspor (misalnya, dari database) $data = Formularium::get()->toArray(); // Membuat penulis entitas Spout $writer = WriterEntityFactory::createXLSXWriter(); // Membuka penulis untuk menulis ke file $writer->openToFile(public_path('files/TemplateFormulariumList.xlsx')); /** Create a style with the StyleBuilder */ $style = (new StyleBuilder()) ->setFontBold() ->build(); // Menulis header kolom $headers_map_to_table_fields = $this->formulariumService->listing_doc_headers; $headerRow = WriterEntityFactory::createRowFromArray($headers_map_to_table_fields, $style); $writer->addRow($headerRow); // Menulis data if (!empty($data)) { foreach ($data as $item) { $rowData = [ $item['code'], // code $item['name'], // name $item['description'], // Description $item['manufacturer'], // manufacturer $item['category_name'], // category_name $item['kategori_obat'], // kategori_obat $item['uom'], // uom $item['general_indication'], // Description $item['composition'], // composition $item['atc_code'], // atc_code $item['class'], // class $item['bpom_registration'], // bpom_registration $item['classifications'], // classifications $item['cat_for'], // cat_for ]; $row = WriterEntityFactory::createRowFromArray($rowData); $writer->addRow($row); } } // Menutup penulis $writer->close(); // Mengembalikan response untuk mengunduh file $filePath = public_path('files/TemplateFormulariumList.xlsx'); return Helper::responseJson([ 'file_name' => "Formularium List " . date('Y-m-d h:i:s'), "file_url" => url('files/TemplateFormulariumList.xlsx') ]); } }