payment api

This commit is contained in:
2024-04-22 11:26:00 +07:00
parent fe486b1593
commit a424721d89
9 changed files with 506 additions and 24 deletions

View File

@@ -0,0 +1,235 @@
<?php
namespace Modules\Linksehat\Http\Controllers\Api;
use App\Helpers\Helper;
use App\Helpers\DuitkuHelper;
use App\Models\Organization;
use App\Models\PractitionerRole;
use App\Models\PaymentsMethods;
use App\Models\Livechat;
use App\Models\OLDLMS\User;
use Illuminate\Routing\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Http;
use Modules\Linksehat\Transformers\Livechat\LivechatResource;
use Illuminate\Support\Facades\Validator;
use DB;
use Str;
class LivechatController extends Controller
{
public function index(Request $request)
{
$user = User::with('detail')
->where('nId', $request->id)
->first();
return Helper::responseJson([
'livechat' => LivechatResource::make($user, $request),
]);
}
public function consultation(Request $request)
{
$dataMemberProfile = [];
$user = User::with('detail')
->where('nId', $request->member_id)
->first();
$memberProfile = User::with('detail')->where('nIDUser', $request->member_id)->get()->toArray();
if (count($memberProfile) > 0){
$urlAvatarDefault = $user->detail->nIDJenisKelamin == 1 ? 'https://linksehat.dev/assets/img/users/male-avatar.png' : 'https://linksehat.dev/assets/img/users/female-avatar.png';
$avatarMember = $user->detail->sImage ?? $urlAvatarDefault;
$relationship = DB::connection('oldlms')->table('tm_hubungan_keluarga')->where('nID', $user->nIDHubunganKeluarga)->first('sHubunganKeluarga');
$dataUser = [
'id' => $user->nID,
'name' => $user->sFirstName . ' ' . $user->sLastName,
'relationship' => $relationship ? $relationship->sHubunganKeluarga : '-',
'avatar' => $avatarMember
];
array_push($dataMemberProfile, $dataUser);
foreach($memberProfile as $m){
$urlAvatarDefault = $m['detail']['nIDJenisKelamin'] == 1 ? 'https://linksehat.dev/assets/img/users/male-avatar.png' : 'https://linksehat.dev/assets/img/users/female-avatar.png';
$avatarMember = $m['detail']['sImage'] ?? $urlAvatarDefault;
$relationship = DB::connection('oldlms')->table('tm_hubungan_keluarga')->where('nID', $m['nIDHubunganKeluarga'])->first('sHubunganKeluarga');
$data = [
'id' => $m['nID'],
'name' => $m['full_name'],
'relationship' => $relationship ? $relationship->sHubunganKeluarga : '-',
'avatar' => $avatarMember,
];
array_push($dataMemberProfile, $data);
}
} else {
$nID = $user->nIDUser ? $user->nIDUser : $user->nID;
if ($nID){
$memberProfile = User::with('detail')->where('nIDUser', $nID)->get()->toArray();
$dataMember = User::with('detail')->where('nID', $nID)->get()->first();
if ($user->detail){
$urlAvatarDefault = $user->detail->nIDJenisKelamin == 1 ? 'https://linksehat.dev/assets/img/users/male-avatar.png' : 'https://linksehat.dev/assets/img/users/female-avatar.png';
} else {
$urlAvatarDefault = 'https://linksehat.dev/assets/img/users/male-avatar.png';
}
$avatar = $user->detail->sImage ?? $urlAvatarDefault;
$avatarMember = $dataMember->detail->sImage ?? $urlAvatarDefault;
$relationship = DB::connection('oldlms')->table('tm_hubungan_keluarga')->where('nID', $user->detail->nIDHubunganKeluarga)->first('sHubunganKeluarga');
$dataUser = [
'id' => $dataMember->nID,
'name' => $dataMember->sFirstName . ' ' . $dataMember->sLastName,
'relationship' => 'Me',
'avatar' => $avatarMember
];
array_push($dataMemberProfile, $dataUser);
if (count($memberProfile) > 0){
foreach($memberProfile as $m){
$urlAvatarDefault = $m['detail']['nIDJenisKelamin'] == 1 ? 'https://linksehat.dev/assets/img/users/male-avatar.png' : 'https://linksehat.dev/assets/img/users/female-avatar.png';
$avatarMember = $m['detail']['sImage'] ?? $urlAvatarDefault;
$relationship = DB::connection('oldlms')->table('tm_hubungan_keluarga')->where('nID', $m['nIDHubunganKeluarga'])->first('sHubunganKeluarga');
$data = [
'id' => $m['nID'],
'name' => $m['full_name'],
'relationship' => $relationship->sHubunganKeluarga,
'avatar' => $avatarMember,
];
array_push( $dataMemberProfile, $data);
}
}
}
}
return Helper::responseJson([
'member' => $dataMemberProfile
]);
}
public function consultation_request(Request $request)
{
$data = [
'doctor_id' => $request->doctor_id,
'patient_id' => $request->patient_id,
'organization_id' => $request->organization_id,
'descriptions' => $request->descriptions
];
$validator = Validator::make($request->all(), [
'doctor_id' => 'required',
'patient_id' => 'required',
'descriptions' => 'required',
], [
'doctor_id.required' => 'ID Dokter harus diisi',
'patient_id.required' => 'ID Dokter harus diisi',
'descriptions.required' => 'Description harus diisi',
]);
if ($validator->fails()){
return Helper::responseJson(
status: 'Bad Request',
statusCode: 400,
message: $validator->errors()
);
} else {
// insert table livechat
$timezone = date_default_timezone_get();
$data['request_date'] = date('Y-m-d H:i:s');
$data['timezone'] = $timezone;
$data['uuid'] = (string) Str::orderedUuid();
$livechat = Livechat::create($data);
$doctor = $livechat->doctor;
$data = [
'id' => $livechat->id,
'request_date' => $livechat->request_date,
'image_path' =>'https'
];
return Helper::responseJson(data: $data);
}
}
public function consultation_request_show($id){
$livechat = Livechat::where('id', $id)->with(['doctor', 'practitioner'])->first();
$practitionerRole = PractitionerRole::where('id',$livechat->practitioner->id)->first();
$price = $practitionerRole->price ? $practitionerRole->price : 30000;
$discount = 0;
$adminFee = 5000;
$totalPay = $price + $adminFee - $discount;
$data = [
'id' => $livechat->id,
'code_transaksi' => $livechat->uuid,
'doctor_id' => $livechat->doctor_id,
'doctor_name' => $livechat->doctor->name,
'doctor_specialist' => 'Umum',
'price' => $price,
'admin_price' => $adminFee,
'promo' => [
[
'id' => 1,
'code' => 'SEHATBERSAMA',
'discount_percent' => 20
],
[
'id' => 2,
'code' => 'MARET MERIAH',
'discount_percent' => 5
],
],
'total' => $totalPay
];
return Helper::responseJson(data: $data);
}
public function consultation_payment_choose($id){
$livechat = Livechat::where('id', $id)->with(['doctor', 'practitioner'])->first();
$practitionerRole = PractitionerRole::where('id',$livechat->practitioner->id)->first();
$eWallet = PaymentsMethods::where(
[
'active' => 1,
'config_pmc_id' => 3,
])->get()->toArray();
$va = PaymentsMethods::where(
[
'active' => 1,
'config_pmc_id' => 2,
])->get()->toArray();
$payment = DuitkuHelper::paymentMethod();
$price = $practitionerRole->price ? $practitionerRole->price : 30000;
$discount = 0;
$adminFee = 5000;
$totalPay = $price + $adminFee - $discount;
$data = [
'id' => $livechat->id,
'code_transaksi' => $livechat->uuid,
'price' => $price,
'admin_price' => $adminFee,
'total' => $totalPay,
'payment_method' => [
'ewallet' => $eWallet,
'va' => $va
]
// 'payment_method' => json_decode($payment)
];
return Helper::responseJson(data: $data);
}
public function consultation_payment(Request $request){
$duitku = DuitkuHelper::paymentMethod();
dd($duitku);
}
}

View File

@@ -14,6 +14,7 @@ use Modules\Linksehat\Http\Controllers\Api\SearchController;
use Modules\Linksehat\Http\Controllers\Api\SpecialityController;
use Modules\Linksehat\Http\Controllers\Api\LinkingController;
use Modules\Linksehat\Http\Controllers\Api\HomeController;
use Modules\Linksehat\Http\Controllers\Api\LivechatController;
/*
|--------------------------------------------------------------------------
@@ -65,12 +66,6 @@ Route::prefix('linksehat')->group(function () {
Route::get('doctors/{id}', 'show')->name('doctors.show');
});
Route::controller(HomeController::class)->group(function () {
Route::get('home', 'index')->name('homes.index');
Route::get('home/hospital', 'listHospital')->name('homes.listHospital');
});
Route::middleware('auth:sanctum')->group(function () {
Route::get('profile/{id}', [ProfileController::class, 'index'])->name('profile');
Route::get('change-profile/{id}', [ProfileController::class, 'changeProfile'])->name('change-profile');
@@ -90,12 +85,26 @@ Route::prefix('linksehat')->group(function () {
Route::get('card/{member_id}', [LinkingController::class, 'card']);
Route::get('card/{member_id}/{log_id}', [LinkingController::class, 'card_detail']);
Route::controller(HomeController::class)->group(function () {
Route::get('home', 'index')->name('homes.index');
Route::get('home/hospital', 'listHospital')->name('homes.listHospital');
});
Route::controller(LivechatController::class)->group(function () {
Route::get('livechat', 'index')->name('livechats.index');
Route::get('livechat/consultation', 'consultation')->name('livechats.consultation');
Route::post('livechat/consultation-request', 'consultation_request')->name('livechats.consultation-request');
Route::get('livechat/consultation-request/{id}', 'consultation_request_show');
Route::get('livechat/consultation-request/consultation_payment_choose/{id}', 'consultation_payment_choose');
Route::post('livechat/consultation-payment', 'consultation_payment');
});
Route::post('create-invoice-duitku', [DuitkuController::class, 'createInvoice']);
Route::post('check-status-duitku', [DuitkuController::class, 'checkStatus']);
});
Route::post('create-invoice-duitku', [DuitkuController::class, 'createInvoice']);
Route::post('payment-method-duitku', [DuitkuController::class, 'paymentMethod']);
Route::post('check-status-duitku', [DuitkuController::class, 'checkStatus']);
Route::post('callback-duitku', [DuitkuController::class, 'callback']);
;});

View File

@@ -209,6 +209,7 @@ class HomeResource extends JsonResource
}
}
$data = [
'id' => $doctor['id'],
'full_name' => $doctor['person']['name'],
'specialist' => $specialist,
'experience' => $year,
@@ -270,28 +271,12 @@ class HomeResource extends JsonResource
'message' => $wellcome,
'full_name' => $this->sFirstName . ' '. $this->sLastName,
'avatar' => $avatar,
// 'member_type' => $this->nIDUser ? 'Dependent' : 'Principal',
// 'member_profile' => $dataMemberProfile,
'member_id' => $memberId,
'linking' => $linking,
'doctors_livechat' => [
$doctorsLivechat
],
'hospital' => $hospitalList
// [
// [
// 'name' => 'PRIMAYA HOSPITAL NORTH BEKASI',
// 'image' => '',
// 'range' => 6
// ],
// [
// 'name' => 'PRIMAYA HOSPITAL TANGERANG',
// 'image' => '',
// 'range' => 10
// ],
// ]
];
}
}

View File

@@ -0,0 +1,85 @@
<?php
namespace Modules\Linksehat\Transformers\Livechat;
use Illuminate\Http\Resources\Json\JsonResource;
use App\Models\Practitioner;
use App\Models\PractitionerRole;
use App\Models\Speciality;
use Illuminate\Support\Facades\Auth;
use Carbon\Carbon;
use App\Helpers\Helper;
use DB;
class LivechatResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request
* @return array
*/
protected $request;
protected $connection = 'oldlms';
public function __construct($resource, $request)
{
$this->request = $request;
parent::__construct($resource);
}
public function toArray($request)
{
// Specialis
$specialists = Speciality::all();
// Doctor livechat
$doctors = Practitioner::with('person', 'practitionerRoles.organization', 'practitionerRoles.speciality')
->whereHas('person', function ($query) {
$query->where('isOnline', 1); // hanya online
})
->get()
->toArray();
$doctorsLivechat = [];
foreach($doctors as $doctor){
$specialist = 'Umum';
$year = 0;
$price = 0;
if (!empty($doctor['person']['start_date_work'])) {
$starExperience = Carbon::parse($doctor['person']['start_date_work'])->format('Y-m-d');
$experience = Carbon::createFromFormat('Y-m-d', $starExperience);
$year = $experience->diffInYears(Carbon::now());
}
if ($doctor['practitioner_roles']) {
if ($doctor['practitioner_roles'][0]['speciality']){
$specialist = $doctor['practitioner_roles'][0]['speciality']['name'];
}
if ($doctor['practitioner_roles'][0]['price']){
$price = $doctor['practitioner_roles'][0]['price'];
}
}
$data = [
'id' => $doctor['id'],
'full_name' => $doctor['person']['name'],
'specialist' => $specialist,
'experience' => $year,
'review' => $doctor['person']['review'],
'price' => $price,
'price_real' => $price
];
array_push($doctorsLivechat, $data);
}
return [
'jadwal_weekday' => 'Senin - Jumat (08:00 - 17:30)',
'jadwal_weekend' => 'Sabtu (08:00 - 12:00)',
'doctors_livechat' => [
$doctorsLivechat
],
'specialist' => $specialists
];
}
}

View File

@@ -0,0 +1,33 @@
<?php
namespace App\Helpers;
class DuitkuHelper
{
public static function configuration()
{
$duitkuConfig = new \Duitku\Config(env('API_KEY_DUITKU'), env('CODE_MERCHANT_DUITKU'));
// false for production mode
// true for sandbox mode
$duitkuConfig->setSandboxMode(true);
// set sanitizer (default : true)
$duitkuConfig->setSanitizedMode(false);
// set log parameter (default : true)
$duitkuConfig->setDuitkuLogs(false);
return $duitkuConfig;
}
public static function paymentMethod()
{
$duitkuConfig = self::configuration();
try {
$paymentAmount = "10000"; //"YOUR_AMOUNT";
$paymentMethodList = \Duitku\Pop::getPaymentMethod($paymentAmount, $duitkuConfig);
header('Content-Type: application/json');
return $paymentMethodList;
} catch (Exception $e) {
return $e->getMessage();
}
}
}

37
app/Models/Livechat.php Normal file
View File

@@ -0,0 +1,37 @@
<?php
namespace App\Models;
use App\Traits\Blameable;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Livechat extends Model
{
use HasFactory, SoftDeletes, Blameable;
protected $fillable = [
'uuid',
'doctor_id',
'patient_id',
'organization_id',
'timezone',
'descriptions',
'payment_method',
'request_date',
'accept_date',
'start_date',
'end_date',
];
public function doctor() {
return $this->belongsTo(Person::class, 'doctor_id', 'id');
}
public function practitioner() {
return $this->belongsTo(Practitioner::class, 'doctor_id', 'id');
}
}

View File

@@ -0,0 +1,20 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class PaymentsMethods extends Model
{
use HasFactory;
protected $table = 'payment_methods';
protected $fillable = [
'config_pmc_id',
'code',
'name',
'image',
'timeout',
'active'
];
}

View File

@@ -0,0 +1,46 @@
<?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('livechats', function (Blueprint $table) {
$table->id();
$table->foreignId('doctor_id');
$table->foreignId('patient_id');
$table->foreignId('organization_id');
$table->string('timezone')->nullable()->default(null);
$table->text('descriptions');
$table->string('payment_method');
$table->dateTime('request_date')->nullable();
$table->dateTime('accept_date')->nullable();
$table->dateTime('start_date')->nullable();
$table->dateTime('end_date')->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('livechats');
}
};

View File

@@ -0,0 +1,32 @@
<?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::table('livechats', function (Blueprint $table) {
$table->string('uuid')->after('id');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('livechats', function (Blueprint $table) {
$table->dropColumn('uuid');
});
}
};