This commit is contained in:
R
2022-09-17 00:51:02 +07:00
parent 300b53942d
commit a9f29cd19d
28 changed files with 1122 additions and 13 deletions

View File

@@ -15,11 +15,13 @@ return new class extends Migration
{
Schema::create('organizations', function (Blueprint $table) {
$table->id();
$table->string('code')->unique();
$table->string('name');
$table->string('type')->nullable();
$table->string('status')->nullable()->default('active');
$table->text('description')->nullable();
$table->foreignId('part_of')->nullable();
$table->foreignId('main_address_id')->nullable();
$table->timestamps();
$table->softDeletes();

View File

@@ -27,7 +27,16 @@ return new class extends Migration
$table->string('postal_code')->nullable();
$table->string('rt')->nullable();
$table->string('rw')->nullable();
$table->string('lat')->nullable();
$table->string('lng')->nullable();
$table->dateTime('period_start')->nullable();
$table->dateTime('period_end')->nullable();
$table->timestamps();
$table->softDeletes();
$table->foreignId('created_by')->nullable();
$table->foreignId('updated_by')->nullable();
$table->foreignId('deleted_by')->nullable();
});
}

View File

@@ -0,0 +1,41 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('metas', function (Blueprint $table) {
$table->id();
$table->morphs('metaable');
$table->string('system')->nullable()->index();
$table->string('type')->index();
$table->text('value')->nullable();
$table->timestamps();
$table->softDeletes();
$table->foreignId('created_by')->nullable();
$table->foreignId('updated_by')->nullable();
$table->foreignId('deleted_by')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('metas');
}
};

View File

@@ -0,0 +1,37 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('practitioners', function (Blueprint $table) {
$table->id();
$table->foreignId('person_id');
$table->timestamps();
$table->softDeletes();
$table->foreignId('created_by')->nullable();
$table->foreignId('updated_by')->nullable();
$table->foreignId('deleted_by')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('practitioners');
}
};

View File

@@ -0,0 +1,47 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('persons', function (Blueprint $table) {
$table->id();
$table->string('nik')->nullable();
$table->string('name_prefix')->nullable();
$table->string('name')->nullable();
$table->string('name_suffix')->nullable();
$table->string('gender')->nullable();
$table->dateTime('birth_date')->nullable();
$table->boolean('is_deceased')->default(0);
$table->dateTime('deceased_at')->nullable();
$table->string('marital_status')->nullable();
$table->foreignId('main_address_id')->nullable();
$table->timestamps();
$table->softDeletes();
$table->foreignId('created_by')->nullable();
$table->foreignId('updated_by')->nullable();
$table->foreignId('deleted_by')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('persons');
}
};

View File

@@ -0,0 +1,44 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('practitioner_roles', function (Blueprint $table) {
$table->id();
$table->foreignId('practitioner_id')->index();
$table->foreignId('organization_id')->index();
$table->foreignId('speciality_id')->nullable()->index();
$table->foreignId('identifier_id')->nullable()->index();
$table->dateTime('period_start')->nullable();
$table->dateTime('period_end')->nullable();
$table->boolean('active')->default(true);
$table->timestamps();
$table->softDeletes();
$table->foreignId('created_by')->nullable()->index();
$table->foreignId('updated_by')->nullable()->index();
$table->foreignId('deleted_by')->nullable()->index();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('practitioner_roles');
}
};

View File

@@ -0,0 +1,65 @@
<?php
namespace Database\Seeders;
use App\Models\Organization;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Http;
class OrganizationSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$response = Http::get('http://localhost:8001/temp/organizations');
foreach ($response->json()['organizations'] as $organization) {
$newOrganization = Organization::updateOrCreate([
'code' => 'ORG000'.$organization['code'],
],[
'code' => 'ORG000'.$organization['code'],
'name' => $organization['name'],
'type' => 'hospital',
]);
$newAddress = $newOrganization->addresses()->updateOrCreate([
'id' => $newOrganization->main_address_id
],[
'use' => 'both',
'type' => 'physical',
'text' => $organization['address'],
'lat' => $organization['lat'],
'lng' => $organization['lng'],
]);
$newOrganization->main_address_id = $newAddress->id;
$newOrganization->save();
$newOrganization->metas()->updateOrCreate([
'type' => 'KodeRS',
], [
'system' => 'primaya-his',
'type' => 'KodeRS',
'value' => $organization['code']
]);
$newOrganization->metas()->updateOrCreate([
'type' => 'phone',
],[
'system' => 'default',
'type' => 'phone',
'value' => $organization['phone']
]);
$newOrganization->metas()->updateOrCreate([
'type' => 'timezone',
],['system' => 'default',
'type' => 'timezone',
'value' => $organization['timezone']
]);
}
}
}

View File

@@ -0,0 +1,141 @@
<?php
namespace Database\Seeders;
use App\Models\Organization;
use App\Models\Person;
use App\Models\Practitioner;
use App\Models\PractitionerRole;
use App\Models\Speciality;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Http;
class PractitionerSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$organizations = Organization::with(['metas'])->get();
$specialities = Speciality::pluck('id', 'name')->toArray();
foreach ($organizations as $organization) {
$response = Http::get('http://localhost:8001/temp/practitioners?code='.$organization->meta->KodeRS);
foreach ($response->json()['practitioners'] as $practitioner) {
$practitioner = json_decode(json_encode($practitioner));
if (!empty($practitioner->meta->NIK)) {
$newPerson = Person::updateOrCreate([
'nik' => $practitioner->meta->NIK
], [
'nik' => $practitioner->meta->NIK,
'name' => $practitioner->doctor->name,
'gender' => $practitioner->doctor->gender,
'birth_date' => !empty($practitioner->meta->TanggalLahir) && $practitioner->meta->TanggalLahir != '0000-00-00' ? $practitioner->meta->TanggalLahir : null,
]);
} else {
$newPerson = Person::create([
'name' => $practitioner->doctor->name,
'gender' => $practitioner->doctor->gender,
'birth_date' => !empty($practitioner->meta->TanggalLahir) && $practitioner->meta->TanggalLahir != '0000-00-00' ? $practitioner->meta->TanggalLahir : null,
]);
}
$newPerson->addresses()->create([
'use' => 'both',
'type' => 'physical',
'text' => $practitioner->doctor->address,
]);
$newPractitioner = Practitioner::updateOrCreate([
'person_id' => $newPerson->id
],[
'person_id' => $newPerson->id
]);
$newPractitioner->metas()->create([
'system' => 'default',
'type' => 'medical_treatment',
'value' => $practitioner->doctor->meta->MedicalTreatment ?? null,
]);
$newPractitioner->metas()->create([
'system' => 'default',
'type' => 'education',
'value' => $practitioner->doctor->meta->Education ?? null,
]);
$newPractitioner->metas()->create([
'system' => 'default',
'type' => 'award',
'value' => $practitioner->doctor->meta->Award ?? null,
]);
$newPractitioner->metas()->create([
'system' => 'default',
'type' => 'work_experience',
'value' => $practitioner->doctor->meta->WorkExperience ?? null,
]);
$newPractitioner->metas()->create([
'system' => 'primaya-his',
'type' => 'alias',
'value' => $practitioner->meta->Sapaan ?? null,
]);
$newPractitioner->metas()->create([
'system' => 'primaya-his',
'type' => 'Keilmuan',
'value' => $practitioner->meta->Keilmuan ?? null,
]);
$newPractitioner->metas()->create([
'system' => 'primaya-his',
'type' => 'description',
'value' => $practitioner->doctor->description ?? null,
]);
$newPractitionerRole = PractitionerRole::create([
'practitioner_id' => $newPractitioner->id,
'organization_id' => $organization->id,
'speciality_id' => $practitioner->speciality ? ($specialities[$practitioner->speciality->name] ?? null) : null,
'active' => 1,
]);
if (empty($newPractitionerRole->speciality_id)) {
$newPractitionerRole->metas()->updateOrCreate([
'type' => 'speciality_code',
],[
'system' => 'default',
'type' => 'speciality_code',
'value' => $practitioner->speciality->code ?? null,
]);
$newPractitionerRole->metas()->updateOrCreate([
'type' => 'speciality',
],[
'system' => 'default',
'type' => 'speciality',
'value' => $practitioner->speciality->name ?? null,
]);
$newPractitionerRole->metas()->updateOrCreate([
'type' => 'speciality_image',
],[
'system' => 'default',
'type' => 'speciality_image',
'value' => $practitioner->speciality->name ?? null,
]);
}
$newPractitionerRole->metas()->updateOrCreate([
'type' => 'primaya-his',
'type' => 'DokterID',
],[
'system' => 'primaya-his',
'type' => 'DokterID',
'value' => $practitioner->meta->DokterID ?? null,
]);
}
}
}
}