diff --git a/app/Constants/Links.php b/app/Constants/Links.php index e1b51899c58f7de5d61d780b6bd4d45589de69e0..9c57b189de782b1bf192825cba6ee709550a1725 100644 --- a/app/Constants/Links.php +++ b/app/Constants/Links.php @@ -38,7 +38,7 @@ class Links { const LINK_KOTA_PENYEDIA_SWAKELOLA = "/rekap/kota"."/{id_kota}"."/satker"."/{id_satker}"."/swakelola/penyedia-swakelola"; const LINK_KABUPATEN_PENYEDIA_SWAKELOLA = "/rekap/kabupaten"."/{id_kabupaten}"."/satker"."/{id_satker}"."/swakelola/penyedia-swakelola"; - const LINK_UNDUH_PAKET_RUP = "/unduh/paketRUP"; + const LINK_UNDUH_PAKET_RUP = "/unduh/paketRUP"."/{satker_id}"; const LINK_UNDUH_PAKET_RUP_PDF = "/unduh/paketRUP/{satker}/download"; const LINK_UNDUH_MATERI = "/unduh/materi"; @@ -51,7 +51,7 @@ class Links { const LINK_CARI_PAKET = "/search"; const LINK_FIND_PAKET = "/findsearch"."/{tahun_anggaran}"."/{keyword}"."/{jenisPengadaan}"."/{metodePengadaan}"; - const LINK_STATUS_PAKET = "/status"; + const LINK_STATUS_PAKET = "/status"."/{satker_id}"; const LINK_UMUMKAN_PAKET = "/status/pengumuman"."/{id_paket}"; const LINK_KLASIFIKASI_PAKET = "/status/klasifikasi"."/{id_paket}"."/{status}"."/{jenis_paket}"; const LINK_JENIS_PAKET = "/status/jenispaket"."/{kode_rup}"; diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index ebc88fc81af614febe19e9d3c385e583b30cc0c8..f011272268cb0ca9ecd09abacd33a72dd133e723 100644 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -6,8 +6,9 @@ use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Validator; use Illuminate\Foundation\Auth\RegistersUsers; +use Illuminate\Support\Str; use App\Model\User; - +use App\Model\Satker; class RegisterController extends Controller { /* @@ -40,6 +41,10 @@ class RegisterController extends Controller $this->middleware('guest'); } + public function showRegistrationForm() { + $satkers = Satker::all(); + return view('auth.register', ['satkers' => $satkers]); + } /** * Get a validator for an incoming registration request. * @@ -52,6 +57,7 @@ class RegisterController extends Controller 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 'password' => ['required', 'string', 'min:8', 'confirmed'], + 'satker' => ['required'], ]); } @@ -67,7 +73,9 @@ class RegisterController extends Controller 'name' => $data['name'], 'email' => $data['email'], 'password' => Hash::make($data['password']), + 'satker_id' => $data['satker'], 'role' => strtolower($data['role']), + 'api_token' => Str::random(60), ]); } } diff --git a/app/Http/Controllers/CariPaket/FindPaketController.php b/app/Http/Controllers/CariPaket/FindPaketController.php index 043911a3d09840d6f2b3cf62972f82de63802aa8..729f521d00fbd3a181ef1e0bf1b062e98230d6c0 100644 --- a/app/Http/Controllers/CariPaket/FindPaketController.php +++ b/app/Http/Controllers/CariPaket/FindPaketController.php @@ -84,23 +84,39 @@ class FindPaketController extends Controller if (($keyword == '') and ($jenisP == 'Semua') and ($metode == 'Semua')){ foreach ($data as $d){ - if ($d->$tahun == $tahunA){ + if ($d->tahun == $tahunA){ array_push($result, $d); } } - return response()->json(['result' => $result]); + return response()->json(['dataPaket' => $result]); } else { - if ($jenisP == 'Semua'){ - $jenisP = ''; - } - - if ($metode == 'Semua'){ - $metode = ''; + if (($jenisP == 'Semua') and ($metode == 'Semua')){ + foreach ($data as $d){ + if ((strpos($d->paket, $keyword) > -1) and ($d->tahun == $tahunA)){ + array_push($result, $d); + } + } + return response()->json(['dataPaket' => $result]); + } else if (($jenisP == 'Semua') and ($metode != 'Semua')){ + foreach ($data as $d){ + if ((strpos($d->paket, $keyword) > -1) and ($d->tahun == $tahunA) and (strpos($d->metode,$metode) > -1)){ + array_push($result, $d); + } + } + return response()->json(['dataPaket' => $result]); + } else if (($jenisP != 'Semua') and ($metode == 'Semua')){ + foreach ($data as $d){ + if ((strpos($d->paket, $keyword) > -1) and ($d->tahun == $tahunA) and (strpos($d->metode,$metode) > -1)){ + array_push($result, $d); + } + } + return response()->json(['dataPaket' => $result]); } foreach ($data as $d){ - if (strpos($d->paket, $keyword) and ($d->$tahun == $tahunA) and strpos($d->$jenisPengadaan,$jenisP) and strpos($d->$metode,$metode)) + if ((strpos($d->paket, $keyword) > -1) and ($d->tahun == $tahunA) and (strpos($d->jenisPengadaan,$jenisP) > -1) and (strpos($d->metode,$metode) > -1)){ array_push($result, $d); + } } } diff --git a/app/Http/Controllers/Status/StatusController.php b/app/Http/Controllers/Status/StatusController.php index 2556aa54306b8df94a160e9f80c931db339a7152..0377e46fe72701e6a0668482eb0c0a1ebf6095e9 100644 --- a/app/Http/Controllers/Status/StatusController.php +++ b/app/Http/Controllers/Status/StatusController.php @@ -4,17 +4,15 @@ namespace App\Http\Controllers\Status; use App\Http\Controllers\Controller; use App\Model\Paket; -use App\Model\PaketPenyedia; -use App\Model\PaketSwakelola; -use App\Model\PaketPenyediaSwakelola; use App\Util\PaketClass; use Illuminate\Http\Request; +// use Illuminate\Support\Facades\Auth; class StatusController extends Controller { - public function showPaket(){ - $pakets = Paket::get(); + public function showPaket($m_satker_id){ + $pakets = Paket::where('m_satker_id', $m_satker_id)->get(); $paketClasses = []; foreach ($pakets as $paketDatum){ @@ -24,31 +22,6 @@ class StatusController extends Controller array_push($paketClasses, $paket); } - // append paket penyedia, swakelola, penyedia swakelola dg status 4 (sudah diumumkan) - $pakets = PaketPenyedia::get(); - foreach ($pakets as $paketDatum){ - $paket = new PaketClass($paketDatum->id, $paketDatum->kegiatan, $paketDatum->pid, - $paketDatum->nama, $paketDatum->sumber_dana, $paketDatum->lokasi, $paketDatum->deskripsi, - $paketDatum->penyedia->nama, $paketDatum->pagu, $paketDatum->d_start_work, '4'); - array_push($paketClasses, $paket); - } - - $pakets = PaketSwakelola::get(); - foreach ($pakets as $paketDatum){ - $paket = new PaketClass($paketDatum->id, $paketDatum->kegiatan, $paketDatum->pid, - $paketDatum->nama, $paketDatum->sumber_dana, $paketDatum->lokasi, $paketDatum->deskripsi, - $paketDatum->penyedia->nama, $paketDatum->pagu, $paketDatum->d_start_work, '4'); - array_push($paketClasses, $paket); - } - - $pakets = PaketPenyediaSwakelola::get(); - foreach ($pakets as $paketDatum){ - $paket = new PaketClass($paketDatum->id, $paketDatum->kegiatan, $paketDatum->pid, - $paketDatum->nama, $paketDatum->sumber_dana, $paketDatum->lokasi, $paketDatum->deskripsi, - $paketDatum->penyedia->nama, $paketDatum->pagu, $paketDatum->d_start_work, '4'); - array_push($paketClasses, $paket); - } - - return response()->json(['paket' => $paketClasses]); + return response()->json(['paket' => $paketClasses, 'm_satker_id' => $m_satker_id]); } } \ No newline at end of file diff --git a/app/Http/Controllers/Unduh/PaketRUPController.php b/app/Http/Controllers/Unduh/PaketRUPController.php index 58b00a1c471963bb31872cae1de5bf34eddf0774..10b995368ec0efc7c8fd71e9fabd9c8141bca4ec 100644 --- a/app/Http/Controllers/Unduh/PaketRUPController.php +++ b/app/Http/Controllers/Unduh/PaketRUPController.php @@ -11,8 +11,8 @@ use Illuminate\Http\Request; class PaketRUPController extends Controller { - public function showSatkerYear(){ - $satkers = Satker::all(); + public function showSatkerYear($id){ + $satkers = Satker::where('id', $id)->get(); $result = []; $tahun = []; diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index a3d8c48d5ab4ca4bfbd5266adcbab483ce371418..22d3e9eddc69adbcde706cacb7ff119fae802099 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -51,6 +51,7 @@ class Kernel extends HttpKernel * @var array */ protected $routeMiddleware = [ + 'role' => \App\Http\Middleware\CheckRole::class, 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, @@ -73,6 +74,7 @@ class Kernel extends HttpKernel \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\Authenticate::class, + \App\Http\Middleware\CheckRole::class, \Illuminate\Session\Middleware\AuthenticateSession::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, \Illuminate\Auth\Middleware\Authorize::class, diff --git a/app/Http/Middleware/CheckRole.php b/app/Http/Middleware/CheckRole.php new file mode 100644 index 0000000000000000000000000000000000000000..d5b074dd5295209a0ce731826dcb39fa0de3f0be --- /dev/null +++ b/app/Http/Middleware/CheckRole.php @@ -0,0 +1,28 @@ +<?php + +namespace App\Http\Middleware; + +use Closure; + +class CheckRole +{ + /** + * Handle an incoming request. + * + * @param \Illuminate\Http\Request $request + * @param \Closure $next + * @return mixed + */ + public function handle($request, Closure $next, $role) + { + if ($request->user()){ + if ($request->ajax()) { + return response('Unauthorized.', 401); + } else { + return redirect('home'); + } + } + + return $next($request); + } +} diff --git a/app/Model/User.php b/app/Model/User.php index 2d8d9dd220edc4eee565886980739a0133ac2855..c8b8216b24736310dd00402e2b4e0fc51d245dcb 100644 --- a/app/Model/User.php +++ b/app/Model/User.php @@ -16,7 +16,7 @@ class User extends Authenticatable * @var array */ protected $fillable = [ - 'name', 'email', 'password','role' + 'name', 'email', 'password','role', 'satker_id', 'api_token' ]; /** diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2019_03_21_042453_create_users_table.php similarity index 80% rename from database/migrations/2014_10_12_000000_create_users_table.php rename to database/migrations/2019_03_21_042453_create_users_table.php index b1993d3820208627d53adf4a98c3807a6317ac2f..6eb1570fcddcff30fbf0c9277c9512a292fdb592 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2019_03_21_042453_create_users_table.php @@ -19,8 +19,11 @@ class CreateUsersTable extends Migration $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); + $table->string('api_token', 80)->unique()->nullable()->default(null); $table->enum('role', ['pa', 'ppk']); $table->rememberToken(); + $table->unsignedBigInteger('satker_id'); + $table->foreign('satker_id')->references('id')->on('m_satker'); $table->timestamps(); }); } diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php index f957f303b2d05f3405364a03e526299f21844383..70f7db1981e019e313c017720cd8c0c371e7601b 100644 --- a/database/seeds/DatabaseSeeder.php +++ b/database/seeds/DatabaseSeeder.php @@ -28,7 +28,6 @@ class DatabaseSeeder extends Seeder public function run() { $this->call([ - UserSeeder::class, TypeSeeder::class, KLDISeeder::class, ProvinsiSeeder::class, @@ -37,6 +36,7 @@ class DatabaseSeeder extends Seeder PenyediaSeeder::class, PengadaanSeeder::class, SatkerSeeder::class, + UserSeeder::class, BelanjaSeeder::class, PokjaSeeder::class, JenisPaketSeeder::class, @@ -62,8 +62,8 @@ class UserSeeder extends Seeder { public function run() { - User::create(['name' => 'test', 'email'=>'test@gmail.com', 'password'=>'test', 'role'=>'pa']); - User::create(['name' => 'test2', 'email'=>'test2@gmail.com', 'password'=>'test2', 'role'=>'ppk']); + User::create(['name' => 'test', 'email'=>'test@gmail.com', 'password'=>'test', 'satker_id' => 1, 'role'=>'pa', 'api_token' => 'asdfghjkl']); + User::create(['name' => 'test2', 'email'=>'test2@gmail.com', 'password'=>'test2', 'satker_id' => 3,'role'=>'ppk', 'api_token' => '12345678']); } } diff --git a/resources/js/components/ModalKlasifikasiComponent.vue b/resources/js/components/ModalKlasifikasiComponent.vue index 68901fa1ec3311577c3561882fa87e499673fbee..285604a225088ca6eb2ea71fd554f114e0594367 100644 --- a/resources/js/components/ModalKlasifikasiComponent.vue +++ b/resources/js/components/ModalKlasifikasiComponent.vue @@ -38,7 +38,7 @@ <script> export default { - props: ['idPaket', 'namaPaket', 'title', 'status'], + props: ['idPaket', 'namaPaket', 'title', 'status', 'apiToken'], data: function() { return{ item : null, @@ -49,7 +49,8 @@ export default { methods: { klasifikasi: function(id, jenisPaket) { var status = this.status; - var url = "/api/status/klasifikasi/" + this.idPaket + "/" + status + "/" + jenisPaket; + var url = "/api/status/klasifikasi/" + this.idPaket + "/" + status + "/" + jenisPaket + "?api_token=" + this.apiToken; + axios .get(url) .then(response => { diff --git a/resources/js/components/ModalPengumumanComponent.vue b/resources/js/components/ModalPengumumanComponent.vue index a1817457c19b82e2f322d8384d77970faed40b47..bf8ab85a8d9862d28624219b18825d7ebd3cf0ce 100644 --- a/resources/js/components/ModalPengumumanComponent.vue +++ b/resources/js/components/ModalPengumumanComponent.vue @@ -35,7 +35,7 @@ <script> export default { - props: ['idPaket', 'kegiatan', 'namaPaket'], + props: ['idPaket', 'kegiatan', 'namaPaket', 'apiToken'], data: function() { return{ item : null, @@ -44,7 +44,8 @@ export default { }, methods: { simpan: function(id) { - var url = "/api/status/pengumuman/" + this.idPaket; + var url = "/api/status/pengumuman/" + this.idPaket + "?api_token=" + this.apiToken; + axios .get(url) .then(response => { diff --git a/resources/js/components/NavbarComponent.vue b/resources/js/components/NavbarComponent.vue index ad4f3808b711d27c89a4fa63a87ecda7a5ff2354..0328b3c7409ea932b7cc9fb867259c884bd90612 100644 --- a/resources/js/components/NavbarComponent.vue +++ b/resources/js/components/NavbarComponent.vue @@ -27,7 +27,7 @@ <li v-bind:class="{ active: isUnduh }" class="nav-item"> <b-nav-item-dropdown text="Unduh"> <b-dropdown-item href="/unduh/materi">Materi</b-dropdown-item> - <b-dropdown-item v-if="userRole === 'pa' || userRole === 'ppk'" href="/unduh/paketRUP">Paket RUP</b-dropdown-item> + <b-dropdown-item v-if="userRole === 'pa' || userRole === 'ppk'" :href="'/unduh/paketRUP/'+satkerId">Paket RUP</b-dropdown-item> </b-nav-item-dropdown> </li> <li v-if="userRole === 'pa' || userRole === 'ppk'" class="nav-item"> @@ -35,7 +35,7 @@ <b-dropdown-item href="#">Kelola OPD</b-dropdown-item> <b-dropdown-item href="#">Kelola Pengguna</b-dropdown-item> <b-dropdown-item href="#">Kelola Anggaran</b-dropdown-item> - <b-dropdown-item href="/status">Status Paket</b-dropdown-item> + <b-dropdown-item :href="'/status/'+satkerId">Status Paket</b-dropdown-item> </b-nav-item-dropdown> </li> </ul> @@ -56,7 +56,7 @@ <script> import BootstrapVue from "bootstrap-vue"; export default { - props: ["isRekap", "isCariPaket", "isUnduh", "isBerita", "userName", "userRole"], + props: ["isRekap", "isCariPaket", "isUnduh", "isBerita", "userName", "userRole", 'satkerId'], mounted() { console.log("Navbar Component mounted."); } diff --git a/resources/js/components/StatusPaketTableComponent.vue b/resources/js/components/StatusPaketTableComponent.vue index b82f3c82c793d68881b316e453164b6b20b95b6a..3e00d5a43ee9a64abde5f0e095d23256f69acbdf 100644 --- a/resources/js/components/StatusPaketTableComponent.vue +++ b/resources/js/components/StatusPaketTableComponent.vue @@ -1,106 +1,160 @@ -<template> -<div> - +<template> + <div> <div style="padding: 0px 30px 0px 30px"> - <div class="text-center" style="color: #2e3436; font-size: 21pt; text-align: center; padding-top: 15px;"> - Status Paket - </div> - <div style="margin-bottom: 30px"> - </div> + <div + class="text-center" + style="color: #2e3436; font-size: 21pt; text-align: center; padding-top: 15px;" + >Status Paket</div> + <div style="margin-bottom: 30px"></div> </div> <div class="col-sm-12"> <table class="table table-striped text-center" id="status-paket"> - <thead> - <tr style="background-color: #F05155;border-bottom: 4px solid #ddd"> - <th style="color: white" class="text-left">No</th> - <th style="color: white" class="text-left">Kegiatan</th> - <th style="color: white" class="text-left">Nama Paket</th> - <th class="text-left" style="color: white">Pagu (Rp.)</th> - <th class="text-left" style="color: white">Sumber Dana</th> - <th class="text-left" style="color: white">Mulai Pekerjaan</th> - <th class="text-left" style="color: white">D</th> - <th class="text-left" style="color: white">FD</th> - <th class="text-left" style="color: white">U</th> - </tr> - </thead> - <tbody> - <tr v-for="item in paket" :key="item.no"> - <td class="text-left">{{item.no}}</td> - <td class="text-left">{{item.kegiatan}}</td> - <td class="text-left">{{item.namaPaket}}</td> - <td class="text-right">{{item.pagu}}</td> - <td class="text-left">{{item.sumberDana}}</td> - <td class="text-left">{{item.mulaiPekerjaan}}</td> - <td> - <input v-if="item.status === '1'" :id="'klasifikasi' + item.idPaket" v-on:click="klasifikasi(item.idPaket, item.status, item.namaPaket)" type="checkbox" name="D" value="D"> - <input v-else type="checkbox" name="D" value="D" checked disabled> - </td> - <td> - <input v-if="item.status === '1'" type="checkbox" name="FD" value="FD" disabled> - <input v-else-if="item.status === '2'" :id="'finalisasi' + item.idPaket" v-on:click="finalisasi(item.idPaket, item.status, item.namaPaket, item.kodeRUP)" type="checkbox" name="FD" value="FD"> - <input v-else type="checkbox" name="FD" value="FD" checked disabled> - </td> - <td> - <input v-if="item.status === '3'" :id="'umumkan' + item.idPaket" v-on:click="pengumuman(item.idPaket, item.namaPaket, item.kegiatan)" type="checkbox" name="U" value="U"> - <input v-else-if="item.status === '4'" type="checkbox" name="U" value="U" checked disabled> - <input v-else type="checkbox" name="U" value="U" disabled> - </td> - </tr> - </tbody> - <modal-klasifikasi-component - :id="'klasifikasiModal'+idPaketModal" :idPaket="idPaketModal" - :namaPaket="namaPaketModal" :title="titleModal" - :status="statusPaket" ref="modalKlasifikasi"> - </modal-klasifikasi-component> + <thead> + <tr style="background-color: #F05155;border-bottom: 4px solid #ddd"> + <th style="color: white" class="text-left">No</th> + <th style="color: white" class="text-left">Kegiatan</th> + <th style="color: white" class="text-left">Nama Paket</th> + <th class="text-left" style="color: white">Pagu (Rp.)</th> + <th class="text-left" style="color: white">Sumber Dana</th> + <th class="text-left" style="color: white">Mulai Pekerjaan</th> + <th class="text-left" style="color: white">D</th> + <th class="text-left" style="color: white">FD</th> + <th class="text-left" style="color: white">U</th> + </tr> + </thead> + <tbody> + <tr v-for="item in paket" :key="item.no"> + <td class="text-left">{{item.no}}</td> + <td class="text-left">{{item.kegiatan}}</td> + <td class="text-left">{{item.namaPaket}}</td> + <td class="text-right">{{item.pagu}}</td> + <td class="text-left">{{item.sumberDana}}</td> + <td class="text-left">{{item.mulaiPekerjaan}}</td> + <td> + <input v-if="userRole === 'pa'" type="checkbox" name="D" value="D" disabled> + <input + v-else-if="item.status === '1'" + :id="'klasifikasi' + item.idPaket" + v-on:click="klasifikasi(item.idPaket, item.status, item.namaPaket)" + type="checkbox" + name="D" + value="D" + > + <input + v-else-if="item.status > '1'" + :id="'klasifikasi' + item.idPaket" + type="checkbox" + name="D" + value="D" + checked + disabled + > + </td> + <td> + <input + v-if="item.status === '2' && userRole !== 'pa'" + :id="'finalisasi' + item.idPaket" + v-on:click="finalisasi(item.idPaket, item.status, item.namaPaket, item.kodeRUP)" + type="checkbox" + name="FD" + value="FD" + > + <input + v-else-if="item.status > '2'" + :id="'finalisasi' + item.idPaket" + type="checkbox" + name="FD" + value="FD" + checked + disabled + > + <input v-else-if="userRole === 'pa'" type="checkbox" name="FD" value="FD" disabled> + </td> + <td> + <input v-if="userRole === 'ppk'" type="checkbox" name="U" value="U" disabled> + <input + v-else-if="item.status === '3'" + :id="'umumkan' + item.idPaket" + v-on:click="pengumuman(item.idPaket, item.namaPaket, item.kegiatan)" + type="checkbox" + name="U" + value="U" + > + <input + v-else-if="item.status === '4'" + type="checkbox" + name="U" + value="U" + checked + disabled + > + <input v-else type="checkbox" name="U" value="U" disabled> + </td> + </tr> + </tbody> + <modal-klasifikasi-component + :id="'klasifikasiModal'+idPaketModal" + :idPaket="idPaketModal" + :namaPaket="namaPaketModal" + :title="titleModal" + :apiToken="this.apiToken" + :status="statusPaket" + ref="modalKlasifikasi" + ></modal-klasifikasi-component> - <modal-pengumuman-component - :id="'pengumumanModal'+idPaketModal" :idPaket="idPaketModal" - :kegiatan="kegiatanModal" :namaPaket="namaPaketModal"> - </modal-pengumuman-component> - <tfoot> - <tr> - <th class="text-left"></th> - <th class="text-left search">Kegiatan</th> - <th class="text-left search">Nama Paket</th> - <th class="text-right"></th> - <th class="text-left search">Sumber Dana</th> - <th class="text-right"></th> - <th class="text-right"></th> - <th class="text-right"></th> - <th class="text-right"></th> - </tr> + <modal-pengumuman-component + :id="'pengumumanModal'+idPaketModal" + :idPaket="idPaketModal" + :kegiatan="kegiatanModal" + :apiToken="apiToken" + :namaPaket="namaPaketModal" + ></modal-pengumuman-component> + <tfoot> + <tr> + <th class="text-left"></th> + <th class="text-left search">Kegiatan</th> + <th class="text-left search">Nama Paket</th> + <th class="text-right"></th> + <th class="text-left search">Sumber Dana</th> + <th class="text-right"></th> + <th class="text-right"></th> + <th class="text-right"></th> + <th class="text-right"></th> + </tr> </tfoot> </table> </div> -</div> + </div> </template> <script> export default { - props: ['apiLink'], - data: function(){ - return { - paket: null, - idModal: null, - idPaketModal: null, - namaPaketModal: null, - kegiatanModal: null, - titleModal: null, - statusPaket: null - } - }, - mounted: function(){ + props: ["apiLink", "apiToken", "userRole", 'satkerId'], + data: function() { + return { + paket: null, + idModal: null, + idPaketModal: null, + namaPaketModal: null, + kegiatanModal: null, + titleModal: null, + statusPaket: null + }; + }, + mounted: function() { axios .get(this.apiLink) .then(response => { this.paket = response.data.paket; }) - .then(()=>{ + .then(() => { // Setup - add a text input to each footer cell $("#status-paket tfoot th.search").each(function() { var title = $(this).text(); - $(this).html('<input type="text" placeholder="Search ' + title + '" />'); + $(this).html( + '<input type="text" placeholder="Search ' + title + '" />' + ); }); // DataTable @@ -117,93 +171,92 @@ export default { } }); }); - }) - }, - methods: { - pengumuman: function(id, nama, kegiatan) { - this.idModal = 'pengumumanModal' + id; - this.idPaketModal = id; - this.namaPaketModal = nama; - this.kegiatanModal = kegiatan; - $('#umumkan' + id).on('change', function(e){ - if(e.target.checked){ - $('#pengumumanModal' + id).modal('show'); - } - }); + }); + }, + methods: { + pengumuman: function(id, nama, kegiatan) { + this.idModal = "pengumumanModal" + id; + this.idPaketModal = id; + this.namaPaketModal = nama; + this.kegiatanModal = kegiatan; + $("#umumkan" + id).on("change", function(e) { + if (e.target.checked) { + $("#pengumumanModal" + id).modal("show"); + } + }); - $('#batalUmumkan').on('click', function(e) { - $('#umumkan' + id).prop('checked', false); - }); + $("#batalUmumkan").on("click", function(e) { + $("#umumkan" + id).prop("checked", false); + }); - $('#simpanUmumkan').on('click', function(e) { - $('#pengumumanModal' + id).modal('hide'); - window.location.reload(); - }); - }, - klasifikasi: function(id, status, nama) { - this.titleModal = 'Klasifikasi Paket'; - this.idModal = 'klasifikasiModal' + id; - this.idPaketModal = id; - this.namaPaketModal = nama; - this.statusPaket = status; + $("#simpanUmumkan").on("click", function(e) { + $("#pengumumanModal" + id).modal("hide"); + window.location.reload(); + }); + }, + klasifikasi: function(id, status, nama) { + this.titleModal = "Klasifikasi Paket"; + this.idModal = "klasifikasiModal" + id; + this.idPaketModal = id; + this.namaPaketModal = nama; + this.statusPaket = status; - var instance = this; - $('#klasifikasi' + id).on('change', function(e){ - if(e.target.checked){ - instance.$refs.modalKlasifikasi.setJenisPaket(0); - $('#klasifikasiModal' + id).modal('show'); - } - }); + var instance = this; + $("#klasifikasi" + id).on("change", function(e) { + if (e.target.checked) { + instance.$refs.modalKlasifikasi.setJenisPaket(0); + $("#klasifikasiModal" + id).modal("show"); + } + }); - $('#batalKlasifikasi').on('click', function(e) { - $('#klasifikasi' + id).prop('checked', false); - }); + $("#batalKlasifikasi").on("click", function(e) { + $("#klasifikasi" + id).prop("checked", false); + }); - $('#simpanKlasifikasi').on('click', function(e) { - $('#klasifikasiModal' + id).modal('hide'); - window.location.reload(); - }); - }, - finalisasi: function(id, status, nama, kodeRUP) { - this.titleModal = 'Finalisasi Klasifikasi Paket'; - this.idModal = 'finalisasiModal' + id; - this.idPaketModal = id; - this.namaPaketModal = nama; - this.statusPaket = status; + $("#simpanKlasifikasi").on("click", function(e) { + $("#klasifikasiModal" + id).modal("hide"); + window.location.reload(); + }); + }, + finalisasi: function(id, status, nama, kodeRUP) { + this.titleModal = "Finalisasi Klasifikasi Paket"; + this.idModal = "finalisasiModal" + id; + this.idPaketModal = id; + this.namaPaketModal = nama; + this.statusPaket = status; - var instance = this; - var url = "/api/status/jenispaket/" + kodeRUP; - axios - .get(url) - .then(function(instance) { - return function(response) { - var jenisPaket = response.data.jenis_paket; - if ($('#finalisasi' + id).is(':checked')) { - instance.$refs.modalKlasifikasi.setJenisPaket(jenisPaket); - $('#klasifikasiModal' + id).modal('show'); - } - } - }(this)) + var instance = this; + var url = "/api/status/jenispaket/" + kodeRUP; + axios.get(url).then( + (function(instance) { + return function(response) { + var jenisPaket = response.data.jenis_paket; + if ($("#finalisasi" + id).is(":checked")) { + instance.$refs.modalKlasifikasi.setJenisPaket(jenisPaket); + $("#klasifikasiModal" + id).modal("show"); + } + }; + })(this) + ); - $('#batalKlasifikasi').on('click', function(e) { - $('#finalisasi' + id).prop('checked', false); - }); + $("#batalKlasifikasi").on("click", function(e) { + $("#finalisasi" + id).prop("checked", false); + }); - $('#simpanKlasifikasi').on('click', function(e) { - $('#klasifikasiModal' + id).modal('hide'); - window.location.reload(); - }); - } + $("#simpanKlasifikasi").on("click", function(e) { + $("#klasifikasiModal" + id).modal("hide"); + window.location.reload(); + }); } -} - + } +}; </script> <!-- Add "scoped" attribute to limit CSS to this component only --> <style scoped> - tfoot input { - width: 100%; - padding: 3px; - box-sizing: border-box; - } +tfoot input { + width: 100%; + padding: 3px; + box-sizing: border-box; +} </style> \ No newline at end of file diff --git a/resources/js/components/UnduhPaketComponent.vue b/resources/js/components/UnduhPaketComponent.vue index 506d96fbe53f923f79d1d6f6a98b7d41dcc1c377..fc92351194d04ab93e7e881a3f6b14017bdc8eb0 100644 --- a/resources/js/components/UnduhPaketComponent.vue +++ b/resources/js/components/UnduhPaketComponent.vue @@ -59,7 +59,7 @@ window.onload = function(){ } export default { - props: ['apiLink'], + props: ['apiLink', 'satkerId'], data: function(){ return{ resultData: null diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php index 6846c4803e0ec5cb2d8b79d99872c182c40ae9b5..f705656654bef8abfeb09dbb8c68e940cb8fab4c 100644 --- a/resources/views/auth/register.blade.php +++ b/resources/views/auth/register.blade.php @@ -3,7 +3,7 @@ @section('content') <div class="container content"> <div class="row justify-content-center"> - <div class="col-md-8"> + <div class="col-md-10"> <div class="card my-lg-5"> <div class="card-header">{{ __('Register') }}</div> @@ -78,6 +78,24 @@ </div> </div> + <div class="form-group row"> + <label for="role" class="col-md-4 col-form-label text-md-right">{{ __('Satker') }}</label> + + <div class="col-md-6"> + <select name="satker"> + @foreach ($satkers as $satker) + <option value="{{$satker->id}}">{{$satker->nama}}</option> + @endforeach + </select> + + @if ($errors->has('satker')) + <span class="invalid-feedback" role="alert"> + <strong>{{ $errors->first('satker') }}</strong> + </span> + @endif + </div> + </div> + <div class="form-group row mb-0"> <div class="col-md-6 offset-md-4"> <button type="submit" class="btn btn-primary"> diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index f85a8c6f26425afecbd17501ef3473921f052e68..1df588a3b65460b17d0d82d883a3d5ad63270d97 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -10,7 +10,8 @@ @section('navbar') <navbar-component user-name="{{ (Auth::check()) ? Auth::user()->name : ''}}" - user-role="{{ (Auth::check()) ? Auth::user()->role : ''}}"></navbar-component> + user-role="{{ (Auth::check()) ? Auth::user()->role : ''}}" + satker-id="{{(Auth::check()) ? Auth::user()->satker_id : ''}}"></navbar-component> @show <div class="container-fluid"> diff --git a/resources/views/rekap/general.blade.php b/resources/views/rekap/general.blade.php index 3137366eb7d740c966b5133dbeeb85616f50d888..4f874e31d4662da5fcac2eb024a5d1d3763497da 100644 --- a/resources/views/rekap/general.blade.php +++ b/resources/views/rekap/general.blade.php @@ -1,9 +1,5 @@ @extends('layouts.app') -@section('navbar') -<navbar-component is-rekap=true></navbar-component> -@endsection - @section('content') <div class="row justify-content-center"> <div class="col-md p-0 m-0"> diff --git a/resources/views/statusPaket/status.blade.php b/resources/views/statusPaket/status.blade.php index 1171e8256a4734cfdf0e1a2ec821a426cbe85015..f2c94d7f0a5f407e8ee693decf0668698d85f97e 100644 --- a/resources/views/statusPaket/status.blade.php +++ b/resources/views/statusPaket/status.blade.php @@ -4,7 +4,10 @@ <div class="row justify-content-center"> <div class="col-md p-0 m-0"> <div class="jumbotron jumbotron-fluid text-center m-0"> - <status-paket-component api-link={{$apiLink}}></status-paket-component> + <status-paket-component + api-token = "{{ (Auth::check()) ? Auth::user()->api_token : ''}}" + user-role = "{{ (Auth::check()) ? Auth::user()->role : ''}}" + api-link={{$apiLink}} satker-id={{Auth::user()->satker_id}}></status-paket-component> </div> </div> </div> diff --git a/resources/views/unduh/paketRUP.blade.php b/resources/views/unduh/paketRUP.blade.php index e58f2e9ca979937a310f750eee0241ce6839aaad..8d092335fad5b5bd6453eee8c4edf9597f214d5e 100644 --- a/resources/views/unduh/paketRUP.blade.php +++ b/resources/views/unduh/paketRUP.blade.php @@ -4,7 +4,7 @@ <div class="row justify-content-center content"> <div class="col-md p-0 m-0"> <div class="jumbotron jumbotron-fluid m-0"> - <unduh-paket-component api-link="{{$apiLink}}"></unduh-paket-component> + <unduh-paket-component api-link="{{$apiLink}}" satker-id={{Auth::user()->satker_id}}></unduh-paket-component> </div> </div> </div> diff --git a/routes/api.php b/routes/api.php index 060b7978067ab7e0dbd6da25c7d3a7836b4db02f..05df65234a8758f9e94bead09089ee0c5da79afc 100644 --- a/routes/api.php +++ b/routes/api.php @@ -61,8 +61,8 @@ Route::get(Links::LINK_MODAL_PENYEDIA_SWAKELOLA, 'PenyediaSwakelola\PenyediaSwak Route::get(Links::LINK_UNDUH_MATERI, 'Unduh\MateriController@showMateri'); Route::get(Links::LINK_STATUS_PAKET, 'Status\StatusController@showPaket'); -Route::get(Links::LINK_UMUMKAN_PAKET, 'Status\PengumumanController@classifyPaket'); -Route::get(Links::LINK_KLASIFIKASI_PAKET, 'Status\KlasifikasiController@changeStatus'); +Route::get(Links::LINK_UMUMKAN_PAKET, 'Status\PengumumanController@classifyPaket')->middleware('role:pa'); +Route::get(Links::LINK_KLASIFIKASI_PAKET, 'Status\KlasifikasiController@changeStatus')->middleware('role:ppk'); Route::get(Links::LINK_JENIS_PAKET, 'Status\KlasifikasiController@getJenisPaket'); Route::get(Links::LINK_MODAL_CARI_PAKET, 'CariPaket\ModalCariPaketController@showDetailPaket'); diff --git a/routes/web.php b/routes/web.php index 490a852d32e7543925c9540c07709592d668b5d0..b8b030c8a4c51d8b53dc1b03093ce379c3be3804 100644 --- a/routes/web.php +++ b/routes/web.php @@ -136,8 +136,9 @@ Route::get(Links::LINK_DETAIL_KAB, function($id_kabupaten){ return view('rekap.general', ['apiLink'=>$apiLink]); }); -Route::get(Links::LINK_UNDUH_PAKET_RUP, function(){ - return view('unduh.paketRUP', ['apiLink'=>'/api'.Links::LINK_UNDUH_PAKET_RUP]); +Route::get(Links::LINK_UNDUH_PAKET_RUP, function($m_satker_id){ + $apiLink = str_replace('{satker_id}',$m_satker_id,'/api'.Links::LINK_UNDUH_PAKET_RUP); + return view('unduh.paketRUP', ['apiLink'=> $apiLink]); })->middleware('auth'); Route::get(Links::LINK_UNDUH_MATERI, function(){ @@ -171,6 +172,7 @@ Route::get(Links::LINK_FIND_PAKET, function($tahunA, $keyword, $jenisP, $metode) return view('cariPaket.caripaket', ['apiLink'=>'/api'.Links::LINK_FIND_PAKET]); }); -Route::get(Links::LINK_STATUS_PAKET, function(){ - return view('statusPaket.status', ['apiLink'=>'/api'.Links::LINK_STATUS_PAKET]); +Route::get(Links::LINK_STATUS_PAKET, function($m_satker_id){ + $apiLink = str_replace('{satker_id}',$m_satker_id,'/api'.Links::LINK_STATUS_PAKET); + return view('statusPaket.status', ['apiLink'=> $apiLink]); })->middleware('auth'); \ No newline at end of file