update patch 1

This commit is contained in:
fiqhpratama
2024-12-02 01:18:34 +07:00
parent 453d9bb470
commit 25026b0a85
3380 changed files with 103529 additions and 363623 deletions
+56
View File
@@ -0,0 +1,56 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Agent;
use Illuminate\Support\Facades\DB;
use Yajra\DataTables\Facades\DataTables;
class AgentController extends Controller
{
public function index(Request $request)
{
$query = DB::table('ADMIN_SKT.TM_AGEN AS A')
->leftJoin('ADMIN_SKT.D_KTR AS K', 'A.KTR_ADMINISTRASI', '=', 'K.KDKTR')
->leftJoin('ADMIN_SKT.RF_JABATAN_AGEN AS J', 'A.KD_JABATAN_AGEN', '=', 'J.KD_JABATAN')
->select(
'A.NO_AGEN',
'A.NAMA',
'J.SINGKATAN_JABATAN',
'K.KDKTR',
'K.NMKTR',
DB::raw("TO_CHAR(A.TGL_LISENSI_AKHIR, 'DD-MM-YYYY') AS TGL_LISENSI_AKHIR")
);
// Filter based on search input
if ($request->filled('no_agen')) {
$query->where('A.NO_AGEN', 'like', '%' . $request->input('no_agen') . '%');
}
if ($request->filled('nama')) {
$query->where(DB::raw('LOWER(A.NAMA)'), 'like', '%' . strtolower($request->input('nama')) . '%');
}
if ($request->filled('title')) {
$query->where(DB::raw('LOWER(J.SINGKATAN_JABATAN)'), 'like', '%' . strtolower($request->input('title')) . '%');
}
if ($request->filled('kpa_code')) {
$query->where('K.KDKTR', 'like', '%' . $request->input('kpa_code') . '%');
}
if ($request->filled('kpa_name')) {
$query->where('K.NMKTR', 'like', '%' . $request->input('kpa_name') . '%');
}
// Add condition for TGL_LISENSI_AKHIR
$query->where('A.TGL_LISENSI_AKHIR', '>=', DB::raw('SYSDATE'));
// Sort and get results
$query->orderBy('A.NO_AGEN', 'asc');
$results = $query->get();
return DataTables::of($results)->make(true); // Get the final results
// Uncomment the line below to return results in JSON format if needed
// return response()->json($results);
}
}
@@ -0,0 +1,40 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\ConfirmsPasswords;
class ConfirmPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Confirm Password Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password confirmations and
| uses a simple trait to include the behavior. You're free to explore
| this trait and override any functions that require customization.
|
*/
use ConfirmsPasswords;
/**
* Where to redirect users when the intended url fails.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
}
@@ -0,0 +1,22 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
class ForgotPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Password Reset Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password reset emails and
| includes a trait which assists in sending these notifications from
| your application to your users. Feel free to explore this trait.
|
*/
use SendsPasswordResetEmails;
}
@@ -0,0 +1,42 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
}
@@ -0,0 +1,72 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use App\User;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
class RegisterController extends Controller
{
/*
|--------------------------------------------------------------------------
| Register Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users as well as their
| validation and creation. By default this controller uses a trait to
| provide this functionality without requiring any additional code.
|
*/
use RegistersUsers;
/**
* Where to redirect users after registration.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\User
*/
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
}
}
@@ -0,0 +1,30 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\ResetsPasswords;
class ResetPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Password Reset Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password reset requests
| and uses a simple trait to include this behavior. You're free to
| explore this trait and override any methods you wish to tweak.
|
*/
use ResetsPasswords;
/**
* Where to redirect users after resetting their password.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
}
@@ -0,0 +1,42 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\VerifiesEmails;
class VerificationController extends Controller
{
/*
|--------------------------------------------------------------------------
| Email Verification Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling email verification for any
| user that recently registered with the application. Emails may also
| be re-sent if the user didn't receive the original email message.
|
*/
use VerifiesEmails;
/**
* Where to redirect users after verification.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
$this->middleware('signed')->only('verify');
$this->middleware('throttle:6,1')->only('verify', 'resend');
}
}
@@ -0,0 +1,119 @@
<?php
declare(strict_types=1);
namespace App\Http\Controllers\Backend;
use App\Http\Controllers\Controller;
use App\Http\Requests\AdminRequest;
use App\Models\Admin;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\Hash;
use Spatie\Permission\Models\Role;
class AdminsController extends Controller
{
public function index(): Renderable
{
$this->checkAuthorization(auth()->user(), ['admin.view']);
$pageInfo = [
'title' => 'User Access List',
'sub_title' => 'List User Access System',
'path' => url()->current()
];
return view('backend.pages.admins.index', [
'admins' => Admin::all(),
'pageInfo' => $pageInfo
]);
}
public function create(): Renderable
{
$this->checkAuthorization(auth()->user(), ['admin.create']);
$pageInfo = [
'title' => 'Create User Access',
'sub_title' => 'Create new User',
'path' => url()->current()
];
return view('backend.pages.admins.create', [
'roles' => Role::all(),
'pageInfo' => $pageInfo
]);
}
public function store(AdminRequest $request): RedirectResponse
{
$this->checkAuthorization(auth()->user(), ['admin.create']);
$admin = new Admin();
$admin->name = $request->name;
$admin->password = Hash::make($request->password);
$admin->username = $request->username;
$admin->email = $request->email;
$admin->save();
if ($request->roles) {
$admin->assignRole($request->roles);
}
session()->flash('success', __('Admin has been created.'));
return redirect()->route('admin.admins.index');
}
public function edit(int $id): Renderable
{
$this->checkAuthorization(auth()->user(), ['admin.edit']);
$pageInfo = [
'title' => 'Edit User Access',
'sub_title' => 'Update User Access data',
'path' => url()->current()
];
$admin = Admin::findOrFail($id);
return view('backend.pages.admins.edit', [
'admin' => $admin,
'roles' => Role::all(),
'pageInfo' => $pageInfo
]);
}
public function update(AdminRequest $request, int $id): RedirectResponse
{
$this->checkAuthorization(auth()->user(), ['admin.edit']);
$admin = Admin::findOrFail($id);
$admin->name = $request->name;
$admin->email = $request->email;
$admin->username = $request->username;
if ($request->password) {
$admin->password = Hash::make($request->password);
}
$admin->save();
$admin->roles()->detach();
if ($request->roles) {
$admin->assignRole($request->roles);
}
session()->flash('success', 'Admin has been updated.');
return back();
}
public function destroy(int $id): RedirectResponse
{
$this->checkAuthorization(auth()->user(), ['admin.delete']);
$admin = Admin::findOrFail($id);
$admin->delete();
session()->flash('success', 'Admin has been deleted.');
return back();
}
}
@@ -0,0 +1,40 @@
<?php
namespace App\Http\Controllers\Backend\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\ConfirmsPasswords;
class ConfirmPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Confirm Password Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password confirmations and
| uses a simple trait to include the behavior. You're free to explore
| this trait and override any functions that require customization.
|
*/
use ConfirmsPasswords;
/**
* Where to redirect users when the intended url fails.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
}
@@ -0,0 +1,22 @@
<?php
namespace App\Http\Controllers\Backend\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
class ForgotPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Password Reset Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password reset emails and
| includes a trait which assists in sending these notifications from
| your application to your users. Feel free to explore this trait.
|
*/
use SendsPasswordResetEmails;
}
@@ -0,0 +1,119 @@
<?php
namespace App\Http\Controllers\Backend\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Exception;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo;
/**
* show login form for admin guard
*
* @return void
*/
public function showLoginForm()
{
return view('backend.auth.login');
}
protected function redirectTo()
{
if (Auth::guard('admin')->check()) {
// Redirect admins to their dashboard
return RouteServiceProvider::ADMIN_DASHBOARD;
}
if (Auth::guard('web')->check()) {
// Redirect users to the home page
return redirect()->route('trx_order_elevation.index');
}
// Default redirection (optional)
return '/login';
}
/**
* login admin
*
* @param Request $request
* @return void
*/
public function login(Request $request)
{
// Validate Login Data
$request->validate([
'email' => 'required|max:50',
'password' => 'required',
]);
// Attempt to login
if (Auth::guard('admin')->attempt(['email' => $request->email, 'password' => $request->password], $request->remember)) {
session()->flash('success', 'Successully Logged in !');
Session::put('current_guard', 'admin');
return redirect()->route('admin.dashboard');
} else if (Auth::guard('admin')->attempt(['username' => $request->email, 'password' => $request->password], $request->remember)) {
session()->flash('success', 'Successully Logged in !');
Session::put('current_guard', 'admin');
return redirect()->route('admin.dashboard');
}else if (Auth::guard('web')->attempt(['username' => $request->email, 'password' => $request->password], $request->remember)) {
session()->flash('success', 'Successully Logged in !');
Session::put('current_guard', 'web');
return redirect()->route('admin.dashboard');
}else if (Auth::guard('web')->attempt(['email' => $request->email, 'password' => $request->password], $request->remember)) {
session()->flash('success', 'Successully Logged in !');
Session::put('current_guard', 'web');
return redirect()->route('admin.dashboard');
}
// error
session()->flash('error', 'Invalid email and password..');
return back();
}
/**
* logout admin guard
*
* @return void
*/
public function logout()
{
try{
Auth::guard('admin')->logout();
return redirect()->route('admin.login');
}catch (Exception $e) {
Auth::guard('web')->logout();
return redirect()->route('admin.login');
}
}
}
@@ -0,0 +1,30 @@
<?php
namespace App\Http\Controllers\Backend\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\ResetsPasswords;
class ResetPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Password Reset Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password reset requests
| and uses a simple trait to include this behavior. You're free to
| explore this trait and override any methods you wish to tweak.
|
*/
use ResetsPasswords;
/**
* Where to redirect users after resetting their password.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
}
@@ -0,0 +1,26 @@
<?php
declare(strict_types=1);
namespace App\Http\Controllers\Backend;
use App\Http\Controllers\Controller;
use App\Models\Admin;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
class DashboardController extends Controller
{
public function index()
{
return view(
'backend.pages.dashboard.index',
[
'total_admins' => Admin::count(),
'total_roles' => Role::count(),
'total_permissions' => Permission::count(),
]
);
}
}
@@ -0,0 +1,109 @@
<?php
namespace App\Http\Controllers\Backend;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
class MenuRoleController extends Controller
{
public function index($roleId)
{
// Ambil semua data dari tabel menus
$menus = DB::table('menus')
->orderBy('parent_id', 'ASC')
->orderBy('order', 'ASC')
->get();
$savedMenuIds = DB::table('role_menu')
->where('role_id', $roleId)
->pluck('menu_id')
->toArray();
// Jika $savedMenuIds null, set ke array kosong
if (is_null($savedMenuIds)) {
$savedMenuIds = [];
}
// Membentuk struktur tree
$menuTree = $this->buildTree($menus, $savedMenuIds);
$pageInfo = [
'title' => 'Assign Role Menu',
'sub_title' => 'Assign Role in Menu',
'path' => url()->current()
];
return view('backend.pages.menurole.index', [
'menuTree' => $menuTree,
'pageInfo' => $pageInfo,
'role_id' => $roleId
]);
}
private function buildTree($menus, $savedMenuIds, $parentId = 0)
{
$tree = [];
foreach ($menus as $menu) {
if ($menu->parent_id == $parentId) {
$children = $this->buildTree($menus, $savedMenuIds, $menu->id);
$node = [
'id' => $menu->id,
'text' => $menu->title,
'attributes' => ['url' => $menu->url],
'checked' => in_array($menu->id, $savedMenuIds)
];
if ($children) {
$node['children'] = $children;
}
$tree[] = $node;
}
}
return $tree;
}
public function saveMenu(Request $request)
{
$request->validate([
'menu_ids' => 'required',
'role_id' => 'required|integer'
]);
$selectedMenuIds = json_decode($request->input('menu_ids', '[]'));
$roleId = $request->input('role_id');
DB::beginTransaction();
try {
DB::table('role_menu')->where('role_id', $roleId)->delete();
$dataToInsert = [];
foreach ($selectedMenuIds as $menuId) {
$results = DB::select('SELECT parent_id FROM menus WHERE id = ?', [$menuId]);
if($results[0]->parent_id){ //jika memiliki parent_id, insert juga
$dataToInsert[] = [
'menu_id' => $results[0]->parent_id,
'role_id' => $roleId
];
}
$dataToInsert[] = [
'menu_id' => $menuId,
'role_id' => $roleId
];
}
$dataToInsert = array_unique(array_map('serialize', $dataToInsert));
$dataToInsert = array_map('unserialize', $dataToInsert);
DB::table('role_menu')->insert($dataToInsert);
DB::commit();
return response()->json(['success' => true], 200);
} catch (\Exception $e) {
DB::rollBack();
return response()->json(['success' => false, 'error' => $e->getMessage()], 500);
}
}
}
@@ -0,0 +1,124 @@
<?php
declare(strict_types=1);
namespace App\Http\Controllers\Backend;
use App\User;
use App\Http\Controllers\Controller;
use App\Http\Requests\RoleRequest;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\RedirectResponse;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
class RolesController extends Controller
{
public function index(): Renderable
{
$this->checkAuthorization(auth()->user(), ['role.view']);
$pageInfo = [
'title' => 'List Roles',
'sub_title' => 'List All User Roles',
'path' => url()->current()
];
return view('backend.pages.roles.index', [
'roles' => Role::all(), 'pageInfo' => $pageInfo
]);
}
public function create(): Renderable
{
$this->checkAuthorization(auth()->user(), ['role.create']);
$pageInfo = [
'title' => 'Create Roles',
'sub_title' => 'Create User Roles',
'path' => url()->current()
];
return view('backend.pages.roles.create', [
'all_permissions' => Permission::all(),
'permission_groups' => User::getpermissionGroups(),
'pageInfo' => $pageInfo
]);
}
public function store(RoleRequest $request): RedirectResponse
{
$this->checkAuthorization(auth()->user(), ['role.create']);
// Process Data.
$role = Role::create(['name' => $request->name, 'guard_name' => 'admin']);
// $role = DB::table('roles')->where('name', $request->name)->first();
$permissions = $request->input('permissions');
if (!empty($permissions)) {
$role->syncPermissions($permissions);
}
session()->flash('success', 'Role has been created.');
return redirect()->route('admin.roles.index');
}
public function edit(int $id): Renderable|RedirectResponse
{
$this->checkAuthorization(auth()->user(), ['role.edit']);
$role = Role::findById($id, 'admin');
if (!$role) {
session()->flash('error', 'Role not found.');
return back();
}
$pageInfo = [
'title' => 'Create Roles',
'sub_title' => 'Create User Roles',
'path' => url()->current()
];
return view('backend.pages.roles.edit', [
'role' => $role,
'all_permissions' => Permission::all(),
'permission_groups' => User::getpermissionGroups(),
'pageInfo' => $pageInfo
]);
}
public function update(RoleRequest $request, int $id): RedirectResponse
{
$this->checkAuthorization(auth()->user(), ['role.edit']);
$role = Role::findById($id, 'admin');
if (!$role) {
session()->flash('error', 'Role not found.');
return back();
}
$permissions = $request->input('permissions');
if (!empty($permissions)) {
$role->name = $request->name;
$role->save();
$role->syncPermissions($permissions);
}
session()->flash('success', 'Role has been updated.');
return back();
}
public function destroy(int $id): RedirectResponse
{
$this->checkAuthorization(auth()->user(), ['role.delete']);
$role = Role::findById($id, 'admin');
if (!$role) {
session()->flash('error', 'Role not found.');
return back();
}
$role->delete();
session()->flash('success', 'Role has been deleted.');
return redirect()->route('admin.roles.index');
}
}
+10 -2
View File
@@ -1,8 +1,16 @@
<?php
declare(strict_types=1);
namespace App\Http\Controllers;
abstract class Controller
use App\Traits\AuthorizationChecker;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;
class Controller extends BaseController
{
//
use AuthorizesRequests, DispatchesJobs, ValidatesRequests, AuthorizationChecker;
}
@@ -0,0 +1,700 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class GenerateDataMasterController extends Controller
{
public function GetMsBasicProduct()
{
$data = DB::table('MS_BASIC_PRODUCT')
->select('ID', 'DESCRIPTION')
->get();
$dropdownList = $data->map(function ($item) {
return [
'value' => $item->id,
'text' => $item->description,
];
});
return response()->json($dropdownList);
}
public function GetMsSpajkStatus()
{
$data = DB::table('SPAJK_STATUS')
->select('ID', 'DESCRIPTION')
->get();
$dropdownList = $data->map(function ($item) {
return [
'value' => $item->id,
'text' => $item->description,
];
});
return response()->json($dropdownList);
}
public function GetMsMarketingType()
{
$data = DB::table('MS_MARKETING_TYPE')
->select('ID', 'DESCRIPTION')
->get();
$dropdownList = $data->map(function ($item) {
return [
'value' => $item->id,
'text' => $item->description,
];
});
return response()->json($dropdownList);
}
public function GetMsDeliveryStatus()
{
$data = DB::table('MS_DELIVERY_STATUS')
->select('ID', 'DESCRIPTION')
->get();
$dropdownList = $data->map(function ($item) {
return [
'value' => $item->id,
'text' => $item->description,
];
});
return response()->json($dropdownList);
}
public function GetMsPartner()
{
$data = DB::table('MS_PARTNER')
->select('ID', 'DESCRIPTION')
->get();
$dropdownList = $data->map(function ($item) {
return [
'value' => $item->id,
'text' => $item->description,
];
});
return response()->json($dropdownList);
}
public function GetMsPartnerRegion($id)
{
$data = DB::table('MS_PARTNER_REGION')
->select('ID', 'DESCRIPTION')
->where('PARTNER_CODE', $id)
->get();
$dropdownList = $data->map(function ($item) {
return [
'value' => $item->id,
'text' => $item->description,
];
});
return response()->json($dropdownList);
}
public function GetMsPaymentMethod()
{
$data = DB::table('MS_PAYMENT_METHOD')
->select('ID', 'DESCRIPTION')
->get();
$dropdownList = $data->map(function ($item) {
return [
'value' => $item->id,
'text' => $item->description,
];
});
return response()->json($dropdownList);
}
public function GetMsCountry()
{
$data = DB::table('MS_COUNTRY')
->select('ID', 'COUNTRY_NAME', 'COUNTRY_CODE')
->get();
$dropdownList = $data->map(function ($item) {
return [
'value' => $item->id,
'text' => $item->country_name,
'code' => $item->country_code
];
});
return response()->json($dropdownList);
}
public function GetMsNationality()
{
$data = DB::table('MS_NATIONALITY')
->select('ID', 'DESCRIPTION')
->get();
$dropdownList = $data->map(function ($item) {
return [
'value' => $item->id,
'text' => $item->description,
];
});
return response()->json($dropdownList);
}
public function GetMsProvince()
{
$data = DB::table('MS_PROVINCE')
->select('ID', 'DESCRIPTION','CODE')
->get();
$dropdownList = $data->map(function ($item) {
return [
'value' => $item->code,
'text' => $item->code.' - '.$item->description,
];
});
return response()->json($dropdownList);
}
public function GetMsCity($provinceId)
{
$data = DB::table('MS_CITY')
->select('ID', 'NAME','CODE')
->where('PROVINCE_CODE', $provinceId)
->get();
$dropdownList = $data->map(function ($item) {
return [
'value' => $item->code,
'text' => $item->code.' - '.$item->name,
];
});
return response()->json($dropdownList);
}
public function GetMsDistrict($cityId)
{
$data = DB::table('MS_DISTRICT')
->select('ID', 'NAME','CODE')
->where('CITY_CODE', $cityId)
->get();
$dropdownList = $data->map(function ($item) {
return [
'value' => $item->code,
'text' => $item->code.' - '.$item->name,
];
});
return response()->json($dropdownList);
}
public function GetMsSubDistrict($districtId)
{
$data = DB::table('MS_SUB_DISTRICT')
->select('ID', 'NAME','CODE')
->where('DISTRICT_CODE', $districtId)
->get();
$dropdownList = $data->map(function ($item) {
return [
'value' => $item->code,
'text' => $item->code.' - '.$item->name,
];
});
return response()->json($dropdownList);
}
public function GetMsJobType()
{
$data = DB::table('MS_JOB_TYPE')
->select('ID', 'DESCRIPTION')
->get();
$dropdownList = $data->map(function ($item) {
return [
'value' => $item->id,
'text' => $item->description,
];
});
return response()->json($dropdownList);
}
public function GetMsPartnerBranch($id)
{
$data = DB::table('MS_PARTNER_BRANCH')
->select('ID', 'DESCRIPTION')
->where('PARTNER_REGION_CODE', $id)
->get();
$dropdownList = $data->map(function ($item) {
return [
'value' => $item->id,
'text' => $item->description,
];
});
return response()->json($dropdownList);
}
public function GetMsPartnerUnit($id)
{
$data = DB::table('MS_PARTNER_UNIT')
->select('ID', 'DESCRIPTION')
->where('PARTNER_BRANCH_CODE', $id)
->get();
$dropdownList = $data->map(function ($item) {
return [
'value' => $item->id,
'text' => $item->description,
];
});
return response()->json($dropdownList);
}
public function GetMsIdentityType()
{
$data = DB::table('MS_IDENTITY_TYPE')
->select('ID', 'DESCRIPTION')
->get();
$dropdownList = $data->map(function ($item) {
return [
'value' => $item->id,
'text' => $item->description,
];
});
return response()->json($dropdownList);
}
public function GetMsChannel($code)
{
$data = DB::table('MS_CHANNEL')
->select('ID', 'DESCRIPTION')
->where('MARKETING_TYPE', $code)
->get();
$dropdownList = $data->map(function ($item) {
return [
'value' => trim($item->id),
'text' => $item->description,
];
});
return response()->json($dropdownList);
}
public function GetMsChannelList()
{
$data = DB::table('MS_CHANNEL')
->select('ID', 'DESCRIPTION')
->get();
$dropdownList = $data->map(function ($item) {
return [
'value' => trim($item->id),
'text' => $item->description,
];
});
return response()->json($dropdownList);
}
public function GetMsDistribution()
{
$data = DB::table('MS_DISTRIBUTION_CHANNEL')
->select('ID', 'DESCRIPTION')
->get();
$dropdownList = $data->map(function ($item) {
return [
'value' => $item->id,
'text' => $item->description,
];
});
return response()->json($dropdownList);
}
public function GetProduct()
{
$data = DB::table('PRODUCT')
->select('ID', 'DESCRIPTION')
->get();
$dropdownList = $data->map(function ($item) {
return [
'value' => $item->id,
'text' => $item->description,
];
});
return response()->json($dropdownList);
}
public function GetProductCategory()
{
$data = DB::table('MS_PRODUCT_CATEGORY')
->select('ID', 'DESCRIPTION')
->get();
$dropdownList = $data->map(function ($item) {
return [
'value' => trim($item->id),
'text' => $item->description,
];
});
return response()->json($dropdownList);
}
public function GetOptions()
{
$roundingType = DB::table('MS_OPTIONS')
->select('CODE', 'DESCRIPTION')
->get();
$dropdownList = $roundingType->map(function ($item) {
return [
'value' => $item->code,
'text' => $item->description,
];
});
return response()->json($dropdownList);
}
public function GetRoundingType()
{
$roundingType = DB::table('MS_ROUNDING_TYPE')
->select('ID', 'DESCRIPTION')
->get();
$dropdownList = $roundingType->map(function ($item) {
return [
'value' => trim($item->id),
'text' => $item->description,
];
});
return response()->json($dropdownList);
}
public function GetBank()
{
$roundingType = DB::table('MS_BANK')
->select('ID', 'DESCRIPTION')
->orderBy('DESCRIPTION', 'asc')
->get();
$dropdownList = $roundingType->map(function ($item) {
return [
'value' => $item->id,
'text' => $item->description,
];
});
return response()->json($dropdownList);
}
public function GetMsSpajkdocument()
{
$roundingType = DB::table('MS_DOCUMENT_SPAJK')
->select('ID', 'DESCRIPTION')
->get();
$dropdownList = $roundingType->map(function ($item) {
return [
'value' => $item->id,
'text' => $item->description,
];
});
return response()->json($dropdownList);
}
public function GetDocumentFormat()
{
$roundingType = DB::table('MS_DOCUMENT_FORMAT')
->select('ID', 'DESCRIPTION')
->get();
$dropdownList = $roundingType->map(function ($item) {
return [
'value' => trim($item->id),
'text' => $item->description,
];
});
return response()->json($dropdownList);
}
public function GetMsDocumentSendTo()
{
$products = DB::table('MS_DOCUMENT_SENDTO')
->select('ID', 'DESCRIPTION')
->get();
$dropdownList = $products->map(function ($item) {
return [
'value' => $item->id,
'text' => $item->description,
];
});
return response()->json($dropdownList);
}
public function GetMsAutoUwStatus()
{
$products = DB::table('MS_AUTOUW_STATUS')
->select('ID', 'DESCRIPTION')
->get();
$dropdownList = $products->map(function ($item) {
return [
'value' => $item->id,
'text' => $item->description,
];
});
return response()->json($dropdownList);
}
public function GetSpajkStatus()
{
$products = DB::table('SPAJK_STATUS')
->select('ID', 'DESCRIPTION')
->whereIn('code', ['SWA', 'UPE', 'UPO', 'UDE', 'UAP'])
->get();
$dropdownList = $products->map(function ($item) {
return [
'value' => $item->id,
'text' => $item->description,
];
});
return response()->json($dropdownList);
}
public function GetMsPolicyByPartner($id)
{
$products = DB::table('POLICY')
->select('ID', 'POLICY_NO', 'PARTNER_CODE')
->where('PARTNER_CODE', $id)
->get();
$dropdownList = $products->map(function ($item) {
return [
'value' => $item->id,
'text' => $item->policy_no,
];
});
return response()->json($dropdownList);
}
public function GetMsPolicyProduct($id)
{
$products = DB::table('POLICY_PRODUCT')
->join('PRODUCT', 'POLICY_PRODUCT.PRODUCT_ID', '=', 'PRODUCT.ID')
->join('MS_MARKETING_TYPE', 'PRODUCT.MARKETING_TYPE', '=', 'MS_MARKETING_TYPE.ID')
->join('MS_CHANNEL', 'PRODUCT.CHANNEL_CODE', '=', 'MS_CHANNEL.ID')
->select('POLICY_PRODUCT.POLICY_ID AS POLICY_ID', 'MS_MARKETING_TYPE.DESCRIPTION AS MARKETING', 'MS_CHANNEL.DESCRIPTION AS CHANNEL', 'MS_MARKETING_TYPE.ID AS MARKETING_ID', 'MS_CHANNEL.ID AS CHANNEL_ID')
->where('POLICY_PRODUCT.POLICY_ID', $id)
->get();
$dropdownList = $products->map(function ($item) {
return $item;
});
return response()->json($dropdownList);
}
public function getAllMsCity()
{
$data = DB::table('MS_CITY')
->select('ID', 'NAME','CODE')
->get();
$dropdownList = $data->map(function ($item) {
return [
'value' => $item->code,
'text' => $item->code.' - '.$item->name,
];
});
return response()->json($dropdownList);
}
public function getAllMsDistrict()
{
$data = DB::table('MS_DISTRICT')
->select('ID', 'NAME','CODE')
->get();
$dropdownList = $data->map(function ($item) {
return [
'value' => $item->code,
'text' => $item->code.' - '.$item->name,
];
});
return response()->json($dropdownList);
}
public function getAllMsSubDistrict()
{
$data = DB::table('MS_SUB_DISTRICT')
->select('ID', 'NAME','CODE')
->get();
$dropdownList = $data->map(function ($item) {
return [
'value' => $item->code,
'text' => $item->code.' - '.$item->name,
];
});
return response()->json($dropdownList);
}
public function GetMsGender()
{
$data = DB::table('MS_GENDER')
->select('ID', 'CODE','DESCRIPTION')
->orderBy('DESCRIPTION', 'ASC')
->get();
$dropdownList = $data->map(function ($item) {
return [
'value' => $item->code,
'text' => $item->description,
];
});
return response()->json($dropdownList);
}
public function GetMsLoanType()
{
$data = DB::table('MS_LOAN_TYPE')
->select('ID', 'CODE','DESCRIPTION')
->get();
$dropdownList = $data->map(function ($item) {
return [
'value' => $item->id,
'text' => $item->description,
];
});
return response()->json($dropdownList);
}
public function GetMsPendingUWType()
{
$data = DB::table('MS_PENDING_UW')
->select('ID','CODE', 'NAME')
->get();
$dropdownList = $data->map(function ($item) {
return [
'value' => $item->id,
'text' => $item->code.' - '.$item->name,
];
});
return response()->json($dropdownList);
}
public function GetMsMedicalType()
{
$data = DB::table('MS_MEDICAL_TYPE')
->select('ID','CODE', 'DESCRIPTION')
->get();
$dropdownList = $data->map(function ($item) {
return [
'value' => $item->id,
'text' => $item->description,
];
});
return response()->json($dropdownList);
}
public function GetMsEM()
{
$data = DB::table('MS_EXTRA_MORTALITY')
->select('ID','CODE', 'DESCRIPTION')
->get();
$dropdownList = $data->map(function ($item) {
return [
'value' => $item->id,
'text' => $item->description,
];
});
return response()->json($dropdownList);
}
public function GetMsClIcd()
{
$data = DB::table('MS_CL_ICD')
->select('ID', 'ICD_CODE','ICD_SHORT_DESC')
->get();
$dropdownList = $data->map(function ($item) {
return [
'value' => $item->id,
'text' => $item->icd_code.' - '.$item->icd_short_desc,
];
});
return response()->json($dropdownList);
}
public function GetMsDecision()
{
$data = DB::table('MS_UW_DECISION')
->select('ID', 'CODE','DESCRIPTION')
->get();
$dropdownList = $data->map(function ($item) {
return [
'value' => $item->code,
'text' => $item->description
];
});
return response()->json($dropdownList);
}
}
+33
View File
@@ -0,0 +1,33 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
public function redirectAdmin()
{
return redirect()->route('admin.dashboard');
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Contracts\Support\Renderable
*/
public function index()
{
return view('home');
}
}
+70
View File
@@ -0,0 +1,70 @@
<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
/**
* The application's global HTTP middleware stack.
*
* These middleware are run during every request to your application.
*
* @var array
*/
protected $middleware = [
// \App\Http\Middleware\TrustHosts::class,
\App\Http\Middleware\TrustProxies::class,
\App\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];
/**
* The application's route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\LogLoginMiddleware::class,
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
];
/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
* @var array
*/
protected $routeMiddleware = [
'cache.css' => \App\Http\Middleware\CacheCssMiddleware::class,
'menu' => \App\Http\Middleware\MenuMiddleware::class,
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
];
}
+29
View File
@@ -0,0 +1,29 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Auth\Middleware\Authenticate as Middleware;
use Illuminate\Support\Facades\Auth;
class Authenticate extends Middleware
{
/**
* Get the path the user should be redirected to when they are not authenticated.
*
* @param \Illuminate\Http\Request $request
* @return string|null
*/
protected function redirectTo($request)
{
if (Auth::guard('admin')) {
if (!$request->expectsJson()) {
return route('admin.login');
}
} else {
if (!$request->expectsJson()) {
return route('login');
}
}
}
}
@@ -0,0 +1,15 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class CacheCssMiddleware
{
public function handle(Request $request, Closure $next)
{
$response = $next($request);
return $response;
}
}
@@ -0,0 +1,17 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode as Middleware;
class CheckForMaintenanceMode extends Middleware
{
/**
* The URIs that should be reachable while maintenance mode is enabled.
*
* @var array
*/
protected $except = [
//
];
}
+17
View File
@@ -0,0 +1,17 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;
class EncryptCookies extends Middleware
{
/**
* The names of the cookies that should not be encrypted.
*
* @var array
*/
protected $except = [
//
];
}
@@ -0,0 +1,40 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
use Illuminate\Support\Facades\Auth;
use App\Models\LoginLog;
class LogLoginMiddleware
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
if (Auth::check()) {
$user = Auth::user();
// Cek apakah sudah ada log login terbaru (opsional)
$latestLog = LoginLog::where('user_id', $user->id)
->latest()
->first();
if (!$latestLog || $latestLog->created_at->diffInMinutes(now()) > 5) { // Interval waktu opsional
LoginLog::create([
'user_id' => $user->id,
'ip_address' => $request->ip(),
'user_agent' => $request->userAgent(),
]);
}
}
return $next($request);
}
}
+103
View File
@@ -0,0 +1,103 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Spatie\Menu\Laravel\Facades\Menu;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth;
class MenuMiddleware
{
public function handle($request, Closure $next)
{
$menu = Menu::new()
->addClass('nav nav-pills nav-sidebar flex-column nav-flat')
->setWrapperTag('ul')
->setAttributes([
'data-widget' => 'treeview',
'role' => 'menu',
'data-accordion' => 'false'
]);
$menu->html('<li class="nav-item">
<a href="'.url('/').'" class="nav-link">
<i class="nav-icon mdi mdi-home"></i>
<p>Halaman Utama </p>
</a>
</li>');
// Ambil data menu utama
$user = Auth::guard('admin')->user();
$role = $user->roles->first();
$currentRoleId = $role ? $role->id : null;
$menus = DB::select("
SELECT m.*, rm.menu_id AS assigned_menu_id
FROM menus m
LEFT JOIN role_menu rm
ON m.id = rm.menu_id
WHERE m.parent_id IS NULL AND rm.role_id = '".$currentRoleId."'
ORDER BY m.id
");
foreach ($menus as $item) {
// Ambil submenu jika ada
$children = DB::select("
SELECT m.*, rm.menu_id AS assigned_menu_id
FROM menus m
LEFT JOIN role_menu rm
ON m.id = rm.menu_id
WHERE m.parent_id = '".$item->id."' AND rm.role_id = '".$currentRoleId."'
ORDER BY m.id
");
if (isset($children)) {
// Menu dengan child
$submenu = Menu::new()->addClass('nav nav-treeview');
foreach ($children as $child) {
$submenu->html(
'<li class="nav-item">' .
'<a href="' . url($child->url) . '" class="nav-link">' .
'<i class="' . $child->icon . ' nav-icon"></i>' .
'<p>' . $child->title . '</p>' .
'</a>' .
'</li>'
);
}
$menu->html(
'<li class="nav-item">' .
'<a href="#" class="nav-link">' .
'<i class="nav-icon ' . $item->icon . '"></i>' .
'<p>' . $item->title . '<i class="fas fa-angle-left right"></i></p>' .
'</a>' .
$submenu->render() .
'</li>'
);
} else {
// Menu tanpa child
$menu->html(
'<li class="nav-item">' .
'<a href="' . url($item->url) . '" class="nav-link">' .
'<i class="nav-icon ' . $item->icon . '"></i>' .
'<p>' . $item->title . '</p>' .
'</a>' .
'</li>'
);
}
}
view()->share('menu', $menu->render());
return $next($request);
}
}
@@ -0,0 +1,31 @@
<?php
namespace App\Http\Middleware;
use App\Providers\RouteServiceProvider;
use Closure;
use Illuminate\Support\Facades\Auth;
class RedirectIfAuthenticated
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
if(Auth::guard('admin')->check()){
return redirect(RouteServiceProvider::ADMIN_DASHBOARD);
}
if (Auth::guard($guard)->check()) {
return redirect(RouteServiceProvider::HOME);
}
return $next($request);
}
}
+18
View File
@@ -0,0 +1,18 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\TrimStrings as Middleware;
class TrimStrings extends Middleware
{
/**
* The names of the attributes that should not be trimmed.
*
* @var array
*/
protected $except = [
'password',
'password_confirmation',
];
}
+20
View File
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Http\Middleware\TrustHosts as Middleware;
class TrustHosts extends Middleware
{
/**
* Get the host patterns that should be trusted.
*
* @return array
*/
public function hosts()
{
return [
$this->allSubdomainsOfApplicationUrl(),
];
}
}
+27
View File
@@ -0,0 +1,27 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Http\Middleware\TrustProxies as Middleware;
use Illuminate\Http\Request;
class TrustProxies extends Middleware
{
/**
* The trusted proxies for this application.
*
* @var array|string
*/
protected $proxies;
/**
* The headers that should be used to detect proxies.
*
* @var int
*/
protected $headers = Request::HEADER_X_FORWARDED_FOR |
Request::HEADER_X_FORWARDED_HOST |
Request::HEADER_X_FORWARDED_PORT |
Request::HEADER_X_FORWARDED_PROTO |
Request::HEADER_X_FORWARDED_AWS_ELB;
}
+17
View File
@@ -0,0 +1,17 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
class VerifyCsrfToken extends Middleware
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
//
];
}
+35
View File
@@ -0,0 +1,35 @@
<?php
declare(strict_types=1);
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class AdminRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
public function rules(): array
{
$adminId = $this->route('admin');
return [
'name' => 'required|max:50',
'email' => 'required|max:100|email|unique:admins,email,' . $adminId,
'username' => 'required|max:100|unique:admins,username,' . $adminId,
'password' => $adminId ? 'nullable|confirmed' : 'confirmed',
];
}
}
+34
View File
@@ -0,0 +1,34 @@
<?php
declare(strict_types=1);
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class RoleRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
public function rules(): array
{
$roleId = $this->route('role');
return [
'name' => 'required|max:100|unique:roles,name,' . $roleId,
'permissions' => 'required|array|min:1',
'permissions.*' => 'string|exists:permissions,name',
];
}
}