Update Formularium
This commit is contained in:
181
database/seeders/DrugSeeder.php
Normal file
181
database/seeders/DrugSeeder.php
Normal file
@@ -0,0 +1,181 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Models\Brand;
|
||||
use App\Models\Category;
|
||||
use App\Models\Drug;
|
||||
use App\Models\DrugCategories;
|
||||
use App\Models\DrugCategory;
|
||||
use App\Models\DrugComposition;
|
||||
use App\Models\DrugUnit;
|
||||
use App\Models\Ingredient;
|
||||
use App\Models\Organization;
|
||||
use App\Models\Unit;
|
||||
use Box\Spout\Reader\Common\Creator\ReaderEntityFactory;
|
||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class DrugSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
$file_path = resource_path('files/daftar_masteritem_ccp_14-06-2022.xlsx');
|
||||
$reader = ReaderEntityFactory::createReaderFromFile($file_path);
|
||||
$reader->open($file_path);
|
||||
|
||||
$chunks = [];
|
||||
$time = now();
|
||||
$isData = false;
|
||||
$cell_map = [ // Urutan kolom di excel
|
||||
'no',
|
||||
'code',
|
||||
'name',
|
||||
'group',
|
||||
'kategori',
|
||||
'satuan',
|
||||
'nama_cetak',
|
||||
'golongan',
|
||||
'sub_golongan',
|
||||
'komposisi',
|
||||
'sediaan',
|
||||
'brand',
|
||||
'strength',
|
||||
'satuan_strength',
|
||||
'pabrikan',
|
||||
'jenis',
|
||||
'otc',
|
||||
'resep',
|
||||
'obat_terlarang',
|
||||
'pemakaian',
|
||||
'essential',
|
||||
'live_saving'
|
||||
];
|
||||
foreach ($reader->getSheetIterator() as $sheet) {
|
||||
foreach ($sheet->getRowIterator() as $index => $row) {
|
||||
if ($index >= 6) {
|
||||
$row_data = [];
|
||||
foreach ($row->getCells() as $cell_index => $cell) {
|
||||
$row_data[$cell_map[$cell_index]] = $cell->getValue();
|
||||
}
|
||||
$brand = !empty($row_data['golongan']) ? Brand::firstOrCreate([
|
||||
'name' => $row_data['brand']
|
||||
], [
|
||||
'name' => $row_data['brand']
|
||||
]) : null;
|
||||
|
||||
$manufacturer = Organization::firstOrCreate([
|
||||
'name' => $row_data['pabrikan']
|
||||
], [
|
||||
'name' => $row_data['pabrikan'],
|
||||
'type' => 'manufacturer'
|
||||
]);
|
||||
|
||||
if (in_array($row_data['golongan'], ['VITAMINS & MINERALS', 'NUTRITIONS'])) {
|
||||
$type = 'vitamin';
|
||||
} else {
|
||||
$type = 'drug';
|
||||
}
|
||||
|
||||
if (!empty($row_data['komposisi'])) {
|
||||
$ingredient = Ingredient::firstOrCreate([
|
||||
'substance' => $row_data['komposisi']
|
||||
], [
|
||||
'substance' => $row_data['komposisi']
|
||||
]);
|
||||
} else {
|
||||
$ingredient = null;
|
||||
}
|
||||
|
||||
if (!empty($row_data['sediaan'])) {
|
||||
$sediaan = Unit::firstOrCreate([
|
||||
'name' => $row_data['sediaan']
|
||||
], [
|
||||
'name' => $row_data['sediaan']
|
||||
]);
|
||||
} else {
|
||||
$sediaan = null;
|
||||
}
|
||||
|
||||
$golongan = !empty($row_data['golongan']) ? Category::firstOrCreate([
|
||||
'name' => $row_data['golongan']
|
||||
], [
|
||||
'name' => $row_data['golongan']
|
||||
]) : null;
|
||||
|
||||
$sub_golongan = !empty($row_data['sub_golongan']) ? Category::firstOrCreate([
|
||||
'name' => $row_data['sub_golongan']
|
||||
], [
|
||||
'name' => $row_data['sub_golongan']
|
||||
]) : null;
|
||||
|
||||
$new_drug_data = [
|
||||
'name' => $row_data['name'],
|
||||
'generic_name' => $row_data['nama_cetak'],
|
||||
'code' => $row_data['code'],
|
||||
'description' => null,
|
||||
'brand_id' => $brand->id ?? null,
|
||||
// 'manufacturer_id' => $manufacturer->id ?? null,
|
||||
'mims_class' => null,
|
||||
'indications' => null,
|
||||
'atc_code' => null,
|
||||
'segmentation' => null,
|
||||
'type' => $type,
|
||||
'dosage' => '',
|
||||
'remark' => '',
|
||||
'selling_unit_id' => $sediaan->id ?? null,
|
||||
'status' => 'active',
|
||||
'unit_id' => $sediaan->id ?? null,
|
||||
];
|
||||
$drug = Drug::create($new_drug_data);
|
||||
$drug->identifiers()->create([
|
||||
'use' => 'usual',
|
||||
'type' => 'CCP',
|
||||
'value' => $row_data['code'],
|
||||
]);
|
||||
|
||||
if ($ingredient) {
|
||||
DrugComposition::create([
|
||||
'drug_id' => $drug->id,
|
||||
'ingredient_id' => $ingredient->id,
|
||||
]);
|
||||
}
|
||||
|
||||
if ($golongan) {
|
||||
DrugCategory::create([
|
||||
'drug_id' => $drug->id,
|
||||
'category_id' => $golongan->id,
|
||||
]);
|
||||
}
|
||||
|
||||
if ($sub_golongan) {
|
||||
DrugCategory::create([
|
||||
'drug_id' => $drug->id,
|
||||
'category_id' => $sub_golongan->id,
|
||||
]);
|
||||
}
|
||||
|
||||
if ($manufacturer) {
|
||||
$drug->manufacturers()->attach($manufacturer->id);
|
||||
}
|
||||
|
||||
// $chunks[] = $row_data;
|
||||
}
|
||||
|
||||
// if ($chunks && count($chunks) == 1000) {
|
||||
// Icd::insert($chunks);
|
||||
// $chunks = [];
|
||||
// }
|
||||
}
|
||||
}
|
||||
// if ($chunks && count($chunks) > 0) {
|
||||
// Icd::insert($chunks);
|
||||
// $chunks = [];
|
||||
// }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user