From b1d393b1a1c0f46c012135f2250bb90722e9b307 Mon Sep 17 00:00:00 2001 From: ismailmasseran Date: Tue, 6 Oct 2026 11:26:49 +0800 Subject: [PATCH] feat: move pelelong berlesen functions to operasi and update login and reports (#4) Co-authored-by: nurafrinaalimi16 Reviewed-on: https://git.koppkb.com/KoPKB/lelong/pulls/4 --- app/Http/Controllers/Auth/LoginController.php | 7 + app/Http/Controllers/HomeController.php | 4 +- app/Http/Controllers/LelongController.php | 4 +- app/Http/Controllers/ReportController.php | 2 + app/Http/Kernel.php | 1 + app/Http/Middleware/EnsureActiveAccount.php | 30 + config/database.php | 800 +++--------------- ...2_transfer_auction_controls_to_operasi.php | 35 + ...001_merge_jurulelong_role_into_operasi.php | 84 ++ database/seeders/RolesSeeder.php | 20 +- public/css/login.css | 49 ++ resources/views/about.blade.php | 4 +- resources/views/auth/login.blade.php | 168 ++-- resources/views/home.blade copy 2.php | 6 +- resources/views/home.blade copy 3.php | 6 +- resources/views/home.blade copy.php | 6 +- resources/views/home.blade.php | 6 +- resources/views/home00.blade.php | 6 +- resources/views/homeoperasi.blade.php | 5 +- resources/views/homexxxx.blade.php | 6 +- resources/views/includes/sidebar.blade.php | 152 +--- .../views/lelong/currentlelong.blade.php | 4 +- .../views/lelong/listsagbycust.blade.php | 4 +- .../lelong/senaraiubahrugilelongnew.blade.php | 537 ++++++------ resources/views/lelong/showlelong.blade.php | 28 - resources/views/parameter/listajk.blade.php | 4 +- resources/views/pdf/lelreport.blade.php | 26 - resources/views/pdf/pdflaplelong.blade.php | 10 - resources/views/pdf/pdflelongreport.blade.php | 28 - .../views/pdf/pdflelongtaklaku.blade.php | 6 - .../views/pdf/pdfsenarailapbidaan.blade.php | 2 +- .../views/pdf/simulasireportbycust.blade.php | 4 +- .../views/pengurusanpengguna/index.blade.php | 4 +- .../views/pengurusanpengguna/show.blade.php | 4 +- .../senaraimohontangguh.blade.php | 12 +- routes/web.php | 12 +- tests/Feature/InactiveAccountTest.php | 69 ++ 37 files changed, 837 insertions(+), 1318 deletions(-) create mode 100644 app/Http/Middleware/EnsureActiveAccount.php create mode 100644 database/migrations/2026_09_27_000002_transfer_auction_controls_to_operasi.php create mode 100644 database/migrations/2026_09_28_000001_merge_jurulelong_role_into_operasi.php create mode 100644 public/css/login.css create mode 100644 tests/Feature/InactiveAccountTest.php diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index 0341f78f..e0b2d566 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -40,6 +40,13 @@ class LoginController extends Controller $this->middleware('guest')->except('logout'); } + protected function credentials(\Illuminate\Http\Request $request) + { + return array_merge($request->only($this->username(), 'password'), [ + 'status' => 'active', + ]); + } + public function username() { return 'username'; diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index 937499f9..b300775e 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -155,7 +155,7 @@ class HomeController extends Controller } } - } else { //operasi,jurulelong + } else { //operasi $sag = LelongBid::where('status_semak', 0) //belum disemak ->get(); } @@ -608,7 +608,7 @@ class HomeController extends Controller } } - if ($user->hasAnyRole('operasi', 'pengurus-operasi', 'jurulelong')) { + if ($user->hasAnyRole('operasi', 'pengurus-operasi')) { $arrayinfo = []; diff --git a/app/Http/Controllers/LelongController.php b/app/Http/Controllers/LelongController.php index 9c38aaea..c83e0b69 100644 --- a/app/Http/Controllers/LelongController.php +++ b/app/Http/Controllers/LelongController.php @@ -1948,7 +1948,7 @@ class LelongController extends Controller public function stopcawangan($id,$cawid) { - event(new LelongNotify('start')); + event(new LelongNotify('stop')); $currentdate = Carbon::now(); $currenttime = $currentdate->toTimeString(); $endtime = $currentdate->addHours(2); @@ -1965,7 +1965,7 @@ class LelongController extends Controller $lelong->save(); return redirect()->route('home') - ->with('success','Lelongan bermula'); + ->with('success','Lelongan ditamatkan'); } public function startall($id) diff --git a/app/Http/Controllers/ReportController.php b/app/Http/Controllers/ReportController.php index 7ac1d92a..4227a5c5 100644 --- a/app/Http/Controllers/ReportController.php +++ b/app/Http/Controllers/ReportController.php @@ -843,6 +843,8 @@ class ReportController extends Controller $pdf = PDF::loadView('pdf.simulasireportbycust',compact('simulasilel','cawanganDetail','marhuns','simulasi_id','cawid','ktlhbyr','cawname')) ->setPaper('a4','potrait'); + + $pdf->setPaper('a4', 'landscape'); return $pdf->download('Laporan Simulasi Cawangan by Pelanggan.pdf'); diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 6221e573..d532f0ae 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -37,6 +37,7 @@ class Kernel extends HttpKernel \Illuminate\Session\Middleware\StartSession::class, // \Illuminate\Session\Middleware\AuthenticateSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, + \App\Http\Middleware\EnsureActiveAccount::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, ], diff --git a/app/Http/Middleware/EnsureActiveAccount.php b/app/Http/Middleware/EnsureActiveAccount.php new file mode 100644 index 00000000..4d3efac4 --- /dev/null +++ b/app/Http/Middleware/EnsureActiveAccount.php @@ -0,0 +1,30 @@ +user(); + + if ($user && $user->status !== 'active') { + $guard->logout(); + $request->session()->invalidate(); + $request->session()->regenerateToken(); + + $message = 'Akaun anda tidak aktif. Sila hubungi pentadbir.'; + if ($request->expectsJson()) { + return response()->json(['message' => $message], 403); + } + + return redirect()->route('login')->withErrors(['username' => $message]); + } + + return $next($request); + } +} diff --git a/config/database.php b/config/database.php index e19277d8..902bdf84 100644 --- a/config/database.php +++ b/config/database.php @@ -93,686 +93,6 @@ return [ ]) : [], ], - 'KB2' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_KB2'), - 'host' => env('DB_HOST_KB2', '127.0.0.1'), - 'port' => env('DB_PORT_KB2', '3306'), - 'database' => env('DB_DATABASE_KB2', 'forge'), - 'username' => env('DB_USERNAME_KB2', 'forge'), - 'password' => env('DB_PASSWORD_KB2', ''), - 'unix_socket' => env('DB_SOCKET_KB2', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - 'WCY' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_WCY'), - 'host' => env('DB_HOST_WCY', '127.0.0.1'), - 'port' => env('DB_PORT_WCY', '3306'), - 'database' => env('DB_DATABASE_WCY', 'forge'), - 'username' => env('DB_USERNAME_WCY', 'forge'), - 'password' => env('DB_PASSWORD_WCY', ''), - 'unix_socket' => env('DB_SOCKET_WCY', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - '1STOP' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_1STOP'), - 'host' => env('DB_HOST_1STOP', '127.0.0.1'), - 'port' => env('DB_PORT_1STOP', '3306'), - 'database' => env('DB_DATABASE_1STOP', 'forge'), - 'username' => env('DB_USERNAME_1STOP', 'forge'), - 'password' => env('DB_PASSWORD_1STOP', ''), - 'unix_socket' => env('DB_SOCKET_1STOP', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - '020301' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_020301'), - 'host' => env('DB_HOST_020301', '127.0.0.1'), - 'port' => env('DB_PORT_020301', '3306'), - 'database' => env('DB_DATABASE_020301', 'forge'), - 'username' => env('DB_USERNAME_020301', 'forge'), - 'password' => env('DB_PASSWORD_020301', ''), - 'unix_socket' => env('DB_SOCKET_020301', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - 'WB' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_WB'), - 'host' => env('DB_HOST_WB', '127.0.0.1'), - 'port' => env('DB_PORT_WB', '3306'), - 'database' => env('DB_DATABASE_WB', 'forge'), - 'username' => env('DB_USERNAME_WB', 'forge'), - 'password' => env('DB_PASSWORD_WB', ''), - 'unix_socket' => env('DB_SOCKET_WB', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - 'ALS' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_ALS'), - 'host' => env('DB_HOST_ALS', '127.0.0.1'), - 'port' => env('DB_PORT_ALS', '3306'), - 'database' => env('DB_DATABASE_ALS', 'forge'), - 'username' => env('DB_USERNAME_ALS', 'forge'), - 'password' => env('DB_PASSWORD_ALS', ''), - 'unix_socket' => env('DB_SOCKET_ALS', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - '020306' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_020306'), - 'host' => env('DB_HOST_020306', '127.0.0.1'), - 'port' => env('DB_PORT_020306', '3306'), - 'database' => env('DB_DATABASE_020306', 'forge'), - 'username' => env('DB_USERNAME_020306', 'forge'), - 'password' => env('DB_PASSWORD_020306', ''), - 'unix_socket' => env('DB_SOCKET_020306', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - 'ARM' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_ARM'), - 'host' => env('DB_HOST_ARM', '127.0.0.1'), - 'port' => env('DB_PORT_ARM', '3306'), - 'database' => env('DB_DATABASE_ARM', 'forge'), - 'username' => env('DB_USERNAME_ARM', 'forge'), - 'password' => env('DB_PASSWORD_ARM', ''), - 'unix_socket' => env('DB_SOCKET_ARM', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - 'APM' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_APM'), - 'host' => env('DB_HOST_APM', '127.0.0.1'), - 'port' => env('DB_PORT_APM', '3306'), - 'database' => env('DB_DATABASE_APM', 'forge'), - 'username' => env('DB_USERNAME_APM', 'forge'), - 'password' => env('DB_PASSWORD_APM', ''), - 'unix_socket' => env('DB_SOCKET_APM', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - '010311' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_010311'), - 'host' => env('DB_HOST_010311', '127.0.0.1'), - 'port' => env('DB_PORT_010311', '3306'), - 'database' => env('DB_DATABASE_010311', 'forge'), - 'username' => env('DB_USERNAME_010311', 'forge'), - 'password' => env('DB_PASSWORD_010311', ''), - 'unix_socket' => env('DB_SOCKET_010311', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - 'JLI' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_JLI'), - 'host' => env('DB_HOST_JLI', '127.0.0.1'), - 'port' => env('DB_PORT_JLI', '3306'), - 'database' => env('DB_DATABASE_JLI', 'forge'), - 'username' => env('DB_USERNAME_JLI', 'forge'), - 'password' => env('DB_PASSWORD_JLI', ''), - 'unix_socket' => env('DB_SOCKET_JLI', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - 'ARP' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_ARP'), - 'host' => env('DB_HOST_ARP', '127.0.0.1'), - 'port' => env('DB_PORT_ARP', '3306'), - 'database' => env('DB_DATABASE_ARP', 'forge'), - 'username' => env('DB_USERNAME_ARP', 'forge'), - 'password' => env('DB_PASSWORD_ARP', ''), - 'unix_socket' => env('DB_SOCKET_ARP', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - 'GC' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_GC'), - 'host' => env('DB_HOST_GC', '127.0.0.1'), - 'port' => env('DB_PORT_GC', '3306'), - 'database' => env('DB_DATABASE_GC', 'forge'), - 'username' => env('DB_USERNAME_GC', 'forge'), - 'password' => env('DB_PASSWORD_GC', ''), - 'unix_socket' => env('DB_SOCKET_GC', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - '010621' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_010621'), - 'host' => env('DB_HOST_010621', '127.0.0.1'), - 'port' => env('DB_PORT_010621', '3306'), - 'database' => env('DB_DATABASE_010621', 'forge'), - 'username' => env('DB_USERNAME_010621', 'forge'), - 'password' => env('DB_PASSWORD_010621', ''), - 'unix_socket' => env('DB_SOCKET_010621', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - '010136' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_010136'), - 'host' => env('DB_HOST_010136', '127.0.0.1'), - 'port' => env('DB_PORT_010136', '3306'), - 'database' => env('DB_DATABASE_010136', 'forge'), - 'username' => env('DB_USERNAME_010136', 'forge'), - 'password' => env('DB_PASSWORD_010136', ''), - 'unix_socket' => env('DB_SOCKET_010136', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - '011235' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_011235'), - 'host' => env('DB_HOST_011235', '127.0.0.1'), - 'port' => env('DB_PORT_011235', '3306'), - 'database' => env('DB_DATABASE_011235', 'forge'), - 'username' => env('DB_USERNAME_011235', 'forge'), - 'password' => env('DB_PASSWORD_011235', ''), - 'unix_socket' => env('DB_SOCKET_011235', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - '011227' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_011227'), - 'host' => env('DB_HOST_011227', '127.0.0.1'), - 'port' => env('DB_PORT_011227', '3306'), - 'database' => env('DB_DATABASE_011227', 'forge'), - 'username' => env('DB_USERNAME_011227', 'forge'), - 'password' => env('DB_PASSWORD_011227', ''), - 'unix_socket' => env('DB_SOCKET_011227', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - '010620' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_010620'), - 'host' => env('DB_HOST_010620', '127.0.0.1'), - 'port' => env('DB_PORT_010620', '3306'), - 'database' => env('DB_DATABASE_010620', 'forge'), - 'username' => env('DB_USERNAME_010620', 'forge'), - 'password' => env('DB_PASSWORD_010620', ''), - 'unix_socket' => env('DB_SOCKET_010620', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - '010617' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_010617'), - 'host' => env('DB_HOST_010617', '127.0.0.1'), - 'port' => env('DB_PORT_010617', '3306'), - 'database' => env('DB_DATABASE_010617', 'forge'), - 'username' => env('DB_USERNAME_010617', 'forge'), - 'password' => env('DB_PASSWORD_010617', ''), - 'unix_socket' => env('DB_SOCKET_010617', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - '010915' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_010915'), - 'host' => env('DB_HOST_010915', '127.0.0.1'), - 'port' => env('DB_PORT_010915', '3306'), - 'database' => env('DB_DATABASE_010915', 'forge'), - 'username' => env('DB_USERNAME_010915', 'forge'), - 'password' => env('DB_PASSWORD_010915', ''), - 'unix_socket' => env('DB_SOCKET_010915', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - '011228' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_011228'), - 'host' => env('DB_HOST_011228', '127.0.0.1'), - 'port' => env('DB_PORT_011228', '3306'), - 'database' => env('DB_DATABASE_011228', 'forge'), - 'username' => env('DB_USERNAME_011228', 'forge'), - 'password' => env('DB_PASSWORD_011228', ''), - 'unix_socket' => env('DB_SOCKET_011228', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - '010219' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_010219'), - 'host' => env('DB_HOST_010219', '127.0.0.1'), - 'port' => env('DB_PORT_010219', '3306'), - 'database' => env('DB_DATABASE_010219', 'forge'), - 'username' => env('DB_USERNAME_010219', 'forge'), - 'password' => env('DB_PASSWORD_010219', ''), - 'unix_socket' => env('DB_SOCKET_010219', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - '011229' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_011229'), - 'host' => env('DB_HOST_011229', '127.0.0.1'), - 'port' => env('DB_PORT_011229', '3306'), - 'database' => env('DB_DATABASE_011229', 'forge'), - 'username' => env('DB_USERNAME_011229', 'forge'), - 'password' => env('DB_PASSWORD_011229', ''), - 'unix_socket' => env('DB_SOCKET_011229', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - '011230' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_011230'), - 'host' => env('DB_HOST_011230', '127.0.0.1'), - 'port' => env('DB_PORT_011230', '3306'), - 'database' => env('DB_DATABASE_011230', 'forge'), - 'username' => env('DB_USERNAME_011230', 'forge'), - 'password' => env('DB_PASSWORD_011230', ''), - 'unix_socket' => env('DB_SOCKET_011230', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - '011013' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_011013'), - 'host' => env('DB_HOST_011013', '127.0.0.1'), - 'port' => env('DB_PORT_011013', '3306'), - 'database' => env('DB_DATABASE_011013', 'forge'), - 'username' => env('DB_USERNAME_011013', 'forge'), - 'password' => env('DB_PASSWORD_011013', ''), - 'unix_socket' => env('DB_SOCKET_011013', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - '011412' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_011412'), - 'host' => env('DB_HOST_011412', '127.0.0.1'), - 'port' => env('DB_PORT_011412', '3306'), - 'database' => env('DB_DATABASE_011412', 'forge'), - 'username' => env('DB_USERNAME_011412', 'forge'), - 'password' => env('DB_PASSWORD_011412', ''), - 'unix_socket' => env('DB_SOCKET_011412', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - '011231' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_011231'), - 'host' => env('DB_HOST_011231', '127.0.0.1'), - 'port' => env('DB_PORT_011231', '3306'), - 'database' => env('DB_DATABASE_011231', 'forge'), - 'username' => env('DB_USERNAME_011231', 'forge'), - 'password' => env('DB_PASSWORD_011231', ''), - 'unix_socket' => env('DB_SOCKET_011231', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - '011232' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_011232'), - 'host' => env('DB_HOST_011232', '127.0.0.1'), - 'port' => env('DB_PORT_011232', '3306'), - 'database' => env('DB_DATABASE_011232', 'forge'), - 'username' => env('DB_USERNAME_011232', 'forge'), - 'password' => env('DB_PASSWORD_011232', ''), - 'unix_socket' => env('DB_SOCKET_011232', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - '011234' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_011234'), - 'host' => env('DB_HOST_011234', '127.0.0.1'), - 'port' => env('DB_PORT_011234', '3306'), - 'database' => env('DB_DATABASE_011234', 'forge'), - 'username' => env('DB_USERNAME_011234', 'forge'), - 'password' => env('DB_PASSWORD_011234', ''), - 'unix_socket' => env('DB_SOCKET_011234', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - '011233' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_011233'), - 'host' => env('DB_HOST_011233', '127.0.0.1'), - 'port' => env('DB_PORT_011233', '3306'), - 'database' => env('DB_DATABASE_011233', 'forge'), - 'username' => env('DB_USERNAME_011233', 'forge'), - 'password' => env('DB_PASSWORD_011233', ''), - 'unix_socket' => env('DB_SOCKET_011233', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - '020303' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_020303'), - 'host' => env('DB_HOST_020303', '127.0.0.1'), - 'port' => env('DB_PORT_020303', '3306'), - 'database' => env('DB_DATABASE_020303', 'forge'), - 'username' => env('DB_USERNAME_020303', 'forge'), - 'password' => env('DB_PASSWORD_020303', ''), - 'unix_socket' => env('DB_SOCKET_020303', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - '010618' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_010618'), - 'host' => env('DB_HOST_010618', '127.0.0.1'), - 'port' => env('DB_PORT_010618', '3306'), - 'database' => env('DB_DATABASE_010618', 'forge'), - 'username' => env('DB_USERNAME_010618', 'forge'), - 'password' => env('DB_PASSWORD_010618', ''), - 'unix_socket' => env('DB_SOCKET_010618', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - '011237' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_011237'), - 'host' => env('DB_HOST_011237', '127.0.0.1'), - 'port' => env('DB_PORT_011237', '3306'), - 'database' => env('DB_DATABASE_011237', 'forge'), - 'username' => env('DB_USERNAME_011237', 'forge'), - 'password' => env('DB_PASSWORD_011237', ''), - 'unix_socket' => env('DB_SOCKET_011237', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - - 'KB1' => [ - 'driver' => 'mysql', - 'url' => env('DATABASE_URL_KB1'), - 'host' => env('DB_HOST_KB1', '127.0.0.1'), - 'port' => env('DB_PORT_KB1', '3306'), - 'database' => env('DB_DATABASE_KB1', 'forge'), - 'username' => env('DB_USERNAME_KB1', 'forge'), - 'password' => env('DB_PASSWORD_KB1', ''), - 'unix_socket' => env('DB_SOCKET_KB1', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', - 'prefix' => '', - 'prefix_indexes' => true, - 'strict' => true, - 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], - ], - 'X0101' => [ 'driver' => 'mysql', 'url' => env('DATABASE_URL_X0101'), @@ -793,6 +113,126 @@ return [ ]) : [], ], + 'X0201' => [ + 'driver' => 'mysql', + 'url' => env('DATABASE_URL_X0201'), + 'host' => env('DB_HOST_X0201', '127.0.0.1'), + 'port' => env('DB_PORT_X0201', '3306'), + 'database' => env('DB_DATABASE_X0201', 'forge'), + 'username' => env('DB_USERNAME_X0201', 'forge'), + 'password' => env('DB_PASSWORD_X0201', ''), + 'unix_socket' => env('DB_SOCKET_X0201', ''), + 'charset' => 'utf8mb4', + 'collation' => 'utf8mb4_unicode_ci', + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'X0301' => [ + 'driver' => 'mysql', + 'url' => env('DATABASE_URL_X0301'), + 'host' => env('DB_HOST_X0301', '127.0.0.1'), + 'port' => env('DB_PORT_X0301', '3306'), + 'database' => env('DB_DATABASE_X0301', 'forge'), + 'username' => env('DB_USERNAME_X0301', 'forge'), + 'password' => env('DB_PASSWORD_X0301', ''), + 'unix_socket' => env('DB_SOCKET_X0301', ''), + 'charset' => 'utf8mb4', + 'collation' => 'utf8mb4_unicode_ci', + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'X0401' => [ + 'driver' => 'mysql', + 'url' => env('DATABASE_URL_X0401'), + 'host' => env('DB_HOST_X0401', '127.0.0.1'), + 'port' => env('DB_PORT_X0401', '3306'), + 'database' => env('DB_DATABASE_X0401', 'forge'), + 'username' => env('DB_USERNAME_X0401', 'forge'), + 'password' => env('DB_PASSWORD_X0401', ''), + 'unix_socket' => env('DB_SOCKET_X0401', ''), + 'charset' => 'utf8mb4', + 'collation' => 'utf8mb4_unicode_ci', + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'X0501' => [ + 'driver' => 'mysql', + 'url' => env('DATABASE_URL_X0501'), + 'host' => env('DB_HOST_X0501', '127.0.0.1'), + 'port' => env('DB_PORT_X0501', '3306'), + 'database' => env('DB_DATABASE_X0501', 'forge'), + 'username' => env('DB_USERNAME_X0501', 'forge'), + 'password' => env('DB_PASSWORD_X0501', ''), + 'unix_socket' => env('DB_SOCKET_X0501', ''), + 'charset' => 'utf8mb4', + 'collation' => 'utf8mb4_unicode_ci', + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'X0601' => [ + 'driver' => 'mysql', + 'url' => env('DATABASE_URL_X0601'), + 'host' => env('DB_HOST_X0601', '127.0.0.1'), + 'port' => env('DB_PORT_X0601', '3306'), + 'database' => env('DB_DATABASE_X0601', 'forge'), + 'username' => env('DB_USERNAME_X0601', 'forge'), + 'password' => env('DB_PASSWORD_X0601', ''), + 'unix_socket' => env('DB_SOCKET_X0601', ''), + 'charset' => 'utf8mb4', + 'collation' => 'utf8mb4_unicode_ci', + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'AN0101' => [ + 'driver' => 'mysql', + 'url' => env('DATABASE_URL_AN0101'), + 'host' => env('DB_HOST_AN0101', '127.0.0.1'), + 'port' => env('DB_PORT_AN0101', '3306'), + 'database' => env('DB_DATABASE_AN0101', 'forge'), + 'username' => env('DB_USERNAME_AN0101', 'forge'), + 'password' => env('DB_PASSWORD_AN0101', ''), + 'unix_socket' => env('DB_SOCKET_AN0101', ''), + 'charset' => 'utf8mb4', + 'collation' => 'utf8mb4_unicode_ci', + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + 'kaunterpkb' => [ 'driver' => 'mysql', 'url' => env('DATABASE_URL_KAUNTERPKB'), diff --git a/database/migrations/2026_09_27_000002_transfer_auction_controls_to_operasi.php b/database/migrations/2026_09_27_000002_transfer_auction_controls_to_operasi.php new file mode 100644 index 00000000..7ba18ebf --- /dev/null +++ b/database/migrations/2026_09_27_000002_transfer_auction_controls_to_operasi.php @@ -0,0 +1,35 @@ +transfer('jurulelong', 'operasi'); + } + + public function down() + { + $this->transfer('operasi', 'jurulelong'); + } + + private function transfer($from, $to) + { + DB::transaction(function () use ($from, $to) { + $source = Role::where('name', $from)->where('guard_name', 'web')->first(); + $target = Role::findOrCreate($to, 'web'); + foreach (['lelongan', 'janapemenang'] as $permission) { + $target->givePermissionTo($permission); + if ($source) { + $source->revokePermissionTo($permission); + } + } + }); + + app(PermissionRegistrar::class)->forgetCachedPermissions(); + } +} diff --git a/database/migrations/2026_09_28_000001_merge_jurulelong_role_into_operasi.php b/database/migrations/2026_09_28_000001_merge_jurulelong_role_into_operasi.php new file mode 100644 index 00000000..8d1f359b --- /dev/null +++ b/database/migrations/2026_09_28_000001_merge_jurulelong_role_into_operasi.php @@ -0,0 +1,84 @@ +backup)) { + Schema::create($this->backup, function (Blueprint $table) { + $table->unsignedBigInteger('id')->primary(); + $table->longText('payload'); + }); + } + + DB::transaction(function () { + $tables = config('permission.table_names'); + $key = config('permission.column_names.role_pivot_key') ?: 'role_id'; + foreach (DB::table($tables['roles'])->where('name', 'jurulelong')->get() as $role) { + $target = DB::table($tables['roles'])->where('name', 'operasi') + ->where('guard_name', $role->guard_name)->first(); + $snapshot = ['role' => (array) $role, 'renamed' => !$target, 'rows' => [], 'added' => []]; + + if (!$target) { + DB::table($tables['roles'])->where('id', $role->id)->update(['name' => 'operasi']); + } else { + foreach (['model_has_roles', 'role_has_permissions'] as $pivot) { + $snapshot['rows'][$pivot] = []; + $snapshot['added'][$pivot] = []; + foreach (DB::table($tables[$pivot])->where($key, $role->id)->get() as $row) { + $original = (array) $row; + $snapshot['rows'][$pivot][] = $original; + $replacement = $original; + $replacement[$key] = $target->id; + if (!DB::table($tables[$pivot])->where($replacement)->exists()) { + DB::table($tables[$pivot])->insert($replacement); + $snapshot['added'][$pivot][] = $replacement; + } + } + DB::table($tables[$pivot])->where($key, $role->id)->delete(); + } + DB::table($tables['roles'])->where('id', $role->id)->delete(); + } + + DB::table($this->backup)->insert([ + 'id' => $role->id, + 'payload' => json_encode($snapshot, JSON_THROW_ON_ERROR), + ]); + } + }); + app(PermissionRegistrar::class)->forgetCachedPermissions(); + } + + public function down() + { + DB::transaction(function () { + $tables = config('permission.table_names'); + foreach (DB::table($this->backup)->get() as $backup) { + $snapshot = json_decode($backup->payload, true, 512, JSON_THROW_ON_ERROR); + if ($snapshot['renamed']) { + DB::table($tables['roles'])->where('id', $backup->id)->update($snapshot['role']); + } else { + DB::table($tables['roles'])->insert($snapshot['role']); + foreach ($snapshot['rows'] as $pivot => $rows) { + foreach ($snapshot['added'][$pivot] as $row) { + DB::table($tables[$pivot])->where($row)->delete(); + } + foreach ($rows as $row) { + DB::table($tables[$pivot])->insert($row); + } + } + } + } + }); + Schema::dropIfExists($this->backup); + app(PermissionRegistrar::class)->forgetCachedPermissions(); + } +} diff --git a/database/seeders/RolesSeeder.php b/database/seeders/RolesSeeder.php index 96ff3dba..1ae5e22e 100644 --- a/database/seeders/RolesSeeder.php +++ b/database/seeders/RolesSeeder.php @@ -82,7 +82,7 @@ class RolesSeeder extends Seeder 'description' => 'Wang Tidak Dituntut Cawangan' ]); - //jurulelong + //operasi Permission::create([ 'name' => 'pendaftaranbatch', 'description' => 'Daftar batch lelong' @@ -238,14 +238,10 @@ class RolesSeeder extends Seeder $role4->givePermissionTo('pengurusangambar'); $role4->givePermissionTo('WTDcaw'); - $role5 = Role::create(['name' => 'jurulelong']); - $role5->givePermissionTo('pendaftaranbatch'); - $role5->givePermissionTo('kemaskinihargaasas'); - $role5->givePermissionTo('import'); - $role5->givePermissionTo('lelongan'); - $role5->givePermissionTo('janapemenang'); - $role6 = Role::create(['name' => 'operasi']); + $role6->givePermissionTo('import'); + $role6->givePermissionTo('lelongan'); + $role6->givePermissionTo('janapemenang'); $role6->givePermissionTo('pengguna'); $role6->givePermissionTo('pendaftaranbatch'); $role6->givePermissionTo('report'); @@ -342,14 +338,6 @@ class RolesSeeder extends Seeder ]); $user->assignRole($role4); - $user = \App\Models\User::factory()->create([ - 'name' => 'Juru Lelong', - 'username' => 'Juru Lelong', - 'email' => 'jurulelong@example.com', - 'user_type' => 1 - ]); - $user->assignRole($role5); - $user = \App\Models\User::factory()->create([ 'name' => 'Operasi', 'username' => 'Operasi', diff --git a/public/css/login.css b/public/css/login.css new file mode 100644 index 00000000..cc2d2428 --- /dev/null +++ b/public/css/login.css @@ -0,0 +1,49 @@ +* { box-sizing: border-box; } +:root { --teal: #008e95; --teal-dark: #00686e; --yellow: #ffce1b; --ink: #183b3e; } +body { margin: 0; min-height: 100vh; padding: 48px 28px; display: grid; place-items: center; background: #edf4f3; color: var(--ink); font-family: 'Segoe UI', Arial, sans-serif; } +.login-shell { width: min(1100px, 100%); min-height: 680px; display: grid; grid-template-columns: 1fr 1fr; overflow: hidden; border: 1px solid #dbe7e5; border-radius: 26px; background: white; box-shadow: 0 24px 70px #164f4d12; } +.brand-panel { position: relative; overflow: hidden; padding: 48px; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; background: linear-gradient(145deg, #00969b, #007d84); color: white; } +.brand-logo { position: relative; z-index: 1; width: 250px; max-width: 100%; height: auto; } +.brand-copy { position: relative; z-index: 1; margin: 36px 0; } +.eyebrow { display: flex; align-items: center; justify-content: center; gap: 10px; font-size: 11px; font-weight: 700; letter-spacing: 2px; } +.eyebrow span { width: 7px; height: 7px; background: var(--yellow); border-radius: 50%; } +h1 { margin: 22px 0; font-size: clamp(34px, 3.5vw, 48px); line-height: 1.2; font-weight: 650; letter-spacing: -1.8px; } +h1 em { color: var(--yellow); font-style: normal; } +.brand-copy p { max-width: 340px; color: #e2f3f3; font-size: 15px; line-height: 1.85; } +.brand-divider { height: 3px; width: 42px; background: var(--yellow); margin: 30px auto 18px; } +.brand-caption { font-size: 12px; color: #e2f3f3; letter-spacing: .4px; } +.brand-bottom { display: flex; align-items: center; gap: 13px; justify-content: center; margin-top: 32px; position: relative; z-index: 1; font-size: 11px; line-height: 1.65; color: #e2f3f3; } +.brand-mark { width: 37px; height: 37px; display: grid; place-items: center; border: 1px solid #ffffff55; border-radius: 10px; color: var(--yellow); font-size: 17px; font-weight: 700; } +.brand-orbit { position: absolute; width: 420px; height: 420px; bottom: -235px; right: -200px; border: 1px solid #ffffff29; border-radius: 50%; box-shadow: 0 0 0 45px #ffffff06, 0 0 0 90px #ffffff05; } +.form-panel { padding: 70px 56px 28px; display: flex; flex-direction: column; justify-content: center; } +.form-content { width: 100%; margin: auto 0; } +.section-label { color: var(--teal-dark); font-size: 10px; font-weight: 700; letter-spacing: 2px; } +h2 { margin: 14px 0 10px; font-size: 36px; letter-spacing: -1.2px; font-weight: 650; } +.form-intro { margin: 0 0 34px; color: #64797a; font-size: 14px; line-height: 1.7; } +.field { margin-bottom: 22px; } +label { display: block; font-size: 13px; font-weight: 600; margin-bottom: 9px; } +input { width: 100%; height: 52px; border: 1px solid #cfddda; border-radius: 9px; padding: 0 15px; background: #fcfdfd; font: inherit; font-size: 14px; color: var(--ink); } +input::placeholder { color: #7c8f90; } +input:focus { outline: 3px solid #008e9524; border-color: var(--teal); background: white; } +input[aria-invalid="true"] { border-color: #b73131; } +.password-field { position: relative; } +.password-field input { padding-right: 72px; } +button, a { -webkit-tap-highlight-color: transparent; } +.password-toggle { position: absolute; right: 8px; top: 6px; height: 40px; padding: 0 10px; border: 0; border-radius: 6px; color: var(--teal-dark); background: transparent; cursor: pointer; font: inherit; font-size: 12px; font-weight: 600; } +.form-links { display: flex; justify-content: flex-end; margin: -6px 0 25px; } +a { color: var(--teal-dark); font-size: 13px; font-weight: 600; text-decoration: none; } +a:hover { text-decoration: underline; } +button:focus-visible, a:focus-visible { outline: 3px solid var(--teal); outline-offset: 4px; } +.submit-button { width: 100%; display: flex; align-items: center; justify-content: center; gap: 18px; min-height: 52px; border: 0; border-radius: 9px; background: var(--yellow); color: #233f3c; font: inherit; font-size: 14px; font-weight: 700; cursor: pointer; transition: background .15s; } +.submit-button:hover { background: #f3c112; } +.submit-button span { font-size: 22px; line-height: 1; } +.form-note { display: flex; align-items: center; justify-content: center; gap: 8px; margin-top: 26px; color: #718483; font-size: 11px; } +.note-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--teal); } +footer { padding-top: 55px; text-align: center; color: #6a7f7d; font-size: 10px; line-height: 1.7; } +.notice { padding: 13px 15px; border-radius: 8px; margin-bottom: 20px; font-size: 13px; line-height: 1.5; } +.notice-success { background: #e5f5ed; color: #216348; } +.notice-error { background: #fff0ee; color: #a32626; } +.field-error { color: #a32626; font-size: 12px; margin: 8px 0 0; line-height: 1.5; } +@media (max-width: 800px) { body { padding: 24px; } .brand-panel { padding: 34px; } .form-panel { padding: 42px 30px 24px; } h1 { font-size: 36px; } } +@media (max-width: 600px) { body { padding: 18px 14px; } .login-shell { grid-template-columns: 1fr; min-height: auto; border-radius: 20px; } .brand-panel { padding: 28px; } .brand-logo { width: 210px; } .brand-copy { margin: 26px 0 0; } .eyebrow { font-size: 9px; } h1 { font-size: 32px; margin: 15px 0 10px; } .brand-copy p, .brand-divider, .brand-caption, .brand-bottom { display: none; } .form-panel { padding: 32px 26px 24px; } h2 { font-size: 30px; } .form-intro { margin-bottom: 25px; } footer { padding-top: 35px; } } +@media (prefers-reduced-motion: reduce) { * { transition: none !important; } } diff --git a/resources/views/about.blade.php b/resources/views/about.blade.php index ec699e64..f08ded54 100644 --- a/resources/views/about.blade.php +++ b/resources/views/about.blade.php @@ -27,8 +27,8 @@ @hasrole('pengurus-cawangan') I am a pengurus-cawangan! @endhasrole - @hasrole('jurulelong') - I am a jurulelong! + @hasrole('operasi') + I am an operasi user! @endhasrole @hasrole('operasi') I am a operasi! diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php index 3887dbcc..5b1604d5 100644 --- a/resources/views/auth/login.blade.php +++ b/resources/views/auth/login.blade.php @@ -1,104 +1,76 @@ - - - - - - E-Rahn Lelong - - - - - - - - - - - -
- @endhasrole - @hasrole('jurulelong') - Saya jurulelong! + @hasrole('operasi') + Saya operasi!
@@ -200,7 +200,7 @@ - @hasrole('jurulelong') + @hasrole('operasi') diff --git a/resources/views/home.blade copy 3.php b/resources/views/home.blade copy 3.php index 26f7991d..8161d21e 100644 --- a/resources/views/home.blade copy 3.php +++ b/resources/views/home.blade copy 3.php @@ -176,8 +176,8 @@
@endhasrole - @hasrole('jurulelong') - Saya jurulelong! + @hasrole('operasi') + Saya operasi!
@@ -258,7 +258,7 @@ - @hasrole('jurulelong') + @hasrole('operasi') diff --git a/resources/views/home.blade copy.php b/resources/views/home.blade copy.php index 5fbbd5d6..a38df191 100644 --- a/resources/views/home.blade copy.php +++ b/resources/views/home.blade copy.php @@ -26,8 +26,8 @@ @hasrole('pengurus-cawangan') I am a pengurus-cawangan! @endhasrole - @hasrole('jurulelong') - I am a jurulelong! + @hasrole('operasi') + I am an operasi user! @@ -80,7 +80,7 @@ - + + @@ -61,6 +62,7 @@ + --}} - @else - - @endif - {{-- @endforeach --}} - - - - {{-- Kembali --}} +
- @hasrole('jurulelong') + @hasrole('operasi') diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php index f109aa12..ad690217 100644 --- a/resources/views/home.blade.php +++ b/resources/views/home.blade.php @@ -208,8 +208,8 @@ @endhasrole - @hasrole('jurulelong') - {{-- Saya jurulelong! --}} + @hasrole('operasi') + {{-- Kawalan lelong oleh operasi. --}} {{--
@@ -290,7 +290,7 @@
- @hasrole('jurulelong') + @hasrole('operasi') diff --git a/resources/views/home00.blade.php b/resources/views/home00.blade.php index 3213870f..96d08218 100644 --- a/resources/views/home00.blade.php +++ b/resources/views/home00.blade.php @@ -118,8 +118,8 @@ @endhasrole - @hasrole('jurulelong') - Saya jurulelong! + @hasrole('operasi') + Saya operasi!
@@ -200,7 +200,7 @@
- @hasrole('jurulelong') + @hasrole('operasi') diff --git a/resources/views/homeoperasi.blade.php b/resources/views/homeoperasi.blade.php index 41b871dd..7c04d514 100644 --- a/resources/views/homeoperasi.blade.php +++ b/resources/views/homeoperasi.blade.php @@ -12,7 +12,7 @@ {{ session('status') }} @endif - @hasrole('jurulelong') + @hasrole('operasi') @if(count($arrayinfo)> 0) @foreach ($arrayinfo as $lel)
@@ -125,8 +125,7 @@ @if($cawangan_detail['status_online'] == 0 && $cawangan_detail['belum_semak'] == 0) Mula Lelong @elseif($cawangan_detail['status_online'] == 1) - Tamat Lelong - + Tamat Lelong @endif @elseif($lel['info']['sts_lelong'] == 2) @endif diff --git a/resources/views/homexxxx.blade.php b/resources/views/homexxxx.blade.php index 3035e448..59a7e176 100644 --- a/resources/views/homexxxx.blade.php +++ b/resources/views/homexxxx.blade.php @@ -119,8 +119,8 @@
@endhasrole - @hasrole('jurulelong') - Saya jurulelong! + @hasrole('operasi') + Saya operasi!
@@ -201,7 +201,7 @@
- @hasrole('jurulelong') + @hasrole('operasi') diff --git a/resources/views/includes/sidebar.blade.php b/resources/views/includes/sidebar.blade.php index 0444d3a7..51241986 100644 --- a/resources/views/includes/sidebar.blade.php +++ b/resources/views/includes/sidebar.blade.php @@ -673,6 +673,35 @@ @endhasrole @hasrole('operasi') +
  • + + + + +
  • -
  • - - - -
  • @@ -912,16 +918,8 @@
    {{$data['laporan']['jbg']}} {{$data['laporan']['cajlelong']}} - @hasrole('jurulelong') + @hasrole('operasi') @endhasrole @hasrole('operasi') @@ -78,7 +78,7 @@ @endhasrole - @hasrole('jurulelong') + @hasrole('operasi') @endhasrole @hasrole('operasi') diff --git a/resources/views/lelong/listsagbycust.blade.php b/resources/views/lelong/listsagbycust.blade.php index ca6ef06b..bb9d845f 100644 --- a/resources/views/lelong/listsagbycust.blade.php +++ b/resources/views/lelong/listsagbycust.blade.php @@ -42,7 +42,8 @@
    No Nama PelangganNo.KPNo.KPNo.Telefon No.Rujukan Tempoh Berat Asal (gm){{$loop->iteration}} {{$customer->nama}} {{$customer->nokp}}{{$customer->notel}} @foreach($customer['gadai'] as $data) {{$data->norujukan}}
    @endforeach diff --git a/resources/views/lelong/senaraiubahrugilelongnew.blade.php b/resources/views/lelong/senaraiubahrugilelongnew.blade.php index 0d627cfc..fea6866a 100644 --- a/resources/views/lelong/senaraiubahrugilelongnew.blade.php +++ b/resources/views/lelong/senaraiubahrugilelongnew.blade.php @@ -1,277 +1,306 @@ @extends('layouts.app') @section('content') -
    -
    -
    -
    -
    - - - -
    - senarai Sags : {{ $cawanganDetail->caw_name }} -
    -
    -
    - @if ($message = Session::get('success')) -
    - {{ $message }} -
    - @endif - @php - $myDateTime = DateTime::createFromFormat('Y-m-d', $lelonglel->tarikh_lelong ); - $t_lelong = $myDateTime->format('d-m-Y'); - @endphp -
    - @csrf - - -
    -
    - -
    -
    - +
    +
    +
    +
    +
    + + + +
    + senarai Sags : {{ $cawanganDetail->caw_name }} +
    +
    +
    + @if ($message = Session::get('success')) +
    + {{ $message }}
    -
    -
    -
    -
    -
    - -
    -
    - + @endif + @php + $myDateTime = DateTime::createFromFormat('Y-m-d', $lelonglel->tarikh_lelong); + $t_lelong = $myDateTime->format('d-m-Y'); + @endphp + + @csrf + + +
    +
    + +
    +
    + +
    +
    +
    -
    -
    -
    -
    -
    - -
    -
    - +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    + +
    +
    + +
    + + + + + + + + +
    +
    +
    +
    +
    + +
    + +
    +
    +
    + + -
    -
    - -
    -
    - -
    - - - - - - - - -
    -
    -
    -
    -
    - -
    - -
    -
    -
    - - - -
    - @csrf - - - - - - - - - {{-- --}} - - {{-- + + + @csrf + + + +
    NoNo RujukanNama PelangganTempohBerat (gm)
    + + + + + {{-- --}} + + {{-- --}} - - - - - - - - - - - {{-- --}} - - - - @php - $rugilelong = 0; - $bakilelong = 0; - @endphp - @foreach ($arraymarhun as $index=> $marhun) - - - - {{-- --}} - - {{-- + + + + + + + + + + + {{-- --}} + + + + @php + $rugilelong = 0; + $bakilelong = 0; + @endphp + @foreach ($arraymarhun as $index => $marhun) + + + + {{-- --}} + + {{-- --}} - - - {{-- --}} - - - - - - @php - $rugi = 0; - $baki = 0; - if(strpos($marhun['baki'], '-') !== false) - { - $baki = -$marhun['baki']; - $bakilelong += $marhun['baki']; - } - else { - $baki = $marhun['baki']; - $bakilelong += $marhun['baki']; - } - @endphp - - + + {{-- --}} - - + + + + + @php + $rugi = 0; + $baki = 0; + if (strpos($marhun['baki'], '-') !== false) { + $baki = -$marhun['baki']; + $bakilelong += $marhun['baki']; + } else { + $baki = $marhun['baki']; + $bakilelong += $marhun['baki']; + } + @endphp + + - - {{-- + + + + + {{-- --}} - - @endforeach - - - - - {{-- + + @endforeach + + + + + {{-- --}} - - - - - - - - - - - - + + + + + + + + + + + + -
    NoNo RujukanNama PelangganTempohBerat (gm) Nilai Marhun Asal (RM)Pembiayaan (RM)Keuntungan (RM)Harga Asas (RM)Harga Jual (RM)Caj Lelong Asal (RM)Baki/(Rugi) Asal (RM)Caj Lelong Ubah (RM)Baki/(Rugi) Ubah (RM)Caj Lelong Baru (RM)Baki/(Rugi) Baru (RM)Tindakan
    {{$loop->iteration}} {{ $marhun['norujukan']}}{{ $marhun['nama']['nama']}}{{ number_format($marhun['tempoh'], 2, '.', ',') }}{{ number_format($marhun['berat'], 2, '.', ',') }}Pembiayaan (RM)Keuntungan (RM)Harga Asas (RM)Harga Jual (RM)Caj Lelong Asal (RM)Baki/(Rugi) Asal (RM)Caj Lelong Ubah (RM)Baki/(Rugi) Ubah (RM)Caj Lelong Baru (RM)Baki/(Rugi) Baru (RM)Tindakan
    {{ $loop->iteration }} {{ $marhun['norujukan'] }}{{ $marhun['nama']['nama']}}{{ number_format($marhun['tempoh'], 2, '.', ',') }}{{ number_format($marhun['berat'], 2, '.', ',') }} {{ number_format($marhun['nilaimarhun'], 2, '.', ',') }}{{ number_format($marhun['pinjaman'], 2, '.', ',') }}{{ number_format($marhun['bakiupah'], 2, '.', ',') }}{{ number_format($marhun['cajlelong'], 2, '.', ',') }}{{ number_format($marhun['hargaasas'], 2, '.', ',') }}{{ number_format($marhun['hargajual'], 2, '.', ',') }}{{ number_format($marhun['cajlelongasal'], 2, '.', ',') }}@if($marhun['bakiasal'] > 0) - {{number_format($marhun['bakiasal'], 2, '.', ',')}} - @elseif($marhun['bakiasal'] < 0 ) - ({{number_format(-($marhun['bakiasal']), 2, '.', ',')}}) - @endif{{ number_format($marhun['cajlelong'], 2, '.', ',') }}@if($marhun['baki'] > 0) - {{number_format($marhun['baki'], 2, '.', ',')}} - @elseif($marhun['baki'] < 0 ) - ({{number_format(-($marhun['baki']), 2, '.', ',')}}) - @endif + {{ number_format($marhun['pinjaman'], 2, '.', ',') }}{{ number_format($marhun['bakiupah'], 2, '.', ',') }}{{ number_format($marhun['cajlelong'], 2, '.', ',') }}{{ number_format($marhun['hargaasas'], 2, '.', ',') }} + {{ number_format($marhun['hargajual'], 2, '.', ',') }} + {{ number_format($marhun['cajlelongasal'], 2, '.', ',') }} + + @if ($marhun['bakiasal'] > 0) + {{ number_format($marhun['bakiasal'], 2, '.', ',') }} + @elseif($marhun['bakiasal'] < 0) + ({{ number_format(-$marhun['bakiasal'], 2, '.', ',') }}) + @endif + + + {{ number_format($marhun['cajlelong'], 2, '.', ',') }} + + @if ($marhun['baki'] > 0) + {{ number_format($marhun['baki'], 2, '.', ',') }} + @elseif($marhun['baki'] < 0) + ({{ number_format(-$marhun['baki'], 2, '.', ',') }}) + @endif + - {{ number_format($marhun['cajlelongnew'], 2, '.', ',') }}@if($marhun['rugilelongnew'] > 0) - - {{ number_format($marhun['rugilelongnew'], 2, '.', ',') }} - @else - - ({{number_format(-($marhun['rugilelongnew']), 2, '.', ',')}}) - @endif + {{ number_format($marhun['cajlelongnew'], 2, '.', ',') }} + + @if ($marhun['rugilelongnew'] > 0) + + {{ number_format($marhun['rugilelongnew'], 2, '.', ',') }} + @else + + ({{ number_format(-$marhun['rugilelongnew'], 2, '.', ',') }}) + @endif +
    JUMLAH KESELURUHAN{{ number_format($total_berat, 2, '.', ',') }}
    JUMLAH KESELURUHAN{{ number_format($total_berat, 2, '.', ',') }} {{ number_format($total_nilaimarhun, 2, '.', ',') }}{{ number_format($total_pinjaman, 2, '.', ',') }}{{ number_format($total_bakiupah, 2, '.', ',') }}{{ number_format($total_hargaasas, 2, '.', ',') }}{{ number_format($total_hargajual, 2, '.', ',') }}{{ number_format($total_cajlelongasal, 2, '.', ',') }}@if($total_bakilelongasal > 0) - {{ number_format($total_bakilelongasal, 2, '.', ',') }} - @else - ({{number_format(-($total_bakilelongasal), 2, '.', ',')}}) - @endif{{ number_format($total_cazlelong, 2, '.', ',') }}@if($total_bakilelong > 0) - {{ number_format($total_bakilelong, 2, '.', ',') }} - @else - ({{number_format(-($total_bakilelong), 2, '.', ',')}}) - @endif{{ number_format($total_cajlelnew, 2, '.', ',') }}@if($total_rugilelongnew > 0) - {{ number_format($total_rugilelongnew, 2, '.', ',') }} - @else - ({{number_format(-($total_rugilelongnew), 2, '.', ',')}}) - @endif
    {{ number_format($total_pinjaman, 2, '.', ',') }}{{ number_format($total_bakiupah, 2, '.', ',') }}{{ number_format($total_hargaasas, 2, '.', ',') }}{{ number_format($total_hargajual, 2, '.', ',') }}{{ number_format($total_cajlelongasal, 2, '.', ',') }} + + @if ($total_bakilelongasal > 0) + {{ number_format($total_bakilelongasal, 2, '.', ',') }} + @else + ({{ number_format(-$total_bakilelongasal, 2, '.', ',') }}) + @endif + {{ number_format($total_cazlelong, 2, '.', ',') }} + @if ($total_bakilelong > 0) + {{ number_format($total_bakilelong, 2, '.', ',') }} + @else + ({{ number_format(-$total_bakilelong, 2, '.', ',') }}) + @endif + {{ number_format($total_cajlelnew, 2, '.', ',') }} + @if ($total_rugilelongnew > 0) + {{ number_format($total_rugilelongnew, 2, '.', ',') }} + @else + ({{ number_format(-$total_rugilelongnew, 2, '.', ',') }}) + @endif +
    -
    - -
    - {{-- @foreach($lelong->cawangan as $data) --}} - @if($lelong->export_data_sts == "SUCCESS") - {{--
    Selesai Export
    +
    + +
    + @foreach ($lelong->cawangan as $data) + @if ($lelong->export_data_sts == 'SUCCESS') + Selesai Export + @else + + @endif + @endforeach +
    +
    + + {{-- Kembali --}} - + +
    +
    +
    - - - - - -@endsection \ No newline at end of file + +@endsection diff --git a/resources/views/lelong/showlelong.blade.php b/resources/views/lelong/showlelong.blade.php index 36c2a973..80617d96 100644 --- a/resources/views/lelong/showlelong.blade.php +++ b/resources/views/lelong/showlelong.blade.php @@ -185,15 +185,6 @@ @elseif($lelong->tagujrah == '1') @endif - @hasrole('jurulelong') - - No - Cawangan - Bil Surat - Berat (gm) - Harga Asas (RM) - - @endhasrole @hasrole('operasi') No @@ -218,17 +209,6 @@ @foreach ($arraycaw as $index=>$caw) - @hasrole('jurulelong') - - {{$index+1}} - {{ $caw['cawangan'] }} - {{ $caw['bil_marhun'] }} - {{ number_format($caw['berat'], 2, '.', ',') }} - {{ number_format($caw['hargaasas'], 2, '.', ',') }} - - - - @endhasrole @hasrole('operasi') {{$index+1}} @@ -254,14 +234,6 @@ - @hasrole('jurulelong') - - JUMLAH KESELURUHAN - {{ $total_marhun }} - {{ number_format($total_berat, 2, '.', ',') }} - {{ number_format($total_hargaasas, 2, '.', ',') }} - - @endhasrole @hasrole('operasi') JUMLAH KESELURUHAN diff --git a/resources/views/parameter/listajk.blade.php b/resources/views/parameter/listajk.blade.php index 3559fca0..974441eb 100644 --- a/resources/views/parameter/listajk.blade.php +++ b/resources/views/parameter/listajk.blade.php @@ -189,9 +189,9 @@ $(".checkbox").each(function() { $(this).not('#tarafpenilai, #tarafkhazanah, #tarafpengurus-cawangan').prop("disabled", true); }); - } else if (taraf.id == "tarafoperasi" || taraf.id == "tarafjurulelong" || taraf.id == "tarafpengurus-operasi") { + } else if (taraf.id == "tarafoperasi" || taraf.id == "tarafpengurus-operasi") { $(".checkbox").each(function() { - $(this).not('#tarafoperasi, #tarafjurulelong, #tarafpengurus-operasi').prop("disabled", true); + $(this).not('#tarafoperasi, #tarafpengurus-operasi').prop("disabled", true); }); } } else { diff --git a/resources/views/pdf/lelreport.blade.php b/resources/views/pdf/lelreport.blade.php index 78209fff..a9a436ba 100644 --- a/resources/views/pdf/lelreport.blade.php +++ b/resources/views/pdf/lelreport.blade.php @@ -128,14 +128,6 @@ - @role('jurulelong') - - - - - - @endrole - @unlessrole('jurulelong') @@ -152,21 +144,12 @@ - @endunlessrole @foreach ($arraycaw as $index => $caw) - @role('jurulelong') - - - - - - @endrole - @unlessrole('jurulelong') @@ -182,19 +165,11 @@ - @endunlessrole @endforeach - @role('jurulelong') - - - - - @endrole - @unlessrole('jurulelong') @@ -209,7 +184,6 @@ - @endunlessrole diff --git a/resources/views/pdf/pdflaplelong.blade.php b/resources/views/pdf/pdflaplelong.blade.php index 17aabd34..14e2eedf 100644 --- a/resources/views/pdf/pdflaplelong.blade.php +++ b/resources/views/pdf/pdflaplelong.blade.php @@ -279,17 +279,7 @@
    NoCawanganBil SAGBerat (gm)Harga Asas (RM)No Cawangan Bil SAGCaj Lelong (RM) Baki Lelong (RM) Rugi Lelong (RM)
    {{ $index + 1 }}{{ $caw['cawangan'] }}{{ $caw['bil_marhun'] }}{{ number_format($caw['berat'], 2, '.', ',') }}{{ number_format($caw['hargaasas'], 2, '.', ',') }}{{ $index + 1 }} {{ $caw['cawangan'] }} {{ $caw['bil_marhun'] }}{{ number_format($caw['cajlelong'], 2, '.', ',') }} {{ number_format($caw['bakilelong'], 2, '.', ',') }} ({{ number_format($caw['rugilelong'], 2, '.', ',') }})
    JUMLAH KESELURUHAN{{ $total_marhun }}{{ number_format($total_berat, 2, '.', ',') }}{{ number_format($total_hargaasas, 2, '.', ',') }}JUMLAH KESELURUHAN {{ $total_marhun }} {{ number_format($total_berat, 2, '.', ',') }}{{ number_format($total_cazlelong, 2, '.', ',') }} {{ number_format($total_bakilelong, 2, '.', ',') }} ({{ number_format($total_rugilelong, 2, '.', ',') }})
    - - {{-- - --}} {{--









    diff --git a/resources/views/pdf/pdflelongreport.blade.php b/resources/views/pdf/pdflelongreport.blade.php index b312aff3..14198bc1 100644 --- a/resources/views/pdf/pdflelongreport.blade.php +++ b/resources/views/pdf/pdflelongreport.blade.php @@ -124,12 +124,6 @@
    - @hasrole('jurulelong') - - - - - @endhasrole @hasrole('operasi') @@ -156,12 +150,6 @@ @php $bakilelong = 0; @endphp @foreach ($marhuns as $index => $marhun) - @hasrole('jurulelong') - - - - - @endhasrole @hasrole('operasi') @@ -198,11 +186,6 @@ - @hasrole('jurulelong') - - - - @endhasrole @hasrole('operasi') @@ -231,15 +214,4 @@
    NoNo RujukanBerat (gm)Harga Asas (RM)No
    {{ $loop->iteration }}{{ $marhun['norujukan'] }}{{ number_format($marhun['berat'], 2, '.', ',') }}{{ number_format($marhun['hargaasas'], 2, '.', ',') }}{{ $loop->iteration }}
    JUMLAH KESELURUHAN{{ number_format($total_berat, 2, '.', ',') }}{{ number_format($total_hargaasas, 2, '.', ',') }}JUMLAH KESELURUHAN
    - @hasrole('jurulelong') - - @endhasrole diff --git a/resources/views/pdf/pdflelongtaklaku.blade.php b/resources/views/pdf/pdflelongtaklaku.blade.php index 6f346ba9..a577727e 100644 --- a/resources/views/pdf/pdflelongtaklaku.blade.php +++ b/resources/views/pdf/pdflelongtaklaku.blade.php @@ -248,10 +248,4 @@ - diff --git a/resources/views/pdf/pdfsenarailapbidaan.blade.php b/resources/views/pdf/pdfsenarailapbidaan.blade.php index a8f805c1..4786ae99 100644 --- a/resources/views/pdf/pdfsenarailapbidaan.blade.php +++ b/resources/views/pdf/pdfsenarailapbidaan.blade.php @@ -171,7 +171,7 @@ input[type="checkbox"] { Harga Bidaan (RM) Tambahan Bidaan (RM) Masa Bidaan - @hasrole('jurulelong') + @hasrole('operasi') Semakan @endhasrole diff --git a/resources/views/pdf/simulasireportbycust.blade.php b/resources/views/pdf/simulasireportbycust.blade.php index 87b7fcee..5f084740 100644 --- a/resources/views/pdf/simulasireportbycust.blade.php +++ b/resources/views/pdf/simulasireportbycust.blade.php @@ -129,7 +129,8 @@ tr:nth-child(even) { No Nama Pelanggan - No.KP + No.KP + No. Telefon No.Rujukan Tempoh Berat(gm) @@ -148,6 +149,7 @@ tr:nth-child(even) { {{$loop->iteration}} {{ $marhun['nama']['nama']}} {{ $marhun['nokp']}} + {{ $marhun['nama']['notelefon'] ?? '-' }} @foreach ($marhun['listsag'] as $item) {{-- {{$loop->iteration}}.{{ $item['norujukan'] }}
    --}} {{ $item['norujukan'] }}
    diff --git a/resources/views/pengurusanpengguna/index.blade.php b/resources/views/pengurusanpengguna/index.blade.php index e3ef3778..eef718b3 100644 --- a/resources/views/pengurusanpengguna/index.blade.php +++ b/resources/views/pengurusanpengguna/index.blade.php @@ -195,9 +195,9 @@ $(".checkbox").each(function() { $(this).not('#tarafpenilai, #tarafkhazanah, #tarafpengurus-cawangan').prop("disabled", true); }); - } else if (taraf.id == "tarafoperasi" || taraf.id == "tarafjurulelong" || taraf.id == "tarafpengurus-operasi") { + } else if (taraf.id == "tarafoperasi" || taraf.id == "tarafpengurus-operasi") { $(".checkbox").each(function() { - $(this).not('#tarafoperasi, #tarafjurulelong, #tarafpengurus-operasi').prop("disabled", true); + $(this).not('#tarafoperasi, #tarafpengurus-operasi').prop("disabled", true); }); } } else { diff --git a/resources/views/pengurusanpengguna/show.blade.php b/resources/views/pengurusanpengguna/show.blade.php index 5107dccc..dc0f34ec 100644 --- a/resources/views/pengurusanpengguna/show.blade.php +++ b/resources/views/pengurusanpengguna/show.blade.php @@ -133,9 +133,9 @@ $(".checkbox").each(function() { $(this).not('#tarafpenilai, #tarafkhazanah, #tarafpengurus-cawangan').prop("disabled", true); }); - } else if (taraf.id == "tarafoperasi" || taraf.id == "tarafjurulelong" || taraf.id == "tarafpengurus-operasi") { + } else if (taraf.id == "tarafoperasi" || taraf.id == "tarafpengurus-operasi") { $(".checkbox").each(function() { - $(this).not('#tarafoperasi, #tarafjurulelong, #tarafpengurus-operasi').prop("disabled", true); + $(this).not('#tarafoperasi, #tarafpengurus-operasi').prop("disabled", true); }); } } else { diff --git a/resources/views/tangguhlelong/senaraimohontangguh.blade.php b/resources/views/tangguhlelong/senaraimohontangguh.blade.php index cfc266ef..ea225544 100644 --- a/resources/views/tangguhlelong/senaraimohontangguh.blade.php +++ b/resources/views/tangguhlelong/senaraimohontangguh.blade.php @@ -65,8 +65,9 @@ @php - $myDateTime = DateTime::createFromFormat('Y-m-d', $mohon['tdet'][0]['t_lelong']); - $datez = $myDateTime->format('d-m-Y'); + $auctionDate = data_get($mohon, 'tdet.0.t_lelong'); + $myDateTime = $auctionDate ? DateTime::createFromFormat('Y-m-d', $auctionDate) : false; + $datez = $myDateTime ? $myDateTime->format('d-m-Y') : '-'; echo($datez); @endphp @@ -142,8 +143,9 @@ @php - $myDateTime = DateTime::createFromFormat('Y-m-d', $lulus['tlh'][0]['tarikh_lelong']); - $datez = $myDateTime->format('d-m-Y'); + $auctionDate = data_get($lulus, 'tlh.0.tarikh_lelong'); + $myDateTime = $auctionDate ? DateTime::createFromFormat('Y-m-d', $auctionDate) : false; + $datez = $myDateTime ? $myDateTime->format('d-m-Y') : '-'; echo($datez); @endphp @@ -205,7 +207,7 @@ @php $myDateTime = DateTime::createFromFormat('Y-m-d', $lulus['opr'][0]['tarikh_lelong']); - $datez = $myDateTime->format('d-m-Y'); + $datez = $myDateTime ? $myDateTime->format('d-m-Y') : '-'; echo($datez); @endphp diff --git a/routes/web.php b/routes/web.php index 1e4b41ff..364433c5 100644 --- a/routes/web.php +++ b/routes/web.php @@ -249,7 +249,7 @@ Route::group(['prefix'=>'lelong'], function () { Route::post('/kemaskini',['as'=>'lelong.kemaskinihargaasas','uses'=>'LelongController@kemaskini2']); }); - Route::group(['middleware' => ['permission:lelongan']], function () { + Route::group(['middleware' => ['role:operasi', 'permission:lelongan']], function () { Route::get('/lelongstart/{id}',['as'=>'lelong.start','uses'=>'LelongController@start']); Route::get('/lelongstop/{id}',['as'=>'lelong.stop','uses'=>'LelongController@stop']); @@ -258,7 +258,7 @@ Route::group(['prefix'=>'lelong'], function () { Route::get('/lelongstartall/{id}',['as'=>'lelong.startall','uses'=>'LelongController@startall']); Route::get('/lelongstopall/{id}',['as'=>'lelong.stopall','uses'=>'LelongController@stopall']); }); -//jurulelong +//operasi // Route::group(['middleware' => ['permission:janapemenang']], function () { // Route::get('/janapemenang',['as'=>'lelong.janapemenang','uses'=>'LelongController@janapemenang']); // Route::get('/listcawangan',['as'=>'lelong.listcawangan','uses'=>'LelongController@listcawangan']); @@ -267,10 +267,10 @@ Route::group(['prefix'=>'lelong'], function () { Route::group(['prefix'=>'pemenang'], function () { Route::group(['middleware' => ['permission:janapemenang']], function () { - Route::get('/janapemenang/{id}',['as'=>'lelong.janapemenang','uses'=>'LelongController@janapemenang']); - Route::get('/listcawangan',['as'=>'lelong.listcawangan','uses'=>'LelongController@listcawangan']); - Route::get('/janapemenangbycaw/{lelong_id}/{cawid}',['as'=>'lelong.janapemenangbycaw','uses'=>'LelongController@janapemenangbycaw']); - Route::get('/janapemenangallcaw/{lelong_id}',['as'=>'lelong.janapemenangallcaw','uses'=>'LelongController@janapemenangallcaw2']); + Route::get('/janapemenang/{id}',['as'=>'lelong.janapemenang','uses'=>'LelongController@janapemenang'])->middleware(['role:operasi', 'permission:janapemenang']); + Route::get('/listcawangan',['as'=>'lelong.listcawangan','uses'=>'LelongController@listcawangan'])->middleware(['role:operasi', 'permission:janapemenang']); + Route::get('/janapemenangbycaw/{lelong_id}/{cawid}',['as'=>'lelong.janapemenangbycaw','uses'=>'LelongController@janapemenangbycaw'])->middleware(['role:operasi', 'permission:janapemenang']); + Route::get('/janapemenangallcaw/{lelong_id}',['as'=>'lelong.janapemenangallcaw','uses'=>'LelongController@janapemenangallcaw2'])->middleware(['role:operasi', 'permission:janapemenang']); Route::get('/listpemenang',['as'=>'lelong.listpemenang','uses'=>'LelongController@listpemenang']); Route::get('/senaraipemenang/{lelong_id}/{caw_code}',['as'=>'pemenang.senaraipemenang','uses'=>'LelongController@senaraipemenang']); diff --git a/tests/Feature/InactiveAccountTest.php b/tests/Feature/InactiveAccountTest.php new file mode 100644 index 00000000..458624f7 --- /dev/null +++ b/tests/Feature/InactiveAccountTest.php @@ -0,0 +1,69 @@ + 'sqlite', 'database.connections.sqlite.database' => ':memory:', + 'session.driver' => 'array', 'cache.default' => 'array']); + DB::purge('sqlite'); + DB::statement('CREATE TABLE users (id INTEGER PRIMARY KEY, username TEXT, password TEXT, status TEXT, remember_token TEXT, created_at TEXT, updated_at TEXT)'); + Route::middleware('web')->get('/account-status-test', function () { + return response('allowed'); + }); + } + + private function account($status) + { + return User::create(['username' => 'status-test', 'password' => Hash::make('test-password'), 'status' => $status]); + } + + public function test_inactive_and_banned_accounts_cannot_log_in() + { + foreach (['inactive', 'banned'] as $status) { + DB::table('users')->delete(); + $this->account($status); + $this->post('/login', ['username' => 'status-test', 'password' => 'test-password']) + ->assertSessionHasErrors('username'); + $this->assertGuest('web'); + } + } + + public function test_active_account_can_log_in() + { + $user = $this->account('active'); + $this->post('/login', ['username' => 'status-test', 'password' => 'test-password']) + ->assertRedirect('/home'); + $this->assertAuthenticatedAs($user, 'web'); + } + + public function test_inactive_session_is_logged_out_and_cleared() + { + $user = $this->account('inactive'); + $this->actingAs($user, 'web')->withSession(['private-data' => 'remove']) + ->get('/account-status-test')->assertRedirect('/login')->assertSessionMissing('private-data'); + $this->assertGuest('web'); + } + + public function test_inactive_json_session_is_denied() + { + $this->actingAs($this->account('inactive'), 'web') + ->getJson('/account-status-test')->assertStatus(403); + $this->assertGuest('web'); + } + + public function test_active_session_and_guest_can_continue() + { + $this->get('/account-status-test')->assertOk(); + $this->actingAs($this->account('active'), 'web')->get('/account-status-test')->assertOk(); + } +}