Merge branch 'staging' into feature/senior-officer

This commit is contained in:
majid76
2024-11-28 11:25:20 +07:00
39 changed files with 3810 additions and 2292 deletions

View File

@@ -1,16 +1,16 @@
<?php <?php
use Carbon\Carbon; use Carbon\Carbon;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Modules\Lpj\Models\HolidayCalendar; use Modules\Lpj\Models\HolidayCalendar;
use Modules\Lpj\Models\PenawaranDetailTender; use Modules\Lpj\Models\PenawaranDetailTender;
use Modules\Lpj\Models\PenawaranTender; use Modules\Lpj\Models\PenawaranTender;
function formatTanggalIndonesia($date,$time=false) function formatTanggalIndonesia($date, $time = false)
{ {
Carbon::setLocale('id'); Carbon::setLocale('id');
$waktu = Carbon::parse($date); $waktu = Carbon::parse($date);
if(!$time){ if (!$time) {
return $waktu->translatedFormat('d F Y'); return $waktu->translatedFormat('d F Y');
} }
return $waktu->translatedFormat('d F Y') . ' pukul ' . $waktu->format('H.i') . ' WIB'; return $waktu->translatedFormat('d F Y') . ' pukul ' . $waktu->format('H.i') . ' WIB';
@@ -19,7 +19,7 @@ use Modules\Lpj\Models\HolidayCalendar;
function formatRupiah($number) function formatRupiah($number)
{ {
$number = (float)$number; $number = (float) $number;
return 'Rp ' . number_format($number, 2, ',', '.'); return 'Rp ' . number_format($number, 2, ',', '.');
} }
@@ -34,9 +34,10 @@ use Modules\Lpj\Models\HolidayCalendar;
{ {
$penawaran = PenawaranTender::find($id); $penawaran = PenawaranTender::find($id);
$start_date = strtotime($penawaran->start_date); $start_date = strtotime($penawaran->start_date);
$end_date = strtotime($penawaran->end_date); $end_date = strtotime($penawaran->end_date);
$todays_date = strtotime(now()); // $todays_date = strtotime(now());
$todays_date = strtotime("+1 day", strtotime(now()));
$allow = true; $allow = true;
if ($todays_date >= $start_date && $todays_date <= $end_date) { if ($todays_date >= $start_date && $todays_date <= $end_date) {
@@ -61,25 +62,25 @@ use Modules\Lpj\Models\HolidayCalendar;
// DB::enableQueryLog(); // DB::enableQueryLog();
// detail_penawaran apakah isian biaya_penawaran, attachment, dokumen_persetujuan sudah lengkap? // detail_penawaran apakah isian biaya_penawaran, attachment, dokumen_persetujuan sudah lengkap?
$query = PenawaranDetailTender::select('id')->where('penawaran_id', '=', $id)->where('status', '=', 1)->where( $query = PenawaranDetailTender::select('id')->where('penawaran_id', '=', $id)->where('status', '=', 1)->where(
function ($query) { function ($query) {
// no_proposal // no_proposal
$query->orWhere('no_proposal', '', ""); $query->orWhere('no_proposal', '', "");
$query->orWhereNull('no_proposal'); $query->orWhereNull('no_proposal');
// tgl_proposal // tgl_proposal
$query->orWhere('tgl_proposal', '', ""); $query->orWhere('tgl_proposal', '', "");
$query->orWhereNull('tgl_proposal'); $query->orWhereNull('tgl_proposal');
$query->orWhere('biaya_penawaran', '', ""); $query->orWhere('biaya_penawaran', '', "");
$query->orWhereNull('biaya_penawaran'); $query->orWhereNull('biaya_penawaran');
$query->orWhere('attachment', '', ""); $query->orWhere('attachment', '', "");
$query->orWhereNull('attachment'); $query->orWhereNull('attachment');
$query->orWhere('dokumen_persetujuan', '', ""); $query->orWhere('dokumen_persetujuan', '', "");
$query->orWhereNull('dokumen_persetujuan'); $query->orWhereNull('dokumen_persetujuan');
}, },
)->get(); )->get();
// $sql = DB::getQueryLog(); // $sql = DB::getQueryLog();
@@ -102,28 +103,28 @@ use Modules\Lpj\Models\HolidayCalendar;
return implode(' ', $words); return implode(' ', $words);
} }
// generate last penawaran.code // generate last penawaran.code
function onLastnumberCodePenawaran(): string function onLastnumberCodePenawaran()
: string
{ {
// chek data penawaran terakhir --> mengurutkan data berdasarkan kolom `created_at` secara DESC // chek data penawaran terakhir --> mengurutkan data berdasarkan kolom `created_at` secara DESC
$maxCode = PenawaranTender::max('code'); $maxCode = PenawaranTender::max('code');
// $penawaran = PenawaranTender::latest()->first(); // $penawaran = PenawaranTender::latest()->first();
$penawaran = PenawaranTender::where('code','=',$maxCode)->first(); $penawaran = PenawaranTender::where('code', '=', $maxCode)->first();
$code_penawaran_last=''; $code_penawaran_last = '';
$noUrutAkhirString = sprintf("%04s", 1); $noUrutAkhirString = sprintf("%04s", 1);
if($penawaran) if ($penawaran) {
{ $code_penawaran_last = substr($maxCode, -4);
$code_penawaran_last = substr ($maxCode, -4);
$year_penawaran_last = Carbon::parse($penawaran->created_at)->year; $year_penawaran_last = Carbon::parse($penawaran->created_at)->year;
$year_now = Carbon::now()->year; $year_now = Carbon::now()->year;
if($year_now == $year_penawaran_last) if ($year_now == $year_penawaran_last) {
{ $noUrutAkhirString = sprintf("%04s", abs($code_penawaran_last + 1));
$noUrutAkhirString = sprintf("%04s", abs($code_penawaran_last + 1));
} }
} }
return 'NP'.Carbon::now()->format('y').$noUrutAkhirString; return 'NP' . Carbon::now()->format('y') . $noUrutAkhirString;
} }
// andy add // andy add
@@ -135,16 +136,9 @@ use Modules\Lpj\Models\HolidayCalendar;
$hariKerja = 0; $hariKerja = 0;
$tanggalSekarang = $tanggalMulai->copy(); $tanggalSekarang = $tanggalMulai->copy();
// Ambil semua tanggal libur dari tabel holiday calendar
$tanggalLibur = HolidayCalendar::whereBetween('date', [$tanggalMulai, $tanggalSelesai])->pluck('date')->map(
function ($item) {
return Carbon::parse($item)->format('Y-m-d');
},
)->toArray();
while ($tanggalSekarang <= $tanggalSelesai) { while ($tanggalSekarang <= $tanggalSelesai) {
// Cek apakah hari ini bukan Sabtu atau Minggu dan bukan hari libur // Cek apakah hari ini bukan Sabtu atau Minggu dan bukan hari libur
if (!$tanggalSekarang->isWeekend() && !in_array($tanggalSekarang->format('Y-m-d'), $tanggalLibur)) { if (!$tanggalSekarang->isWeekend() && !in_array($tanggalSekarang->format('Y-m-d'), holidays())) {
$hariKerja++; $hariKerja++;
} }
$tanggalSekarang->addDay(); $tanggalSekarang->addDay();
@@ -152,3 +146,12 @@ use Modules\Lpj\Models\HolidayCalendar;
return $hariKerja; return $hariKerja;
} }
function holidays()
{
return HolidayCalendar::pluck('date')->map(
function ($item) {
return Carbon::parse($item)->format('Y-m-d');
},
)->toArray();
}

View File

@@ -1,323 +1,430 @@
<?php <?php
namespace Modules\Lpj\Http\Controllers; namespace Modules\Lpj\Http\Controllers;
use Illuminate\Http\Request; use App\Http\Controllers\Controller;
use Illuminate\Http\Response; use Carbon\Carbon;
use App\Http\Controllers\Controller; use Exception;
use Carbon\Carbon; use Illuminate\Http\JsonResponse;
use Exception; use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel; use Illuminate\Http\Response;
use Illuminate\Http\JsonResponse; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\DB; use Maatwebsite\Excel\Facades\Excel;
use Modules\Lpj\Models\KJPP; use Modules\Lpj\Models\KJPP;
use Modules\Lpj\Models\PenawaranDetailTender; use Modules\Lpj\Models\PenawaranDetailTender;
use Modules\Lpj\Models\PenawaranDetailTenderLog; use Modules\Lpj\Models\PenawaranDetailTenderLog;
use Modules\Lpj\Models\PenawaranTender; use Modules\Lpj\Models\PenawaranTender;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\Permohonan; class OtorisasiPenawaranController extends Controller
class OtorisasiPenawaranController extends Controller
{
public $user;
/**
* Display a listing of the resource.
*/
public function index()
{ {
// dd('hai otorisasi'); public $user;
return view('lpj::otorisasipenawaran.index');
} /**
* Display a listing of the resource.
public function dataForDatatables(Request $request) */
{ public function index()
if (is_null($this->user) || !$this->user->can('debitur.view')) { {
//abort(403, 'Sorry! You are not allowed to view users.'); // dd('hai otorisasi');
return view('lpj::otorisasipenawaran.index');
} }
// Retrieve data from the database public function dataForDatatables(Request $request)
$query =PenawaranTender::query() {
->select('penawaran.*', if (is_null($this->user) || !$this->user->can('debitur.view')) {
'debitures.name as debitures_name', //abort(403, 'Sorry! You are not allowed to view users.');
'permohonan.tanggal_permohonan',
'users.name as user_pemohon',
'branches.name as branches_name',
'tujuan_penilaian.name as tujuan_penilaian_name',
'tujuan_penilaian_kjpp.name as tujuan_penilaian_kjpp_name')
->leftJoin('permohonan', 'permohonan.nomor_registrasi', '=', 'penawaran.nomor_registrasi')
->leftJoin('debitures', 'debitures.id', '=', 'permohonan.debiture_id')
->leftJoin('users', 'users.id', '=', 'permohonan.user_id')
->leftJoin('branches', 'branches.id', '=', 'permohonan.branch_id')
->leftJoin('tujuan_penilaian', 'tujuan_penilaian.id','=','permohonan.tujuan_penilaian_id')
->leftJoin('tujuan_penilaian_kjpp', 'tujuan_penilaian_kjpp.id','=','penawaran.tujuan_penilaian_kjpp_id')
->where('penawaran.status','=','proposal-tender')
->withCount('penawarandetails');
// Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('nomor_registrasi', 'LIKE', '%' . $search . '%');
$q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%');
$q->orWhere('status', 'LIKE', '%' . $search . '%');
});
}
// Apply sorting if provided
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder');
$column = $request->get('sortField');
$query->orderBy($column, $order);
}
// Get the total count of records
$totalRecords = $query->count();
// Apply pagination if provided
if ($request->has('page') && $request->has('size')) {
$page = $request->get('page');
$size = $request->get('size');
$offset = ($page - 1) * $size; // Calculate the offset
$query->skip($offset)->take($size);
}
// Get the filtered count of records
$filteredRecords = $query->count();
// Get the data for the current page
//$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get();
$data = $query->get();
// format date
$i = 0;
foreach ($data as $obj) {
// tanggal_permohonan
if ($obj->tanggal_permohonan) {
$data[$i]->tanggal_permohonan = Carbon::parse($obj->tanggal_permohonan)->format('d M Y');
} }
// date_range // Retrieve data from the database
$data[$i]->date_range = "-"; $query = PenawaranTender::query()->select(
if ($obj->start_date && $obj->end_date) 'penawaran.*',
{ 'debitures.name as debitures_name',
$data[$i]->date_range = Carbon::parse($obj->start_date)->format('d M Y') . ' - ' . 'permohonan.tanggal_permohonan',
Carbon::parse($obj->end_date)->format('d M Y'); 'users.name as user_pemohon',
'branches.name as branches_name',
'tujuan_penilaian.name as tujuan_penilaian_name',
'tujuan_penilaian_kjpp.name as tujuan_penilaian_kjpp_name',
)->leftJoin('permohonan', 'permohonan.nomor_registrasi', '=', 'penawaran.nomor_registrasi')->leftJoin(
'debitures',
'debitures.id',
'=',
'permohonan.debiture_id',
)->leftJoin('users', 'users.id', '=', 'permohonan.user_id')->leftJoin(
'branches',
'branches.id',
'=',
'permohonan.branch_id',
)->leftJoin('tujuan_penilaian', 'tujuan_penilaian.id', '=', 'permohonan.tujuan_penilaian_id')->leftJoin(
'tujuan_penilaian_kjpp',
'tujuan_penilaian_kjpp.id',
'=',
'penawaran.tujuan_penilaian_kjpp_id',
)->where('penawaran.status', '=', 'proposal-tender')->withCount('penawarandetails');
// Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('nomor_registrasi', 'LIKE', '%' . $search . '%');
$q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%');
$q->orWhere('status', 'LIKE', '%' . $search . '%');
});
} }
$i++; // Apply sorting if provided
} if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
// format date $order = $request->get('sortOrder');
$column = $request->get('sortField');
$query->orderBy($column, $order);
}
// Calculate the page count // Get the total count of records
$pageCount = ceil($totalRecords / $request->get('size')); $totalRecords = $query->count();
// Calculate the current page number // Apply pagination if provided
$currentPage = 0 + 1; if ($request->has('page') && $request->has('size')) {
$page = $request->get('page');
$size = $request->get('size');
$offset = ($page - 1) * $size; // Calculate the offset
// Return the response data as a JSON object $query->skip($offset)->take($size);
return response()->json([ }
'draw' => $request->get('draw'),
'recordsTotal' => $totalRecords,
'recordsFiltered' => $filteredRecords,
'pageCount' => $pageCount,
'page' => $currentPage,
'totalCount' => $totalRecords,
'data' => $data
]);
}
public function edit($id) // Get the filtered count of records
{ $filteredRecords = $query->count();
return view('lpj::otorisasipenawaran.edit', compact('id'));
}
public function setData(Request $request): JsonResponse // Get the data for the current page
{ //$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get();
$data = array(); $data = $query->get();
$penawaran = array();
$penawrandetails = array();
$penawarandetailLogs = array();
if (request()->ajax()) {
$id = $request->id;
$penawaran = PenawaranTender::where('status','=','proposal-tender')->find($id);
if ($penawaran) {
$penawarandetailLogs = PenawaranDetailTenderLog::where('penawaran_id',$id)
->leftJoin('kjpp', 'kjpp.id', '=', 'detail_penawaran_logs.kjpp_rekanan_id')
->select('detail_penawaran_logs.*', DB::raw("DATE_FORMAT(detail_penawaran_logs.created_at, '%d-%m-%Y %H:%i') AS created_at2"),'kjpp.code AS kjpp_code', 'kjpp.name AS kjpp_name')
->get();
$penawrandetails = PenawaranDetailTender::where('penawaran_id','=',$id)
->leftJoin('kjpp', 'kjpp.id', '=', 'detail_penawaran.kjpp_rekanan_id')
->select('detail_penawaran.*', 'kjpp.code AS kjpp_code', 'kjpp.name AS kjpp_name')
->where('detail_penawaran.status','=',1)
->get();
if(sizeof($penawarandetailLogs)>0)
{
$h=0;
foreach($penawarandetailLogs as $obj1)
{
if($obj1->dokumen_persetujuan && Storage::disk('public')->exists($obj1->dokumen_persetujuan))
{
$penawarandetailLogs_path = Storage::url($obj1->dokumen_persetujuan);
$penawarandetailLogs[$h]->dokumen_persetujuan = $penawarandetailLogs_path;
}
$h++;
}
// format date
$i = 0;
foreach ($data as $obj) {
// tanggal_permohonan
if ($obj->tanggal_permohonan) {
$data[$i]->tanggal_permohonan = Carbon::parse($obj->tanggal_permohonan)->format('d M Y');
} }
$i=0; // date_range
foreach($penawrandetails as $obj) $data[$i]->date_range = "-";
{ if ($obj->start_date && $obj->end_date) {
if($obj->dokumen_persetujuan && Storage::disk('public')->exists($obj->dokumen_persetujuan)) $data[$i]->date_range = Carbon::parse($obj->start_date)->format('d M Y') . ' - ' . Carbon::parse(
{ $obj->end_date,
$penawrandetails_path = Storage::url($obj->dokumen_persetujuan); )->format('d M Y');
$penawrandetails[$i]->dokumen_persetujuan = $penawrandetails_path;
}
$i++;
} }
$penawaranString = ""; $i++;
if($penawaran->status)
{
$penawaranString = convertSlug($penawaran->status);
$penawaran->status = $penawaranString;
}
$kjpp=null;
$kjpp = KJPP::pluck('name', 'id');
$data['penawaran'] = $penawaran;
$data['penawrandetails'] = $penawrandetails;
$data['penawarandetailLogs'] = $penawarandetailLogs;
$data['status'] = 'success';
$data['message']['message_success'] = array("data successfully found");
} else {
$data['status'] = 'error';
$data['penawaran'] = null;
$data['penawrandetails'] = null;
$data['message']['message_data'] = array("data not found");
} }
} else { // format date
$data['status'] = 'error';
$data['message']['message_ajax'] = array("no ajax request"); // Calculate the page count
$pageCount = ceil($totalRecords / $request->get('size'));
// Calculate the current page number
$currentPage = 0 + 1;
// Return the response data as a JSON object
return response()->json([
'draw' => $request->get('draw'),
'recordsTotal' => $totalRecords,
'recordsFiltered' => $filteredRecords,
'pageCount' => $pageCount,
'page' => $currentPage,
'totalCount' => $totalRecords,
'data' => $data,
]);
} }
public function edit($id)
{
// id ==> penawaran.id
return view('lpj::otorisasipenawaran.edit', compact('id'));
}
public function setData(Request $request): JsonResponse
{
$data = [];
$penawaran = [];
$penawrandetails = [];
$penawarandetailLogs = [];
return response()->json($data); if (request()->ajax()) {
} $id = $request->id;
$penawaran = PenawaranTender::where('status','=','proposal-tender')->find($id);
public function otorisasiPenawaranKJPP(Request $request, $id): JsonResponse if ($penawaran) {
{ $penawarandetailLogs = PenawaranDetailTenderLog::where('penawaran_id',$id)
$data = array(); ->leftJoin('kjpp', 'kjpp.id', '=', 'detail_penawaran_logs.kjpp_rekanan_id')
$dataDetailPenawaranLog=[]; ->select('detail_penawaran_logs.*', DB::raw("DATE_FORMAT(detail_penawaran_logs.created_at, '%d-%m-%Y %H:%i') AS created_at2"),'kjpp.code AS kjpp_code', 'kjpp.name AS kjpp_name')
if (request()->ajax()) { ->get();
$penawrandetails = PenawaranDetailTender::where('penawaran_id','=',$id)
->leftJoin('kjpp', 'kjpp.id', '=', 'detail_penawaran.kjpp_rekanan_id')
->select('detail_penawaran.*', 'kjpp.code AS kjpp_code', 'kjpp.name AS kjpp_name')
->where('detail_penawaran.status','=',1)
->get();
// cek masa aktif penawaran if(sizeof($penawarandetailLogs)>0)
$detailpenawaran = PenawaranDetailTender::find($id); {
$penawaran = PenawaranTender::findOrFail($detailpenawaran->penawaran_id); $h=0;
$checkActiveDateRange = checkActiveDateRangePenawaran($detailpenawaran->penawaran_id); foreach($penawarandetailLogs as $obj1)
// cek masa aktif penawaran {
if($checkActiveDateRange) // tgl_proposal
{ if ($obj1->tgl_proposal) {
DB::beginTransaction(); $penawarandetailLogs[$h]->tgl_proposal = Carbon::parse($obj1->tgl_proposal)->format('d M Y');
try { }
// update status KJPP yg tidak terpilih menjadi 2 -> kalah if($obj1->dokumen_persetujuan && Storage::disk('public')->exists($obj1->dokumen_persetujuan))
// update status Penawaran menjadi SPK {
// update status Permohonan menjadi SPK $penawarandetailLogs_path = Storage::url($obj1->dokumen_persetujuan);
// insert detail_permohonan_log $penawarandetailLogs[$h]->dokumen_persetujuan = $penawarandetailLogs_path;
}
$h++;
}
PenawaranDetailTender::where('status', 1) }
->where('penawaran_id', $request->penawaran_id)
->whereNotIn('id', [$id])
->update(['status' => 2,
'updated_by' => Auth::id(),
'updated_at' => now()
]);
PenawaranTender::where('id', $request->penawaran_id) $i=0;
->update(['status'=>'spk', foreach($penawrandetails as $obj)
'nama_kjpp_sebelumnya'=>$request->kjppName, {
'biaya_kjpp_sebelumnya'=>$request->biaya_penawaran, // tgl_proposal
'tanggal_penilaian_sebelumnya'=>now(), if ($obj->tgl_proposal) {
'authorized_status'=>1, $penawrandetails[$i]->tgl_proposal = Carbon::parse($obj->tgl_proposal)->format('d M Y');
'authorized_at'=>now(), }
'authorized_by'=>Auth::id(),
'updated_by' => Auth::id(),
'updated_at' => now()
]);
Permohonan::where('nomor_registrasi',$request->noReg) if($obj->dokumen_persetujuan && Storage::disk('public')->exists($obj->dokumen_persetujuan))
->update(['status'=>'spk', {
'updated_by' => Auth::id(), $penawrandetails_path = Storage::url($obj->dokumen_persetujuan);
'updated_at' => now() $penawrandetails[$i]->dokumen_persetujuan = $penawrandetails_path;
]);
// log }
$detailPenawaran = PenawaranDetailTender::where('penawaran_id', $request->penawaran_id)->get(); $i++;
if(sizeof($detailPenawaran)>0) }
{
foreach ($detailPenawaran as $model) { $penawaranString = "";
array_push($dataDetailPenawaranLog, [ if($penawaran->status)
'detail_penawaran_id' =>$model->id, {
'kjpp_rekanan_id' =>$model->kjpp_rekanan_id, $penawaranString = convertSlug($penawaran->status);
'penawaran_id' =>$model->penawaran_id, $penawaran->status = $penawaranString;
'biaya_penawaran' =>$model->biaya_penawaran, }
'attachment' =>$model->attachment,
'dokumen_persetujuan' =>$model->dokumen_persetujuan,
'status' =>$model->status,
'authorized_status' =>$model->authorized_status,
'authorized_at' =>$model->authorized_at,
'authorized_at' =>$model->authorized_at,
'created_at' =>$model->created_at,
'updated_at' =>$model->updated_at,
'deleted_at' =>$model->deleted_at,
'created_by' =>$model->created_by,
'updated_by' =>$model->updated_by,
'deleted_by' =>$model->deleted_by
]);
} $kjpp=null;
$kjpp = KJPP::pluck('name', 'id');
$data['penawaran'] = $penawaran;
$data['penawrandetails'] = $penawrandetails;
$data['penawarandetailLogs'] = $penawarandetailLogs;
$data['status'] = 'success';
$data['message']['message_success'] = array("data successfully found");
} else {
$data['status'] = 'error';
$data['penawaran'] = null;
$data['penawrandetails'] = null;
$data['message']['message_data'] = array("data not found");
}
} else {
$data['status'] = 'error';
$data['message']['message_ajax'] = array("no ajax request");
}
PenawaranDetailTenderLog::insert($dataDetailPenawaranLog); return response()->json($data);
} }
// log
public function otorisasiPenawaranKJPP(Request $request, $id): JsonResponse
{
$data = [];
$dataDetailPenawaranLog = [];
if (request()->ajax()) {
DB::commit(); // cek masa aktif penawaran
$data['status'] = 'success'; $detailpenawaran = PenawaranDetailTender::find($id);
$data['message']['message_success'] = array('Otorisasi Penawaran KJPP '.$request->kjppName.' successfully'); $penawaran = PenawaranTender::findOrFail($detailpenawaran->penawaran_id);
} catch (Exception $e) { $checkActiveDateRange = checkActiveDateRangePenawaran($detailpenawaran->penawaran_id);
DB::rollBack(); // cek masa aktif penawaran
$data['status'] = 'error'; if($checkActiveDateRange)
$data['message']['message_error'] = array("Otorisasi Penawaran KJPP failed.."); {
} DB::beginTransaction();
} try {
else
{
$data['status'] = 'error';
$data['message'] ['active_date_range'] = array("Penawaran sudah di tutup");
}
} else { // update status KJPP yg tidak terpilih menjadi 2 -> kalah
$data['status'] = 'error'; // update status Penawaran menjadi SPK
$data['message']['message_ajax'] = array("no ajax request"); // update status Permohonan menjadi SPK
} // insert detail_permohonan_log
return response()->json($data);
}
public function show($id) PenawaranDetailTender::where('status', 1)
{ ->where('penawaran_id', $request->penawaran_id)
$prosespenawaran = PenawaranTender::find($id); ->whereNotIn('id', [$id])
return view('lpj::otorisasipenawaran.show', compact('id','prosespenawaran')); ->update(['status' => 2,
} 'updated_by' => Auth::id(),
} 'updated_at' => now()
]);
PenawaranTender::where('id', $request->penawaran_id)
->update(['status'=>'spk',
'nama_kjpp_sebelumnya'=>$request->kjppName,
'biaya_kjpp_sebelumnya'=>$request->biaya_penawaran,
'tanggal_penilaian_sebelumnya'=>now(),
'authorized_status'=>1,
'authorized_at'=>now(),
'authorized_by'=>Auth::id(),
'updated_by' => Auth::id(),
'updated_at' => now()
]);
Permohonan::where('nomor_registrasi',$request->noReg)
->update(['status'=>'persetujuan-penawaran',
'updated_by' => Auth::id(),
'updated_at' => now()
]);
// log
$detailPenawaran = PenawaranDetailTender::where('penawaran_id', $request->penawaran_id)->get();
if(sizeof($detailPenawaran)>0)
{
foreach ($detailPenawaran as $model) {
array_push($dataDetailPenawaranLog, [
'detail_penawaran_id' =>$model->id,
'kjpp_rekanan_id' =>$model->kjpp_rekanan_id,
'penawaran_id' =>$model->penawaran_id,
'no_proposal' =>$model->no_proposal,
'tgl_proposal' =>$model->tgl_proposal,
'biaya_penawaran' =>$model->biaya_penawaran,
'attachment' =>$model->attachment,
'dokumen_persetujuan' =>$model->dokumen_persetujuan,
'status' =>$model->status,
'authorized_status' =>$model->authorized_status,
'authorized_at' =>$model->authorized_at,
'authorized_at' =>$model->authorized_at,
'created_at' =>$model->created_at,
'updated_at' =>$model->updated_at,
'deleted_at' =>$model->deleted_at,
'created_by' =>$model->created_by,
'updated_by' =>$model->updated_by,
'deleted_by' =>$model->deleted_by
]);
}
PenawaranDetailTenderLog::insert($dataDetailPenawaranLog);
}
// log
DB::commit();
$data['status'] = 'success';
$data['message']['message_success'] = array('Otorisasi Penawaran KJPP '.$request->kjppName.' successfully');
} catch (Exception $e) {
DB::rollBack();
$data['status'] = 'error';
$data['message']['message_error'] = array("Otorisasi Penawaran KJPP failed..");
}
}
else
{
$data['status'] = 'error';
$data['message']['message_error'] = array("Penawaran sudah di tutup");
}
} else {
$data['status'] = 'error';
$data['message']['message_error'] = array("no ajax request");
}
return response()->json($data);
}
public function show($id)
{
$prosespenawaran = PenawaranTender::find($id);
return view('lpj::otorisasipenawaran.show', compact('id','prosespenawaran'));
}
public function penawaranulang(Request $request, $id): JsonResponse
{
// $id ==> penawaran.id
$data = [];
$dataDetailPenawaranLog=[];
if (request()->ajax()) {
DB::beginTransaction();
try {
// update detail_penawaran => detail_penawaran.status = 1 (untuk all KJPP)
// update penawaran => penawaran.status ="tender", penawaran.updated_at, penawaran.updated_by
// update permohonan => permohonan.status ="tender", permohonan.updated_at, permohonan.updated_by
// insert detail_permohonan_log
PenawaranDetailTender::where('penawaran_id', $id)
->update(['status' => 1,
'updated_by' => Auth::id(),
'updated_at' => now()
]);
PenawaranTender::where('id', $id)
->update(['status'=>'tender',
'updated_by' => Auth::id(),
'updated_at' => now()
]);
Permohonan::where('nomor_registrasi',$request->noReg)
->update(['status'=>'tender',
'updated_by' => Auth::id(),
'updated_at' => now()
]);
$detailPenawaran = PenawaranDetailTender::where('penawaran_id', $id)
->distinct()
->get();
// log
if(sizeof($detailPenawaran)>0)
{
foreach ($detailPenawaran as $model) {
array_push($dataDetailPenawaranLog, [
'detail_penawaran_id' =>$model->id,
'kjpp_rekanan_id' =>$model->kjpp_rekanan_id,
'penawaran_id' =>$model->penawaran_id,
'no_proposal' =>$model->no_proposal,
'tgl_proposal' =>$model->tgl_proposal,
'biaya_penawaran' =>$model->biaya_penawaran,
'attachment' =>$model->attachment,
'dokumen_persetujuan' =>$model->dokumen_persetujuan,
'status' =>$model->status,
'authorized_status' =>$model->authorized_status,
'authorized_at' =>$model->authorized_at,
'authorized_at' =>$model->authorized_at,
'created_at' =>$model->created_at,
'updated_at' =>$model->updated_at,
'deleted_at' =>$model->deleted_at,
'created_by' =>$model->created_by,
'updated_by' =>$model->updated_by,
'deleted_by' =>$model->deleted_by
]);
}
PenawaranDetailTenderLog::insert($dataDetailPenawaranLog);
}
// log
DB::commit();
$data['detailPenawaran'] = $detailPenawaran;
$data['status'] = 'success';
$data['message']['message_success'] = array('Penawaran ulang successfully');
} catch (Exception $e) {
DB::rollBack();
$data['status'] = 'error';
$data['message']['message_error'] = array("Penawaran ulang failed..");
}
} else {
$data['status'] = 'error';
$data['message']['message_error'] = array("no ajax request");
}
return response()->json($data);
}
}

View File

@@ -0,0 +1,190 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Modules\Lpj\Http\Requests\PersetujuanPenawaranRequest;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\PersetujuanPenawaran;
class PersetujuanPenawaranController extends Controller
{
public $user;
/**
* Display a listing of the resource.
*/
public function index()
{
$persetujuanPenawarans = PersetujuanPenawaran::all();
return view('lpj::persetujuan_penawaran.index', compact('persetujuanPenawarans'));
}
/**
* Store a newly created resource in storage.
*/
/**
* Store a newly created resource in storage.
*/
/**
* Store a newly created resource in storage.
*/
public function store(PersetujuanPenawaranRequest $request)
{
$validated = $request->validated();
$validated['created_by'] = Auth::id();
$persetujuanPenawaran = PersetujuanPenawaran::updateOrCreate(
['penawaran_id' => $validated['penawaran_id']],
$validated,
);
$folderPath = 'persetujuan_penawaran/' . $validated['penawaran_id'];
if ($request->hasFile('file_persetujuan_penawaran')) {
$persetujuanPenawaran->file_persetujuan_penawaran = $request->file('file_persetujuan_penawaran')->store(
$folderPath,
'public',
);
}
if ($request->hasFile('surat_representasi')) {
$persetujuanPenawaran->surat_representasi = $request->file('surat_representasi')->store(
$folderPath,
'public',
);
}
if ($request->hasFile('bukti_bayar')) {
$persetujuanPenawaran->bukti_bayar = $request->file('bukti_bayar')->store($folderPath, 'public');
}
$persetujuanPenawaran->save();
// Update the status of the related permohonan to 'spk'
$permohonan = Permohonan::find(request()->get('permohonan_id'));
if ($permohonan) {
$permohonan->status_bayar = request()->get('status_bayar');
$permohonan->status = 'spk';
$permohonan->save();
}
return redirect()
->route('persetujuan-penawaran.index')->with('success', 'Persetujuan Penawaran berhasil disimpan.');
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
return view('lpj::persetujuan_penawaran.create');
}
/**
* Display the specified resource.
*/
public function show($id)
{
$permohonan = Permohonan::find($id);
$permohonan->status='tender';
return $permohonan->save();
}
/**
* Show the form for editing the specified resource.
*/
public function edit($id)
{
$permohonan = Permohonan::with(['debiture', 'penawaranTender.detail'])->find($id);
return view('lpj::persetujuan_penawaran.form', compact('permohonan'));
}
/**
* Update the specified resource in storage.
*/
public function update(PersetujuanPenawaranRequest $request, PersetujuanPenawaran $persetujuanPenawaran)
{
$validated = $request->validated();
$validated['updated_by'] = Auth::id();
$persetujuanPenawaran->update($validated);
return redirect()
->route('persetujuan-penawaran.index')->with('success', 'Persetujuan Penawaran updated successfully');
}
/**
* Remove the specified resource from storage.
*/
public function destroy(PersetujuanPenawaran $persetujuanPenawaran)
{
$persetujuanPenawaran->delete();
return redirect()
->route('persetujuan-penawaran.index')->with('success', 'Persetujuan Penawaran deleted successfully');
}
public function dataForDatatables(Request $request)
{
if (is_null($this->user) || !$this->user->can('persetujuan_penawaran.view')) {
//abort(403, 'Sorry! You are not allowed to view persetujuan penawaran.');
}
// Retrieve data from the database
$query = Permohonan::query()->where(['status' => 'persetujuan-penawaran']);
// Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('nomor_registrasi', 'LIKE', "%$search%");
});
}
// Apply sorting if provided
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder');
$column = $request->get('sortField');
$query->orderBy($column, $order);
}
// Get the total count of records
$totalRecords = $query->count();
// Apply pagination if provided
if ($request->has('page') && $request->has('size')) {
$page = $request->get('page');
$size = $request->get('size');
$offset = ($page - 1) * $size; // Calculate the offset
$query->skip($offset)->take($size);
}
// Get the filtered count of records
$filteredRecords = $query->count();
// Get the data for the current page
$data = $query->with(['debiture', 'penawaranTender.detail', 'penawaranTender.persetujuan'])->get();
// Calculate the page count
$pageCount = ceil($totalRecords / $request->get('size'));
// Calculate the current page number
$currentPage = $request->get('page', 1);
// Return the response data as a JSON object
return response()->json([
'draw' => $request->get('draw'),
'recordsTotal' => $totalRecords,
'recordsFiltered' => $filteredRecords,
'pageCount' => $pageCount,
'page' => $currentPage,
'totalCount' => $totalRecords,
'data' => $data,
]);
}
}

View File

@@ -168,6 +168,7 @@ class ProsesPenawaranController extends Controller
public function edit($id) public function edit($id)
{ {
// $id => penawaran.id
return view('lpj::prosespenawaran.edit', compact('id')); return view('lpj::prosespenawaran.edit', compact('id'));
} }
@@ -232,56 +233,70 @@ class ProsesPenawaranController extends Controller
*/ */
public function update(Request $request, $id): JsonResponse public function update(Request $request, $id): JsonResponse
{ {
// $id => detail_penawaran.id
// init // init
$data = array(); $data = array();
$dataPenawaranDetail = array(); $dataPenawaranDetail = array();
if (request()->ajax()) { if (request()->ajax()) {
try { $penawarandetail = PenawaranDetailTender::find($id);
// cek masa aktif penawaran
$checkActiveDateRange = checkActiveDateRangePenawaran($penawarandetail->penawaran_id);
// cek status (penawaran.status = tender)
$penawaran = PenawaranTender::find($penawarandetail->penawaran_id);
if($checkActiveDateRange && ('tender'==$penawaran->status))
{
try {
$dataPenawaranDetail = ['updated_by' => Auth::id(), $dataPenawaranDetail = ['updated_by' => Auth::id(),
'updated_at' => now(), 'updated_at' => now(),
'no_proposal' => $request->no_proposal, 'no_proposal' => $request->no_proposal,
'tgl_proposal' => $request->tgl_proposal, 'tgl_proposal' => $request->tgl_proposal,
'biaya_penawaran' => str_replace(".","",$request->biaya_penawaran) 'biaya_penawaran' => str_replace(".","",$request->biaya_penawaran)
]; ];
if ($request->hasFile('dokumen_persetujuan')) if ($request->hasFile('dokumen_persetujuan'))
{
$file_tmp = $request->file('dokumen_persetujuan');
$folderPath = 'uploads/penawaran/';
if ($file_tmp->isValid())
{ {
$myFile=$file_tmp->getClientOriginalName(); // nama file with extension $file_tmp = $request->file('dokumen_persetujuan');
$file_name = pathinfo($myFile, PATHINFO_FILENAME); // nama file without extension $folderPath = 'uploads/penawaran/';
if ($file_tmp->isValid())
{
$myFile=$file_tmp->getClientOriginalName(); // nama file with extension
$file_name = pathinfo($myFile, PATHINFO_FILENAME); // nama file without extension
$extension = $file_tmp->getClientOriginalExtension(); $extension = $file_tmp->getClientOriginalExtension();
// kjppID_penawaranID_namaFile_userID_time // kjppID_penawaranID_namaFile_userID_time
$newFileName = $request->kjpp_rekanan_id.'_'.$id.'_'.$file_name.'_'.Auth::user()->id."_".time() .'.'. $extension; $newFileName = $request->kjpp_rekanan_id.'_'.$id.'_'.$file_name.'_'.Auth::user()->id."_".time() .'.'. $extension;
Storage::disk('public')->put($folderPath.'/'.$newFileName,file_get_contents($file_tmp)); Storage::disk('public')->put($folderPath.'/'.$newFileName,file_get_contents($file_tmp));
$newFileNameWithPath = $folderPath . $newFileName; $newFileNameWithPath = $folderPath . $newFileName;
$dataPenawaranDetail['attachment'] = $myFile; $dataPenawaranDetail['attachment'] = $myFile;
$dataPenawaranDetail['dokumen_persetujuan'] = $newFileNameWithPath; $dataPenawaranDetail['dokumen_persetujuan'] = $newFileNameWithPath;
}
else
{
$data['status'] = 'error';
$data['message'] ['check_file_jenis'] = array("Silahkan upload file pdf");
}
} }
else
{
$data['status'] = 'error';
$data['message'] ['check_file_jenis'] = array("Silahkan upload file pdf");
}
}
$penawarandetail = PenawaranDetailTender::findOrFail($id); $penawarandetail = PenawaranDetailTender::findOrFail($id);
$penawarandetail->update($dataPenawaranDetail); $penawarandetail->update($dataPenawaranDetail);
$data['detailpenawaran_id'] = $id; $data['detailpenawaran_id'] = $id;
$data['status'] = 'success'; $data['status'] = 'success';
$data['message'] ['message_success'] = array('Proses Penawarn KJPP successfully'); $data['message'] ['message_success'] = array('Proses Penawarn KJPP successfully');
} catch (Exception $e) { } catch (Exception $e) {
$data['status'] = 'error';
$data['message'] ['message_error_try_catch'] = array('Proses Penawarn KJPP failed.');
}
}
else
{
$data['status'] = 'error'; $data['status'] = 'error';
$data['message'] ['message_error_try_catch'] = array('Proses Penawarn KJPP failed.'); $data['message']['active_date_range'] = array("Penawaran sudah di tutup");
} }
} else { } else {
$data['status'] = 'error'; $data['status'] = 'error';
@@ -319,15 +334,17 @@ class ProsesPenawaranController extends Controller
*/ */
public function updateAll(Request $request, $id): JsonResponse public function updateAll(Request $request, $id): JsonResponse
{ {
// $id = penawaran.id
// init // init
$data = array(); $data = array();
$dataPermohonan = array(); $dataPermohonan = array();
$dataPenawaran = array(); $dataPenawaran = array();
$penawaran = PenawaranTender::find($id);
$checkActiveDateRange = checkActiveDateRangePenawaran($id);
// cek masa aktif penawaran // cek masa aktif penawaran
if($checkActiveDateRange) $checkActiveDateRange = checkActiveDateRangePenawaran($id);
// cek status (penawaran.status = tender)
$penawaran = PenawaranTender::find($id);
if($checkActiveDateRange && ('tender'==$penawaran->status))
{ {
$checkKelengkapanDetailKJPP = checkKelengkapanDetailKJPP($id); $checkKelengkapanDetailKJPP = checkKelengkapanDetailKJPP($id);
@@ -376,27 +393,41 @@ class ProsesPenawaranController extends Controller
public function updateKJPPStatus(Request $request, $id): JsonResponse public function updateKJPPStatus(Request $request, $id): JsonResponse
{ {
// $id => detail_penawaran.id
// init // init
$data = array(); $data = array();
$dataDetailPenawaran = array(); $dataDetailPenawaran = array();
try { $detailpenawaran = PenawaranDetailTender::find($id);
$detailpenawaran = PenawaranDetailTender::findOrFail($id); // cek masa aktif penawaran
$data['id']=$id; $checkActiveDateRange = checkActiveDateRangePenawaran($detailpenawaran->penawaran_id);
// cek status (penawaran.status = tender)
$penawaran = PenawaranTender::find($detailpenawaran->penawaran_id);
if($checkActiveDateRange && ('tender'==$penawaran->status))
{
try {
// $data['id']=$id;
$dataDetailPenawaran = ['status' => '0', $dataDetailPenawaran = ['status' => '0',
'updated_by' => Auth::id(), 'updated_by' => Auth::id(),
'updated_at' => now() 'updated_at' => now()
]; ];
$detailpenawaran->update($dataDetailPenawaran); $detailpenawaran->update($dataDetailPenawaran);
$data['status'] = 'success'; $data['status'] = 'success';
$data['message'] ['message_success'] = array('Sukses delete Penawaran KJPP '.$request->kjppName); $data['message'] ['message_success'] = array('Sukses delete Penawaran KJPP '.$request->kjppName);
} catch (Exception $e) { } catch (Exception $e) {
$data['status'] = 'error';
$data['message'] ['message_error'] = array("Gagal delete Penawaran KJPP ".$request->kjppName);
}
}
else
{
$data['status'] = 'error'; $data['status'] = 'error';
$data['message'] ['message_error_try_catch'] = array("Gagal delete Penawaran KJPP ".$request->kjppName); $data['message']['message_error'] = array("Penawaran sudah di tutup");
} }
return response()->json($data); return response()->json($data);
@@ -416,90 +447,102 @@ class ProsesPenawaranController extends Controller
$dataPenawaranDetail = array(); $dataPenawaranDetail = array();
$failed = 0; $failed = 0;
DB::beginTransaction(); // cek masa aktif penawaran
try $checkActiveDateRange = checkActiveDateRangePenawaran($id);
// cek status (penawaran.status = tender)
$penawaran = PenawaranTender::find($id);
if($checkActiveDateRange && ('tender'==$penawaran->status))
{ {
// update detail_penawaran DB::beginTransaction();
$detail_penawaran_ids = $request->input('prosespenawaran_penawarandetail_id', []); try
$no_proposals = $request->input('prosespenawaran_no_proposal', []);
$tgl_proposals = $request->input('prosespenawaran_tgl_proposal', []);
$biaya_penawarans = $request->input('prosespenawaran_biayaPenawaran', []);
$dokumen_penawarans = $request->file('prosespenawaran_dokumenPersetujuan');
$tot_kjpp = sizeof($detail_penawaran_ids);
if($tot_kjpp>0)
{ {
// loop // update detail_penawaran
for($i=0;$i<$tot_kjpp;$i++) $detail_penawaran_ids = $request->input('prosespenawaran_penawarandetail_id', []);
$no_proposals = $request->input('prosespenawaran_no_proposal', []);
$tgl_proposals = $request->input('prosespenawaran_tgl_proposal', []);
$biaya_penawarans = $request->input('prosespenawaran_biayaPenawaran', []);
$dokumen_penawarans = $request->file('prosespenawaran_dokumenPersetujuan');
$tot_kjpp = sizeof($detail_penawaran_ids);
if($tot_kjpp>0)
{ {
$detail_penawaran_id= $detail_penawaran_ids[$i]; // loop
$dataPenawaranDetail = [ for($i=0;$i<$tot_kjpp;$i++)
'no_proposal' => $no_proposals[$i],
'tgl_proposal' => $tgl_proposals[$i],
'biaya_penawaran' => str_replace(".","",$biaya_penawarans[$i]), // 'biaya_penawaran' => str_replace(".","",$request->biaya_penawaran)
'updated_by' => Auth::id(),
'updated_at' => now(),
];
$penawarandetail = PenawaranDetailTender::find($detail_penawaran_id);
if ($dokumen_penawarans)
{ {
if (is_array($dokumen_penawarans) && array_key_exists($i, $dokumen_penawarans)) $detail_penawaran_id= $detail_penawaran_ids[$i];
$dataPenawaranDetail = [
'no_proposal' => $no_proposals[$i],
'tgl_proposal' => $tgl_proposals[$i],
'biaya_penawaran' => str_replace(".","",$biaya_penawarans[$i]), // 'biaya_penawaran' => str_replace(".","",$request->biaya_penawaran)
'updated_by' => Auth::id(),
'updated_at' => now(),
];
$penawarandetail = PenawaranDetailTender::find($detail_penawaran_id);
if ($dokumen_penawarans)
{ {
$file_tmp = $dokumen_penawarans[$i]; if (is_array($dokumen_penawarans) && array_key_exists($i, $dokumen_penawarans))
if($file_tmp->isValid()) {
{ $file_tmp = $dokumen_penawarans[$i];
$folderPath = 'uploads/penawaran/'; if($file_tmp->isValid())
{
$folderPath = 'uploads/penawaran/';
$myFile=$file_tmp->getClientOriginalName(); // nama file with extension $myFile=$file_tmp->getClientOriginalName(); // nama file with extension
$file_name = pathinfo($myFile, PATHINFO_FILENAME); // nama file without extension $file_name = pathinfo($myFile, PATHINFO_FILENAME); // nama file without extension
$extension = $file_tmp->getClientOriginalExtension(); $extension = $file_tmp->getClientOriginalExtension();
// kjppID_penawaranID_namaFile_userID_time // kjppID_penawaranID_namaFile_userID_time
$newFileName = $penawarandetail->kjpp_rekanan_id.'_'.$penawarandetail->penawaran_id.'_'.$file_name.'_'.Auth::user()->id."_".time() .'.'. $extension; $newFileName = $penawarandetail->kjpp_rekanan_id.'_'.$penawarandetail->penawaran_id.'_'.$file_name.'_'.Auth::user()->id."_".time() .'.'. $extension;
Storage::disk('public')->put($folderPath.'/'.$newFileName,file_get_contents($file_tmp)); Storage::disk('public')->put($folderPath.'/'.$newFileName,file_get_contents($file_tmp));
$newFileNameWithPath = $folderPath . $newFileName; $newFileNameWithPath = $folderPath . $newFileName;
$dataPenawaranDetail['attachment'] = $myFile; $dataPenawaranDetail['attachment'] = $myFile;
$dataPenawaranDetail['dokumen_persetujuan'] = $newFileNameWithPath; $dataPenawaranDetail['dokumen_persetujuan'] = $newFileNameWithPath;
}
} }
} }
$checkStatus = $penawarandetail->update($dataPenawaranDetail);
if(!$checkStatus)
$failed++;
}
if($failed>0)
{
DB::rollBack();
$data['status'] = 'error';
$data['message'] ['message_error'] = array('Proses Draft Penawaran KJPP failed');
}
else
{
DB::commit();
$data['status'] = 'success';
$data['message'] ['message_success'] = array('Proses Draft Penawaran KJPP successfully');
} }
$checkStatus = $penawarandetail->update($dataPenawaranDetail);
if(!$checkStatus)
$failed++;
}
if($failed>0)
{
DB::rollBack();
$data['status'] = 'error';
$data['message'] ['message_error'] = array('Proses Draft Penawaran KJPP failed');
} }
else else
{ {
DB::commit(); $data['status'] = 'error';
$data['status'] = 'success'; $data['message'] ['message_error'] = array('Data inti tidak ada.');
$data['message'] ['message_success'] = array('Proses Draft Penawaran KJPP successfully');
} }
} }
else catch (Exception $e)
{ {
// dd($e);
DB::rollBack();
$data['status'] = 'error'; $data['status'] = 'error';
$data['message'] ['message_error'] = array('Data inti tidak ada.'); $data['message'] ['message_error_try_catch'] = array('Proses Draft Penawaran KJPP failed.');
} }
}
} else
catch (Exception $e)
{ {
// dd($e);
DB::rollBack();
$data['status'] = 'error'; $data['status'] = 'error';
$data['message'] ['message_error_try_catch'] = array('Proses Draft Penawaran KJPP failed.'); $data['message']['active_date_range'] = array("Penawaran sudah di tutup");
} }
return response()->json($data); return response()->json($data);
@@ -511,26 +554,38 @@ class ProsesPenawaranController extends Controller
$data = array(); $data = array();
// $data['request']=$request->all(); // $data['request']=$request->all();
$dataPenawaranDetail = array(); $dataPenawaranDetail = array();
try // cek masa aktif penawaran
$checkActiveDateRange = checkActiveDateRangePenawaran($request->penawaran_id);
// cek status (penawaran.status = tender)
$penawaran = PenawaranTender::find($request->penawaran_id);
if($checkActiveDateRange && ('tender'==$penawaran->status))
{ {
$dataPenawaranDetail = [ try
'penawaran_id' => $request->penawaran_id, {
'kjpp_rekanan_id' => $request->kjpp_id, $dataPenawaranDetail = [
'created_by' => Auth::id(), 'penawaran_id' => $request->penawaran_id,
'created_at' => Carbon::now() 'kjpp_rekanan_id' => $request->kjpp_id,
]; 'created_by' => Auth::id(),
'created_at' => Carbon::now()
];
PenawaranDetailTender::create($dataPenawaranDetail); PenawaranDetailTender::create($dataPenawaranDetail);
$data['status'] = 'success'; $data['status'] = 'success';
$data['message'] ['message_success'] = array('Proses Tambah KJPP successfully'); $data['message'] ['message_success'] = array('Proses Tambah KJPP successfully');
}
catch (Exception $e)
{
// dd($e);
$data['status'] = 'error';
$data['message'] ['message_error_try_catch'] = array('Proses Tambah KJPP failed.');
}
} }
catch (Exception $e) else
{ {
// dd($e);
$data['status'] = 'error'; $data['status'] = 'error';
$data['message'] ['message_error_try_catch'] = array('Proses Tambah KJPP failed.'); $data['message']['active_date_range'] = array("Penawaran sudah di tutup");
} }
return response()->json($data); return response()->json($data);
} }
@@ -964,6 +1019,7 @@ class ProsesPenawaranController extends Controller
public function showPermohonan($id) public function showPermohonan($id)
{ {
// $id => permohonan.id
$permohonan = Permohonan::find($id); $permohonan = Permohonan::find($id);
return view('lpj::prosespenawaran.showPermohonan', compact('id', 'permohonan')); return view('lpj::prosespenawaran.showPermohonan', compact('id', 'permohonan'));
} }

View File

@@ -34,8 +34,10 @@ use Illuminate\Support\Facades\Auth;
} }
// Retrieve data from the database // Retrieve data from the database
$query =Permohonan::query()->with(['penawaran','penawaran.tujuanPenilaianKjpp']) // $query =Permohonan::query()->with(['penawaran','penawaran.tujuanPenilaianKjpp'])->where('permohonan.status','=','spk');
->where('permohonan.status','=','spk'); // $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian','penilaian'])->get();
$query =Permohonan::query()->with(['user', 'debiture', 'branch', 'tujuanPenilaian','penilaian','penawaran','penawaran.tujuanPenilaianKjpp'])->where('permohonan.status','=','spk');
// Apply search filter if provided // Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) { if ($request->has('search') && !empty($request->get('search'))) {
@@ -78,21 +80,27 @@ use Illuminate\Support\Facades\Auth;
$i=0; $i=0;
foreach($data as $obj) foreach($data as $obj)
{ {
if($obj->tanggal_penilaian_sebelumnya) // tanggal_permohonan
if ($obj->tanggal_permohonan) {
$data[$i]->tanggal_permohonan = Carbon::parse($obj->tanggal_permohonan)->format('d M Y');
}
if($obj->penawaran->tanggal_penilaian_sebelumnya)
{ {
$data[$i]->tanggal_penilaian_sebelumnya = Carbon::parse($obj->tanggal_penilaian_sebelumnya)->format('d F Y H:i:s'); $data[$i]->penawaran->tanggal_penilaian_sebelumnya = Carbon::parse($obj->penawaran->tanggal_penilaian_sebelumnya)->format('d F Y H:i:s');
} }
if($obj->biaya_kjpp_sebelumnya) if($obj->penawaran->biaya_kjpp_sebelumnya)
{ {
$data[$i]->biaya_kjpp_sebelumnya = formatRupiah($obj->biaya_kjpp_sebelumnya); $data[$i]->penawaran->biaya_kjpp_sebelumnya = formatRupiah($obj->penawaran->biaya_kjpp_sebelumnya);
} }
// date_range // date_range
if($obj->start_date && $obj->end_date) if($obj->penawaran->start_date && $obj->penawaran->end_date)
{ {
$data[$i]->date_range = Carbon::parse($obj->start_date)->format('d M Y').' - '.Carbon::parse($obj->end_date)->format('d M Y'); $data[$i]->date_range = Carbon::parse($obj->penawaran->start_date)->format('d M Y').' - '.
Carbon::parse($obj->penawaran->end_date)->format('d M Y');
} }
@@ -107,7 +115,6 @@ use Illuminate\Support\Facades\Auth;
$i++; $i++;
} }
// Calculate the page count // Calculate the page count
$pageCount = ceil($totalRecords / $request->get('size')); $pageCount = ceil($totalRecords / $request->get('size'));
@@ -147,6 +154,8 @@ use Illuminate\Support\Facades\Auth;
->where('detail_penawaran.status','=',1) ->where('detail_penawaran.status','=',1)
->where('penawaran.id','=', $id) ->where('penawaran.id','=', $id)
->select('penawaran.*', 'detail_penawaran.attachment as attachmentku', ->select('penawaran.*', 'detail_penawaran.attachment as attachmentku',
'detail_penawaran.no_proposal as detail_penawaran_no_proposal',
'detail_penawaran.tgl_proposal as detail_penawaran_tgl_proposal',
'detail_penawaran.biaya_penawaran as detail_penawaran_biaya_penawaran', 'detail_penawaran.biaya_penawaran as detail_penawaran_biaya_penawaran',
'kjpp.name as kjpp_name', 'kjpp.name as kjpp_name',
'kjpp.address as kjpp_address', 'kjpp.address as kjpp_address',
@@ -161,6 +170,9 @@ use Illuminate\Support\Facades\Auth;
$data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->first(); $data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->first();
if($penawaran->detail_penawaran_tgl_proposal)
$penawaran->detail_penawaran_tgl_proposal = Carbon::parse($penawaran->detail_penawaran_tgl_proposal)->format('d F Y');
return view('lpj::spk.edit', compact('data', 'penawaran')); return view('lpj::spk.edit', compact('data', 'penawaran'));
} }
@@ -177,6 +189,9 @@ use Illuminate\Support\Facades\Auth;
->where('detail_penawaran.status','=',1) ->where('detail_penawaran.status','=',1)
->where('penawaran.id','=', $id) ->where('penawaran.id','=', $id)
->select('penawaran.*', 'detail_penawaran.attachment as attachmentku', ->select('penawaran.*', 'detail_penawaran.attachment as attachmentku',
'detail_penawaran.no_proposal as detail_penawaran_no_proposal',
'detail_penawaran.tgl_proposal as detail_penawaran_tgl_proposal',
'detail_penawaran.biaya_penawaran as detail_penawaran_biaya_penawaran',
'kjpp.name as kjpp_name', 'kjpp.name as kjpp_name',
'kjpp.address as kjpp_address', 'kjpp.address as kjpp_address',
'jenis_laporan.name as jenis_laporan_name' 'jenis_laporan.name as jenis_laporan_name'
@@ -188,6 +203,9 @@ use Illuminate\Support\Facades\Auth;
->select('permohonan.*', 'jenis_jaminan.name as jenis_jaminan_name'); ->select('permohonan.*', 'jenis_jaminan.name as jenis_jaminan_name');
$data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->first(); $data = $permohonan->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->first();
if($penawaran->detail_penawaran_tgl_proposal)
$penawaran->detail_penawaran_tgl_proposal = Carbon::parse($penawaran->detail_penawaran_tgl_proposal)->format('d F Y');
$folderPath = 'uploads/spk/'; $folderPath = 'uploads/spk/';
$extension = '.pdf'; $extension = '.pdf';

View File

@@ -23,6 +23,7 @@ use Modules\Lpj\Exports\PenawaranTenderExport;
use Modules\Lpj\Http\Requests\TenderPenawaranRequest; use Modules\Lpj\Http\Requests\TenderPenawaranRequest;
use Modules\Lpj\Jobs\SendPenawaranKJPPTenderJob; use Modules\Lpj\Jobs\SendPenawaranKJPPTenderJob;
use Modules\Lpj\Jobs\SendPenawaranTenderJob; use Modules\Lpj\Jobs\SendPenawaranTenderJob;
use Modules\Lpj\Models\PenawaranEmailTenderLog;
class TenderController extends Controller class TenderController extends Controller
{ {
@@ -618,7 +619,9 @@ class TenderController extends Controller
$penawaran = PenawaranTender::where('nomor_registrasi', '=', $noreg)->first(); $penawaran = PenawaranTender::where('nomor_registrasi', '=', $noreg)->first();
// Retrieve data from the database // Retrieve data from the database
$query = PenawaranDetailTender::query()->where('penawaran_id', '=', $penawaran->id)->with(['kjpp', 'penawaran', 'emailTenderLog']); $query = PenawaranDetailTender::query()->where('penawaran_id', '=', $penawaran->id)->with(['kjpp', 'penawaran', 'penawaran.emailTenderLog']);
// dd($query);
// Apply sorting if provided // Apply sorting if provided
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
@@ -641,23 +644,8 @@ class TenderController extends Controller
} }
} }
// Get the total count of records
$totalRecords = $query->count();
// Apply pagination if provided
if ($request->has('page') && $request->has('size')) {
$page = $request->get('page');
$size = $request->get('size');
$offset = ($page - 1) * $size; // Calculate the offset
$query->skip($offset)->take($size);
}
// Get the filtered count of records
$filteredRecords = $query->count();
// Get the data for the current page // Get the data for the current page
$data = $query->with(['kjpp', 'penawaran', 'emailTenderLog'])->get(); $data = $query->get();
// add column "No" // add column "No"
$i = 0; $i = 0;
@@ -670,20 +658,9 @@ class TenderController extends Controller
$j++; $j++;
} }
// Calculate the page count
$pageCount = ceil($totalRecords / $request->get('size'));
// Calculate the current page number
$currentPage = 0 + 1;
// Return the response data as a JSON object // Return the response data as a JSON object
return response()->json([ return response()->json([
'draw' => $request->get('draw'), 'draw' => $request->get('draw'),
'recordsTotal' => $totalRecords,
'recordsFiltered' => $filteredRecords,
'pageCount' => $pageCount,
'page' => $currentPage,
'totalCount' => $totalRecords,
'data' => $data, 'data' => $data,
]); ]);
} }
@@ -800,8 +777,6 @@ class TenderController extends Controller
$dp1 = PenawaranDetailTender::with('kjpp')->where('kjpp_rekanan_id', '=', $id)->first(); $dp1 = PenawaranDetailTender::with('kjpp')->where('kjpp_rekanan_id', '=', $id)->first();
// dd($dp1->kjpp);
foreach ($permohonan->debiture->documents as $document) { foreach ($permohonan->debiture->documents as $document) {
$village_permohonan = $document->village_code; $village_permohonan = $document->village_code;
$district_permohonan = $document->district_code; $district_permohonan = $document->district_code;
@@ -814,21 +789,89 @@ class TenderController extends Controller
$cities = City::where('code', $city_permohonan)->get(); $cities = City::where('code', $city_permohonan)->get();
$provinces = Province::where('code', $province_permohonan)->get(); $provinces = Province::where('code', $province_permohonan)->get();
try { $subject = 'Send Penawaran K J P P Email';
$balikan = SendPenawaranKJPPTenderJob::dispatch(
$kjpps,
$dp1,
$penawaran,
$permohonan,
$villages,
$districts,
$cities,
$provinces
);
} catch (\Exception $e) {
return redirect()->route('tender.penawaran.ulang.index')->with('error', 'Email Penawaran Gagal Terkirim!');
}
return redirect()->route('tender.penawaran.ulang.index')->with('success', 'Email Penawaran Berhasil Terkirim!'); $body_pdf = view('lpj::penawaran.kirimEmailKJPP', [
'dp1' => $dp1,
'penawaran' => $penawaran,
'permohonan' => $permohonan,
'kjpps' => $kjpps,
'villages' => $villages,
'districts' => $districts,
'cities' => $cities,
'provinces' => $provinces
])->render();
SendPenawaranKJPPTenderJob::dispatch(
$kjpps,
$dp1,
$penawaran,
$permohonan,
$villages,
$districts,
$cities,
$provinces
);
try {
// Proses log email
foreach ($kjpps as $email) {
// Cek apakah sudah ada log dengan status 'failed' untuk email ini
$log = PenawaranEmailTenderLog::where('penawaran_id', $penawaran->id)
->where('to_email', $email)
->where('status', 'failed')
->first();
$log1 = PenawaranEmailTenderLog::where('penawaran_id', $penawaran->id)
->where('to_email', $email)
->where('status', 'success')
->first();
if ($log) {
// Jika log ditemukan dan statusnya 'failed', update status menjadi 'success'
$log->update([
'status' => 'success',
'error_message' => null, // Reset error_message saat status diubah menjadi success
'updated_at' => now(),
]);
} else if ($log1) {
// Jika log ditemukan dan statusnya 'success' biarkan saja
$log1->update([ // Reset error_message saat status diubah menjadi success
'updated_at' => now(),
]);
} else {
// Jika tidak ada log gagal, buat log baru dengan status 'success'
PenawaranEmailTenderLog::create([
'penawaran_id' => $penawaran->id,
'kjpp' => $dp1->kjpp->code . ' | ' . $dp1->kjpp->name,
'to_email' => $email,
'subject' => $subject,
'body_pdf' => $body_pdf,
'status' => 'success',
'error_message' => null, // Tidak ada error message
'created_at' => now(),
'updated_at' => now(),
]);
}
}
return redirect()->route('tender.penawaran.ulang.index')->with('success', 'Email Penawaran Berhasil Terkirim!');
} catch (\Exception $e) {
// Log email gagal
foreach ($kjpps as $email) {
PenawaranEmailTenderLog::create([
'penawaran_id' => $penawaran->id,
'kjpp' => $dp1->kjpp->code . ' | ' . $dp1->kjpp->name,
'to_email' => $email,
'subject' => $subject,
'body_pdf' => $body_pdf,
'status' => 'failed',
'error_message' => $e->getMessage(),
'created_at' => now(),
'updated_at' => now(),
]);
}
return redirect()->route('tender.penawaran.showKirimEmail', ['noreg' => $noreg])->with('error', 'Email Penawaran Gagal Terkirim!');
}
} }
} }

View File

@@ -0,0 +1,70 @@
<?php
namespace Modules\Lpj\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class PersetujuanPenawaranRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'penawaran_id' => 'nullable|exists:penawaran,id',
'nomor_proposal_penawaran' => 'nullable|string|max:255',
'tanggal_proposal_penawaran' => 'nullable|date',
'biaya_final' => 'nullable|numeric|min:0',
'sla_resume' => 'nullable|date',
'sla_final' => 'nullable|date|after_or_equal:sla_resume',
'file_persetujuan_penawaran' => 'nullable|file|mimes:pdf,doc,docx|max:10240',
'surat_representasi' => 'nullable|file|mimes:pdf,doc,docx|max:10240',
'bukti_bayar' => 'nullable|file|mimes:pdf,jpg,jpeg,png|max:10240',
'status' => 'nullable|boolean',
'authorized_status' => 'boolean',
'authorized_at' => 'nullable|date',
'authorized_by' => 'nullable|exists:users,id',
'catatan' => 'nullable|string',
];
}
public function messages()
{
return [
'penawaran_id.required' => 'Penawaran ID wajib diisi.',
'penawaran_id.exists' => 'Penawaran ID tidak valid.',
'nomor_proposal_penawaran.required' => 'Nomor proposal penawaran wajib diisi.',
'tanggal_proposal_penawaran.required' => 'Tanggal proposal penawaran wajib diisi.',
'tanggal_proposal_penawaran.date' => 'Tanggal proposal penawaran harus berupa tanggal yang valid.',
'biaya_final.required' => 'Biaya final wajib diisi.',
'biaya_final.numeric' => 'Biaya final harus berupa angka.',
'biaya_final.min' => 'Biaya final tidak boleh kurang dari 0.',
'sla_resume.required' => 'SLA Resume wajib diisi.',
'sla_resume.date' => 'SLA Resume harus berupa tanggal yang valid.',
'sla_final.required' => 'SLA Final wajib diisi.',
'sla_final.date' => 'SLA Final harus berupa tanggal yang valid.',
'sla_final.after_or_equal' => 'SLA Final harus sama dengan atau setelah SLA Resume.',
'file_persetujuan_penawaran.file' => 'File Persetujuan Penawaran harus berupa file.',
'file_persetujuan_penawaran.mimes' => 'File Persetujuan Penawaran harus berupa file PDF, DOC, atau DOCX.',
'file_persetujuan_penawaran.max' => 'Ukuran File Persetujuan Penawaran tidak boleh lebih dari 10MB.',
'surat_representasi.file' => 'Surat Representasi harus berupa file.',
'surat_representasi.mimes' => 'Surat Representasi harus berupa file PDF, DOC, atau DOCX.',
'surat_representasi.max' => 'Ukuran Surat Representasi tidak boleh lebih dari 10MB.',
'bukti_bayar.file' => 'Bukti Bayar harus berupa file.',
'bukti_bayar.mimes' => 'Bukti Bayar harus berupa file PDF, JPG, JPEG, atau PNG.',
'bukti_bayar.max' => 'Ukuran Bukti Bayar tidak boleh lebih dari 10MB.',
'region_id.required' => 'Region ID wajib diisi.',
'region_id.exists' => 'Region ID tidak valid.',
'status.required' => 'Status wajib diisi.',
'status.boolean' => 'Status harus berupa nilai boolean.',
'authorized_status.boolean' => 'Status otorisasi harus berupa nilai boolean.',
'authorized_at.date' => 'Tanggal otorisasi harus berupa tanggal yang valid.',
'authorized_by.exists' => 'ID pengguna yang mengotorisasi tidak valid.',
'status_bayar.required' => 'Status bayar wajib diisi.',
'status_bayar.in' => 'Status bayar harus berupa "sudah_bayar" atau "belum_bayar".',
];
}
}

View File

@@ -27,9 +27,4 @@ class PenawaranDetailTender extends Model
{ {
return $this->belongsTo(KJPP::class, 'kjpp_rekanan_id', 'id'); return $this->belongsTo(KJPP::class, 'kjpp_rekanan_id', 'id');
} }
public function emailTenderLog(): BelongsTo
{
return $this->belongsTo(PenawaranEmailTenderLog::class, 'penawaran_id', 'id', PenawaranTender::class);
}
} }

View File

@@ -15,4 +15,9 @@ class PenawaranEmailTenderLog extends Model
* The attributes that are mass assignable. * The attributes that are mass assignable.
*/ */
protected $guarded = ['id']; protected $guarded = ['id'];
public function penawaran()
{
return $this->belongsTo(PenawaranTender::class, 'penawaran_id', 'id');
}
} }

View File

@@ -24,8 +24,17 @@ class PenawaranTender extends Model
{ {
return $this->hasMany(PenawaranDetailTender::class, 'penawaran_id', 'id')->where('status', '=', 1); return $this->hasMany(PenawaranDetailTender::class, 'penawaran_id', 'id')->where('status', '=', 1);
} }
public function detail(){
return $this->belongsTo(PenawaranDetailTender::class, 'id', 'penawaran_id')->where('status', 1);
}
// andy add // andy add
public function emailTenderLog(): HasMany
{
return $this->hasMany(PenawaranEmailTenderLog::class, 'penawaran_id', 'id');
}
public function penawaranKjpp() public function penawaranKjpp()
{ {
return $this->hasMany(PenawaranDetailTender::class, 'penawaran_id'); return $this->hasMany(PenawaranDetailTender::class, 'penawaran_id');
@@ -46,4 +55,8 @@ class PenawaranTender extends Model
{ {
return $this->belongsTo(JenisLaporan::class, 'jenis_laporan_id', 'id'); return $this->belongsTo(JenisLaporan::class, 'jenis_laporan_id', 'id');
} }
public function persetujuan(){
return $this->belongsTo(PersetujuanPenawaran::class, 'id', 'penawaran_id');
}
} }

View File

@@ -136,7 +136,7 @@
public function penawaranTender() public function penawaranTender()
{ {
return $this->hasMany(PenawaranTender::class, 'nomor_registrasi'); return $this->belongsTo(PenawaranTender::class, 'nomor_registrasi', 'nomor_registrasi');
} }
public function region() public function region()

View File

@@ -0,0 +1,57 @@
<?php
namespace Modules\Lpj\Models;
use Modules\Usermanagemenet\Models\User;
class PersetujuanPenawaran extends Base
{
protected $table = 'persetujuan_penawaran';
protected $fillable = [
'penawaran_id',
'nomor_proposal_penawaran',
'tanggal_proposal_penawaran',
'biaya_final',
'sla_resume',
'sla_final',
'file_persetujuan_penawaran',
'surat_representasi',
'bukti_bayar',
'status',
'authorized_status',
'authorized_at',
'authorized_by',
'status',
'catatan',
];
protected $casts = [
'tanggal_proposal_penawaran' => 'date',
'sla_resume' => 'date',
'sla_final' => 'date',
'biaya_final' => 'decimal:2',
'status' => 'boolean',
'authorized_status' => 'boolean',
'authorized_at' => 'datetime',
];
// Relationship with Penawaran
public function penawaran()
{
return $this->belongsTo(PenawaranTender::class, 'penawaran_id');
}
// Relationship with Region
public function region()
{
return $this->belongsTo(Region::class);
}
// Relationship with User (for authorized_by)
public function authorizedBy()
{
return $this->belongsTo(User::class, 'authorized_by');
}
}

View File

@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('penawaran_email_tender_log', function (Blueprint $table) {
$table->text('error_message')->nullable()->change();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('penawaran_email_tender_log', function (Blueprint $table) {
$table->text('error_message')->change();
});
}
};

View File

@@ -0,0 +1,47 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
/**
* Run the migrations.
*/
public function up()
: void
{
Schema::table('persetujuan_penawaran', function (Blueprint $table) {
$table->string('nomor_proposal_penawaran')->nullable()->change();
$table->date('tanggal_proposal_penawaran')->nullable()->change();
$table->string('biaya_final')->nullable()->change();
$table->renameColumn('sls_resume', 'sla_resume');
$table->datetime('sla_resume')->nullable()->change();
$table->datetime('sla_final')->nullable()->change();
$table->string('catatan')->nullable()->change();
$table->string('attachment')->nullable()->change();
$table->foreignId('region_id')->nullable()->change();
$table->boolean('status')->nullable()->change();
});
}
/**
* Reverse the migrations.
*/
public function down()
: void
{
Schema::table('persetujuan_penawaran', function (Blueprint $table) {
$table->string('nomor_proposal_penawaran')->nullable(false)->change();
$table->date('tanggal_proposal_penawaran')->nullable(false)->change();
$table->string('biaya_final')->nullable(false)->change();
$table->renameColumn('sla_resume', 'sls_resume');
$table->datetime('sls_resume')->nullable(false)->change();
$table->datetime('sla_final')->nullable(false)->change();
$table->string('catatan')->nullable(false)->change();
$table->string('attachment')->nullable(false)->change();
$table->foreignId('region_id')->nullable(false)->change();
$table->boolean('status')->nullable(false)->change();
});
}
};

View File

@@ -0,0 +1,30 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('persetujuan_penawaran', function (Blueprint $table) {
$table->unsignedBigInteger('created_by')->nullable();
$table->unsignedBigInteger('updated_by')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('persetujuan_penawaran', function (Blueprint $table) {
$table->dropColumn('created_by');
$table->dropColumn('updated_by');
});
}
};

View File

@@ -0,0 +1,44 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class UpdatePersetujuanPenawaranTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('persetujuan_penawaran', function (Blueprint $table) {
// Drop the existing attachment column
$table->dropForeign(['region_id']);
$table->dropColumn('attachment');
// Add new columns for file attachments
$table->string('file_persetujuan_penawaran')->nullable();
$table->string('surat_representasi')->nullable();
$table->string('bukti_bayar')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('persetujuan_penawaran', function (Blueprint $table) {
// Reverse the changes
$table->string('attachment')->nullable();
$table->dropColumn('file_persetujuan_penawaran');
$table->dropColumn('surat_representasi');
$table->dropColumn('bukti_bayar');
});
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,35 @@
function hitungHariKerja(tanggalMulai, tanggalSelesai) {
tanggalMulai = new Date(tanggalMulai);
tanggalMulai.setHours(0, 0, 0, 0);
tanggalSelesai = new Date(tanggalSelesai);
tanggalSelesai.setHours(23, 59, 59, 999);
let hariKerja = 0;
let tanggalSekarang = new Date(tanggalMulai);
// You'll need to implement a way to get holiday dates from your server
// For this example, we'll assume you have a global variable holidayDates
// that contains an array of holiday date strings in 'YYYY-MM-DD' format
const tanggalLibur = window.holidayDates || [];
while (tanggalSekarang <= tanggalSelesai) {
const dayOfWeek = tanggalSekarang.getDay();
const dateString = tanggalSekarang.toISOString().split("T")[0];
// Check if it's not Saturday (6) or Sunday (0) and not a holiday
if (
dayOfWeek !== 0 &&
dayOfWeek !== 6 &&
!tanggalLibur.includes(dateString)
) {
hariKerja++;
}
tanggalSekarang.setDate(tanggalSekarang.getDate() + 1);
}
return hariKerja;
}
// Make the function available globally
window.hitungHariKerja = hitungHariKerja;

View File

@@ -193,15 +193,18 @@
</div> </div>
@if($detail->details) @if($detail->details)
@php $custom_field = json_decode($detail->details,true) @endphp @if($detail->jenisLegalitasJaminan->custom_field)
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> @php $custom_field = json_decode($detail->details,true) @endphp
<label class="form-label max-w-56 capitalize"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
{{ str_replace('_',' ',$detail->jenisLegalitasJaminan->custom_field) }} <label class="form-label max-w-56 capitalize">
</label> {{ str_replace('_',' ',$detail->jenisLegalitasJaminan->custom_field) }}
<div class="flex flex-wrap items-baseline w-full"> </label>
<input class="input" type="text" name="custom_field[][$detail->jenisLegalitasJaminan->custom_field]" value="{{ $custom_field[$detail->jenisLegalitasJaminan->custom_field] }}"> <div class="flex flex-wrap items-baseline w-full">
<input class="input" type="text" name="custom_field[][$detail->jenisLegalitasJaminan->custom_field]" value="{{ $custom_field[$detail->jenisLegalitasJaminan->custom_field] }}">
</div>
</div> </div>
</div> @endif
@else @else
@if($detail->jenisLegalitasJaminan->custom_field) @if($detail->jenisLegalitasJaminan->custom_field)
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5"> <div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
@@ -583,7 +586,7 @@
</a> </a>
</div> </div>
`; `;
}else if (typeof dokumenJaminan === 'string' && dokumenNomor === null) { } else if (typeof dokumenJaminan === 'string' && dokumenNomor === null) {
return ` return `
<div class="flex w-full lg:w-[30%]"> <div class="flex w-full lg:w-[30%]">
<span class="flex-1 mt-2 text-info text-sm">Nomor Dokumen : --</span> <span class="flex-1 mt-2 text-info text-sm">Nomor Dokumen : --</span>

View File

@@ -11,6 +11,7 @@
@section('content') @section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto"> <div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<!-- $id ==> penawaran.id -->
<input type="hidden" id="id" name="id" value="{{ $id }}"> <input type="hidden" id="id" name="id" value="{{ $id }}">
<div class="card pb-2.5"> <div class="card pb-2.5">
<div class="card-header" id="basic_settings"> <div class="card-header" id="basic_settings">
@@ -63,6 +64,9 @@
<div class="card min-w-full"> <div class="card min-w-full">
<div class="card-header"> <div class="card-header">
<h3 class="card-title">Data KJPP</h3> <h3 class="card-title">Data KJPP</h3>
<button type="button" class="btn btn-sm btn-danger" id="{{$route[1]}}_toPenawaranUlang">
<i class="ki-filled ki-wrench"></i>Penawaran Ulang
</button>
</div> </div>
<div class="card-table scrollable-x-auto"> <div class="card-table scrollable-x-auto">
<table class="table table-border align-middle text-gray-700 font-medium text-sm"> <table class="table table-border align-middle text-gray-700 font-medium text-sm">

View File

@@ -177,11 +177,12 @@
actions: { actions: {
title: 'Status', title: 'Status',
render: (item, data) => { render: (item, data) => {
// data.id ==> penawaran.id
return `<div class="flex flex-nowrap justify-center"> return `<div class="flex flex-nowrap justify-center">
<a onclick="showOtorisasiPenawaranData(${data.id})" class="btn btn-sm btn-icon btn-clear btn-primary" title="Detail"> <a onclick="showOtorisasiPenawaranData(${data.id})" class="btn btn-sm btn-icon btn-clear btn-primary" title="Detail">
<i class="ki-outline ki-eye"></i> <i class="ki-outline ki-eye"></i>
</a> </a>
<a class="btn btn-sm btn-icon btn-clear btn-info" title="Proses Penawaran" href="otorisasitender/penawaran/${data.id}/edit"> <a class="btn btn-sm btn-icon btn-clear btn-info" title="Otorisasi Penawaran" href="otorisasitender/penawaran/${data.id}/edit">
<i class="ki-outline ki-notepad-edit"></i> <i class="ki-outline ki-notepad-edit"></i>
</a> </a>
</div>`; </div>`;

View File

@@ -75,7 +75,7 @@ function otorisasiKJPP(penawaran_id, id, kjpp_id, kjppName, biaya_penawaran) {
} }
else else
{ {
Swal.fire('Error!', response.message.message_error_try_catch[0], 'error'); Swal.fire('Error!', response.message.message_error[0], 'error');
} }

View File

@@ -146,51 +146,65 @@
i++; i++;
}); });
} }
/*
// update proses penawaran ulang & permohonan status // update status
$("#{{$route[1]}}_toEdit").click(function(e) { $("#{{$route[1]}}_toPenawaranUlang").click(function(e) {
e.preventDefault(); e.preventDefault();
//define variable Swal.fire({
let token = "{{ csrf_token() }}"; title: ' ',
let useURL = ""; text: "Yakin akan Penawaran ulang?",
icon: 'warning',
var input_data = new Object(); showCancelButton: true,
input_data._token = token; confirmButtonColor: '#3085d6',
input_data.id = "{{ $id }}"; cancelButtonColor: '#d33',
$.ajax({ confirmButtonText: 'Yes'
url: useURL, }).then((result) => {
type: "PUT", if (result.isConfirmed)
cache: false, {
data: input_data, //define variable
dataType: "json", // $id ==> penawaran.id
success: function(response) { let token = "{{ csrf_token() }}";
console.log(response); let noReg = $("#textReg").text();
if('success' == response.status) let useURL = "{{ route($route[0].'.'.$route[1].'.penawaranulang',$id) }}";
{
// toastr.success(response.message); var input_data = new Object();
toastrSuccess(response.message); input_data._token = token;
setTimeout(function () { input_data.id = "{{ $id }}";
var url = "{{ route('tender.prosespenawaran.index') }}"; input_data.noReg =noReg;
$(location).attr('href',url); // alert('url = ' + useURL);
// window.location.href = "https://www.newurl.com"; $.ajax({
}, 2000); url: useURL,
} type: "PUT",
else cache: false,
{ data: input_data,
// toastr.error(response.message); dataType: "json",
toastrError(response.message); success: function(response) {
} console.log(response);
}, if('success' == response.status)
error: function(response, textStatus, errorThrown) { {
// var errors = response.responseJSON.errors; swal.fire('Sukses Penawaran ulang!', response.message.message_success[0], 'success').then(() => {
// console.log(errors); var url = "{{ route('otorisasitender.penawaran.index') }}";
console.log(response); $(location).attr('href',url);
});
}
else
{
Swal.fire('Error!', response.message.message_error[0], 'error');
}
},
error: function(response, textStatus, errorThrown) {
// var errors = response.responseJSON.errors;
// console.log(errors);
console.log(response);
}
});
} }
}); })
}); });
*/
</script> </script>
@endpush @endpush

View File

@@ -24,7 +24,6 @@
const apiUrl = element.getAttribute('data-api-url'); const apiUrl = element.getAttribute('data-api-url');
const dataTableOptions = { const dataTableOptions = {
apiEndpoint: apiUrl, apiEndpoint: apiUrl,
pageSize: 5,
columns: { columns: {
no: { no: {
title: 'No', title: 'No',
@@ -92,7 +91,31 @@
status: { status: {
title: 'Status', title: 'Status',
render: (item, data) => { render: (item, data) => {
return `${data.emailTenderLog?.status ?? '-'}` // Cek jika ada email log
if (data.penawaran.email_tender_log && data.penawaran.email_tender_log.length > 0) {
// Buat full string KJPP untuk matching
const kjppString = `${data.kjpp.code} | ${data.kjpp.name}`;
// Filter log berdasarkan string KJPP yang sesuai
const log = data.penawaran.email_tender_log.find(log =>
log.kjpp === kjppString
);
if (log) {
// Set warna badge berdasarkan status
const statusColors = {
'success': 'badge-success',
'failed': 'badge-danger'
};
const color = statusColors[log.status] || 'badge-secondary';
return `<span class="badge ${color} mb-1">${log.status}</span>`;
}
}
// Jika tidak ada log, tampilkan strip
return '<span class="badge">-</span>';
} }
}, },
actions: { actions: {

View File

@@ -34,8 +34,7 @@
</div> </div>
<div class="card-body grid gap-5"> <div class="card-body grid gap-5">
<div class="grid"> <div class="grid">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" <div class="card card-grid min-w-full" data-datatable="false" id="kjpp-table"
id="kjpp-table"
data-api-url="{{ route('tender.penawaran.showKirimSurat.datatables', $noreg) }}"> data-api-url="{{ route('tender.penawaran.showKirimSurat.datatables', $noreg) }}">
<div class="card-header py-5 flex-wrap"> <div class="card-header py-5 flex-wrap">
<div class="card-title"> <div class="card-title">
@@ -89,21 +88,6 @@
</table> </table>
</div> </div>
<div
class="card-footer justify-center md:justify-between flex-col md:flex-row gap-3 text-gray-600 text-2sm font-medium">
<div class="flex items-center gap-2">
Show
<select class="select select-sm w-16" data-datatable-size="true" name="perpage">
</select>
per page
</div>
<div class="flex items-center gap-4">
<span data-datatable-info="true"> </span>
<div class="pagination" data-datatable-pagination="true">
</div>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -0,0 +1,126 @@
@extends('layouts.main')
@section('breadcrumbs')
{{ Breadcrumbs::render(request()->route()->getName()) }}
@endsection
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card pb-2.5">
<div class="card-header" id="basic_settings">
<div class="card-title flex flex-row gap-1.5">
Persetujuan Penawaran
</div>
<div class="flex items-center gap-2">
<a href="{{ route('persetujuan-penawaran.index') }}" class="btn btn-xs btn-info"><i class="ki-filled ki-exit-left"></i> Back</a>
</div>
</div>
<div class="card-body">
<form action="{{ route('persetujuan-penawaran.store') }}" method="POST" class="grid gap-5" enctype="multipart/form-data">
@csrf
<input type="hidden" name="permohonan_id" value="{{ $permohonan->id }}">
<input type="hidden" name="penawaran_id" value="{{ $permohonan->penawaran->id ?? old('penawaran_id') }}">
<input type="hidden" name="nomor_proposal_penawaran" value="{{ $permohonan->penawaran->detail->no_proposal ?? old('nomor_proposal_penawaran') }}">
<input type="hidden" name="tanggal_proposal_penawaran" value="{{ $permohonan->penawaran->detail->tgl_proposal ?? old('tanggal_proposal_penawaran') }}">
<input type="hidden" name="biaya_final" value="{{ $permohonan->penawaran->detail->biaya_penawaran ?? old('biaya_final') }}">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Status Bayar
</label>
<div class="flex flex-wrap items-baseline w-full">
<select class="input tomselect w-full @error('status_bayar') border-danger bg-danger-light @enderror" name="status_bayar" id="status_bayar">
<option value="">Pilih Status Bayar</option>
<option value="sudah_bayar" {{ (old('status_bayar') == 'sudah_bayar') || (isset($permohonan) && $permohonan->status_bayar == 'sudah_bayar') ? 'selected' : '' }}>Sudah Bayar</option>
<option value="belum_bayar" {{ (old('status_bayar') == 'belum_bayar') || (isset($permohonan) && $permohonan->status_bayar == 'belum_bayar') ? 'selected' : '' }}>Belum Bayar</option>
</select>
@error('status_bayar')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
SLA Resume
</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="date" name="sla_resume" id="sla_resume" class="input w-full @error('sla_resume') border-danger bg-danger-light @enderror" value="{{ old('sla_resume', $persetujuanPenawaran->sla_resume ?? '') }}">
@error('sla_resume')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
SLA Final
</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="date" name="sla_final" id="sla_final" class="input w-full @error('sla_final') border-danger bg-danger-light @enderror" value="{{ old('sla_final', $persetujuanPenawaran->sla_final ?? '') }}">
@error('sla_final')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
File Persetujuan Penawaran
</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="file" name="file_persetujuan_penawaran" id="file_persetujuan_penawaran" class="file-input w-full @error('file_persetujuan_penawaran') border-danger bg-danger-light @enderror" accept=".pdf,.doc,.docx">
@error('file_persetujuan_penawaran')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Surat Representasi
</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="file" name="surat_representasi" id="surat_representasi" class="file-input w-full @error('surat_representasi') border-danger bg-danger-light @enderror" accept=".pdf,.doc,.docx">
@error('surat_representasi')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Bukti Bayar
</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="file" name="bukti_bayar" id="bukti_bayar" class="file-input w-full @error('bukti_bayar') border-danger bg-danger-light @enderror" accept=".pdf,.jpg,.jpeg,.png">
@error('bukti_bayar')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Catatan
</label>
<div class="flex flex-wrap items-baseline w-full">
<textarea name="catatan" id="catatan" rows="4" class="textarea w-full @error('catatan') border-danger bg-danger-light @enderror" placeholder="Masukkan catatan">{{ old('catatan', $persetujuanPenawaran->catatan ?? '') }}</textarea>
@error('catatan')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex justify-end">
<button type="submit" class="btn btn-primary">
Proses
</button>
</div>
</form>
</div>
</div>
</div>
@endsection

View File

@@ -0,0 +1,229 @@
@extends('layouts.main')
@section('breadcrumbs')
{{ Breadcrumbs::render('persetujuan-penawaran') }}
@endsection
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5" data-datatable-state-save="false" id="persetujuan-penawaran-table" data-api-url="{{ route('persetujuan-penawaran.datatables') }}">
<div class="card-header py-5 flex-wrap">
<h3 class="card-title">
Daftar Persetujuan Penawaran
</h3>
<div class="flex flex-wrap gap-2 lg:gap-5">
<div class="flex">
<label class="input input-sm"> <i class="ki-filled ki-magnifier"> </i>
<input placeholder="Search Persetujuan Penawaran" id="search" type="text" value="">
</label>
</div>
<div class="flex flex-wrap gap-2.5">
<div class="h-[24px] border border-r-gray-200"></div>
<a class="btn btn-sm btn-light" href="#"> Export to Excel </a>
</div>
</div>
</div>
<div class="card-body">
<div class="scrollable-x-auto">
<table class="table table-auto table-border align-middle text-gray-700 font-medium text-sm" data-datatable-table="true">
<thead>
<tr>
<th class="w-14">
<input class="checkbox checkbox-sm" data-datatable-check="true" type="checkbox"/>
</th>
<th class="min-w-[150px]" data-datatable-column="nomor_registrasi">
<span class="sort"> <span class="sort-label"> Nomor Registrasi </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="nama_debitur">
<span class="sort"> <span class="sort-label"> Nama Debitur </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="nomor_proposal_penawaran">
<span class="sort"> <span class="sort-label"> Nomor Proposal </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="tanggal_proposal_penawaran">
<span class="sort"> <span class="sort-label"> Tanggal Proposal </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="dokumen_persetujuan">
<span class="sort"> <span class="sort-label"> Dokumen Persetujuan </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="biaya_final">
<span class="sort"> <span class="sort-label"> Biaya Final </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="sla_resume">
<span class="sort"> <span class="sort-label"> SLA Resume </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="sla_final">
<span class="sort"> <span class="sort-label"> SLA Final </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="catatan">
<span class="sort"> <span class="sort-label"> Catatan </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[50px] text-center" data-datatable-column="actions">Action</th>
</tr>
</thead>
</table>
</div>
</div>
</div>
@endsection
@push('scripts')
<script type="text/javascript">
function prosesData(data) {
Swal.fire({
title: 'Persetujuan Penawaran',
text: "Apakah Anda yakin ingin menyetujui data penawaran ini?",
icon: 'info',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Ya',
cancelButtonText: 'Tidak'
}).then((result) => {
if (result.isConfirmed) {
window.location.href = `persetujuan-penawaran/${data}/edit`;
} else if (result.dismiss==='cancel') {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}'
}
});
$.ajax(`persetujuan-penawaran/${data}`, {
type: 'GET',
data: {'status': 'tender'}
}).then((response) => {
swal.fire('Success!', 'Data Persetujuan telah dikembalikan untuk di kaji ulang', 'success').then(() => {
window.location.reload();
});
}).catch((error) => {
console.error('Error:', error);
Swal.fire('Error!', 'An error occurred while deleting the file.', 'error');
});
}
})
}
</script>
<script type="module">
const element = document.querySelector('#persetujuan-penawaran-table');
const searchInput = document.getElementById('search');
const apiUrl = element.getAttribute('data-api-url');
const dataTableOptions = {
apiEndpoint: apiUrl,
pageSize: 5,
columns: {
select: {
render: (item, data, context) => {
const checkbox = document.createElement('input');
checkbox.className = 'checkbox checkbox-sm';
checkbox.type = 'checkbox';
checkbox.value = data.id.toString();
checkbox.setAttribute('data-datatable-row-check', 'true');
return checkbox.outerHTML.trim();
},
},
nomor_registrasi: {
title: 'Nomor Registrasi',
},
nama_debitur: {
title: 'Nama Debitur',
render: (item, data) => {
return `${data.debiture.name}`;
},
},
nomor_proposal_penawaran: {
title: 'Nomor Proposal',
render: (item, data) => {
return `${data.penawaran_tender.detail.no_proposal}`;
},
},
tanggal_proposal_penawaran: {
title: 'Tanggal Proposal',
render: (item, data) => {
return window.formatTanggalIndonesia(`${data.penawaran_tender.detail.tgl_proposal}`);
},
},
dokumen_persetujuan: {
title: 'Dokumen Persetujuan',
render: (item, data) => {
if (data.penawaran_tender.detail.dokumen_persetujuan) {
return `<a href="${data.penawaran_tender.detail.dokumen_persetujuan}" download="${data.penawaran_tender.detail.dokumen_persetujuan}" target="_blank" class="badge badge-sm badge-outline">
Download <i class="ki-filled ki-cloud-download"></i>
</a>`;
} else {
return 'Tidak ada dokumen';
}
},
},
biaya_final: {
title: 'Biaya Final',
render: (item, data) => {
return window.formatRupiah(`${data.penawaran_tender.detail.biaya_penawaran}`);
},
},
sla_resume: {
title: 'SLA Resume',
render: (item, data) => {
if(data.penawaran_tender.persetujuan) {
if (data.penawaran_tender.persetujuan.sla_resume) {
return window.formatTanggalIndonesia(`${data.penawaran_tender.persetujuan.sla_resume}`);
}
}
return '-';
},
},
sla_final: {
title: 'SLA Final',
render: (item, data) => {
if(data.penawaran_tender.persetujuan) {
if (data.penawaran_tender.persetujuan.sla_final) {
return window.formatTanggalIndonesia(`${data.penawaran_tender.persetujuan.sla_final}`);
}
}
return '-';
}
},
catatan: {
title: 'Catatan',
render: (item, data) => {
if(data.penawaran_tender.persetujuan) {
return data.penawaran_tender.persetujuan.catatan;
}
return '-';
},
},
actions: {
title: 'Action',
render: (item, data) => {
return `<div class="flex flex-nowrap justify-center">
<a class="btn btn-sm btn-outline btn-info" onclick="prosesData(${data.id})">
<i class="ki-filled ki-double-check"></i>
</a>
</div>`;
},
}
},
};
let dataTable = new KTDataTable(element, dataTableOptions);
// Custom search functionality
searchInput.addEventListener('input', function () {
const searchValue = this.value.trim();
dataTable.search(searchValue, true);
});
</script>
@endpush

View File

@@ -65,6 +65,9 @@
<div class="card min-w-full"> <div class="card min-w-full">
<div class="card-header"> <div class="card-header">
<h3 class="card-title">Data KJPP</h3> <h3 class="card-title">Data KJPP</h3>
<button type="button" class="btn btn-sm btn-danger" id="{{$route[1]}}_toProsesPenawaran">
<i class="ki-filled ki-wrench"></i>Penawaran Ulang
</button>
</div> </div>
<div class="card-table scrollable-x-auto"> <div class="card-table scrollable-x-auto">
<table class="table table-border align-middle text-gray-700 font-medium text-sm"> <table class="table table-border align-middle text-gray-700 font-medium text-sm">

View File

@@ -128,6 +128,9 @@
<div class="card min-w-full"> <div class="card min-w-full">
<div class="card-header"> <div class="card-header">
<h3 class="card-title">Data KJPP</h3> <h3 class="card-title">Data KJPP</h3>
<button type="button" class="btn btn-sm btn-danger" id="{{$route[1]}}_toPenawaranUlang">
<i class="ki-filled ki-wrench"></i>Penawaran Ulang
</button>
</div> </div>
<div class="card-table scrollable-x-auto"> <div class="card-table scrollable-x-auto">
<table class="table table-border align-middle text-gray-700 font-medium text-sm"> <table class="table table-border align-middle text-gray-700 font-medium text-sm">

View File

@@ -34,6 +34,7 @@
} }
function updateData(id, kjpp_id, kjppName){ function updateData(id, kjpp_id, kjppName){
// id => detail_penawaran.id
removeErrorCssMsg(); removeErrorCssMsg();
let no_proposal = $("#{{$route[1]}}_no_proposal_"+id).val(); let no_proposal = $("#{{$route[1]}}_no_proposal_"+id).val();
let tgl_proposal = $("#{{$route[1]}}_tgl_proposal_"+id).val(); let tgl_proposal = $("#{{$route[1]}}_tgl_proposal_"+id).val();
@@ -92,6 +93,7 @@
} }
function deleteData(data, kjppName) { function deleteData(data, kjppName) {
// data => detail_penawaran.id
Swal.fire({ Swal.fire({
title: 'Are you sure?', title: 'Are you sure?',
text: "You won't be able to revert KJPP "+kjppName+"!", text: "You won't be able to revert KJPP "+kjppName+"!",
@@ -126,7 +128,7 @@
} }
else else
{ {
Swal.fire('Error!', response.message.message_error_try_catch[0], 'error'); Swal.fire('Error!', response.message.message_error[0], 'error');
} }

View File

@@ -66,6 +66,7 @@
function setTablesKJPP1(datas) function setTablesKJPP1(datas)
{ {
// value.id => detail_penawaran.id
let i=1; let i=1;
$.each(datas, function(key, value){ $.each(datas, function(key, value){
var kjppName = value.kjpp_code+' - '+value.kjpp_name; var kjppName = value.kjpp_code+' - '+value.kjpp_name;
@@ -288,6 +289,65 @@
}); });
} }
});
// update status
$("#{{$route[1]}}_toProsesPenawaran").click(function(e) {
e.preventDefault();
Swal.fire({
title: ' ',
text: "Yakin akan Penawaran ulang?",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Yes'
}).then((result) => {
if (result.isConfirmed)
{
//define variable
// $id ==> penawaran.id
let token = "{{ csrf_token() }}";
let noReg = $("#textReg").text();
let useURL = "{{ route('otorisasitender.penawaran.penawaranulang',$id) }}";
var input_data = new Object();
input_data._token = token;
input_data.id = "{{ $id }}";
input_data.noReg =noReg;
// alert('url = ' + useURL);
$.ajax({
url: useURL,
type: "PUT",
cache: false,
data: input_data,
dataType: "json",
success: function(response) {
console.log(response);
if('success' == response.status)
{
swal.fire('Sukses Penawaran ulang!', response.message.message_success[0], 'success').then(() => {
var url = "{{ route('tender.prosespenawaran.index') }}";
$(location).attr('href',url);
});
}
else
{
Swal.fire('Error!', response.message.message_error[0], 'error');
}
},
error: function(response, textStatus, errorThrown) {
// var errors = response.responseJSON.errors;
// console.log(errors);
console.log(response);
}
});
}
})
}); });
</script> </script>
@endpush @endpush

View File

@@ -147,5 +147,63 @@
$('#{{$route[1]}}_kjpps1').append(new Option(stringVal, value.id)); $('#{{$route[1]}}_kjpps1').append(new Option(stringVal, value.id));
}); });
} }
// update status
$("#{{$route[1]}}_toPenawaranUlang").click(function(e) {
e.preventDefault();
Swal.fire({
title: ' ',
text: "Yakin akan Penawaran ulang?",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Yes'
}).then((result) => {
if (result.isConfirmed)
{
//define variable
// $id ==> penawaran.id
let token = "{{ csrf_token() }}";
let noReg = $("#textReg").text();
let useURL = "{{ route('otorisasitender.penawaran.penawaranulang',$id) }}";
var input_data = new Object();
input_data._token = token;
input_data.id = "{{ $id }}";
input_data.noReg =noReg;
// alert('url = ' + useURL);
$.ajax({
url: useURL,
type: "PUT",
cache: false,
data: input_data,
dataType: "json",
success: function(response) {
console.log(response);
if('success' == response.status)
{
swal.fire('Sukses Penawaran ulang!', response.message.message_success[0], 'success').then(() => {
var url = "{{ route('tender.prosespenawaran.index') }}";
$(location).attr('href',url);
});
}
else
{
Swal.fire('Error!', response.message.message_error[0], 'error');
}
},
error: function(response, textStatus, errorThrown) {
// var errors = response.responseJSON.errors;
// console.log(errors);
console.log(response);
}
});
}
})
});
</script> </script>
@endpush @endpush

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -36,18 +36,38 @@
<span class="sort-icon"> </span> </span> <span class="sort-icon"> </span> </span>
</th> </th>
<th class="min-w-[150px]" data-datatable-column="code"> <th class="min-w-[150px]" data-datatable-column="code">
<span class="sort"> <span class="sort-label"> Kode Penawaran </span> <span class="sort"> <span class="sort-label"> Nomor Penawaran </span>
<span class="sort-icon"> </span> </span> <span class="sort-icon"> </span> </span>
</th> </th>
<th class="min-w-[150px]" data-datatable-column="start_date"> <th class="min-w-[150px]" data-datatable-column="tanggal_permohonan">
<span class="sort"> <span class="sort-label"> Tanggal Permohonan </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="user_id">
<span class="sort"> <span class="sort-label"> User Pemohon </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="branch_id">
<span class="sort"> <span class="sort-label"> Cabang Pemohon </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="debitur_id">
<span class="sort"> <span class="sort-label"> Debitur </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="date_range">
<span class="sort"> <span class="sort-label"> Tanggal Penawaran </span> <span class="sort"> <span class="sort-label"> Tanggal Penawaran </span>
<span class="sort-icon"> </span> </span> <span class="sort-icon"> </span> </span>
</th> </th>
<th class="min-w-[150px]" data-datatable-column="tujuan_penilaian_kjpp_id"> <th class="min-w-[150px]" data-datatable-column="tujuan_penilaian_id">
<span class="sort"> <span class="sort-label"> Tujuan Penilaian </span> <span class="sort"> <span class="sort-label"> Tujuan Penilaian </span>
<span class="sort-icon"> </span> </span> <span class="sort-icon"> </span> </span>
</th> </th>
<th class="min-w-[150px]" data-datatable-column="nama_kjpp_sebelumnya"> <th class="min-w-[150px]" data-datatable-column="tujuan_penilaian_kjpp_id">
<span class="sort"> <span class="sort-label"> Tujuan Penilaian KJPP </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="kjpp_data">
<span class="sort"> <span class="sort-label">KJPP Data</span> <span class="sort"> <span class="sort-label">KJPP Data</span>
<span class="sort-icon"> </span> </span> <span class="sort-icon"> </span> </span>
</th> </th>
@@ -84,15 +104,6 @@
var url = "{{ url('/') }}"+url1; var url = "{{ url('/') }}"+url1;
$(location).attr('href',url); $(location).attr('href',url);
} }
function formatTanggalIndonesia(dateString) {
const date = new Date(dateString);
const day = date.getDate().toString().padStart(2, '0');
const monthNames = ['Januari', 'Februari', 'Maret', 'April', 'Mei', 'Juni', 'Juli', 'Agustus', 'September', 'Oktober', 'November', 'Desember'];
const month = monthNames[date.getMonth()];
const year = date.getFullYear();
return `${day} ${month} ${year}`;
}
</script> </script>
<script type="module"> <script type="module">
const element = document.querySelector('#spk-table'); const element = document.querySelector('#spk-table');
@@ -117,7 +128,7 @@
title: 'Nomor Registrasi', title: 'Nomor Registrasi',
}, },
code: { code: {
title: 'Kode Penawaran', title: 'Nomor Penawaran',
render: (item, data) => { render: (item, data) => {
if(data.penawaran) { if(data.penawaran) {
return `${data.penawaran.code}`; return `${data.penawaran.code}`;
@@ -126,16 +137,41 @@
return '-'; return '-';
}, },
}, },
date_range: { tanggal_permohonan: {
title: 'Tanggal Penawaran', title: 'Tanggal Permohonan',
},
user_id: {
title: 'User Pemohon',
render: (item, data) => { render: (item, data) => {
const startDate = formatTanggalIndonesia(data.penawaran.start_date); return `${data.user.name}`;
const endDate = formatTanggalIndonesia(data.penawaran.end_date);
return `${startDate} - ${endDate}`;
}, },
}, },
tujuan_penilaian_kjpp_name: { branch_id: {
title: 'Cabang Pemohon',
render: (item, data) => {
return `${data.branch.name}`;
},
},
debitur_id: {
title: 'Debitur',
render: (item, data) => {
if (data.debiture) {
return `${data.debiture.name}`;
}
return "-";
},
},
date_range: {
title: 'Tanggal Penawaran'
},
tujuan_penilaian_id: {
title: 'Tujuan Penilaian', title: 'Tujuan Penilaian',
render: (item, data) => {
return `${data.tujuan_penilaian.name}`;
},
},
tujuan_penilaian_kjpp_id: {
title: 'Tujuan Penilaian KJPP',
render: (item, data) => { render: (item, data) => {
if(data.penawaran.tujuan_penilaian_kjpp) { if(data.penawaran.tujuan_penilaian_kjpp) {
return `${data.penawaran.tujuan_penilaian_kjpp.name}`; return `${data.penawaran.tujuan_penilaian_kjpp.name}`;
@@ -144,7 +180,7 @@
return '-'; return '-';
}, },
}, },
nama_kjpp_sebelumnya: { kjpp_data: {
title: 'Nama KJPP Terpilih', title: 'Nama KJPP Terpilih',
render: (item, data) => { render: (item, data) => {
return `${data.penawaran.nama_kjpp_sebelumnya}`+'<br />' return `${data.penawaran.nama_kjpp_sebelumnya}`+'<br />'

File diff suppressed because it is too large Load Diff

View File

@@ -96,6 +96,9 @@ Route::middleware(['auth'])->group(function () {
// update KJPP data, detail penawaran // update KJPP data, detail penawaran
Route::put('/otorisasiPenawaranKJPP/{penawaran}', 'otorisasiPenawaranKJPP')->name('penawaran.otorisasiPenawaranKJPP'); Route::put('/otorisasiPenawaranKJPP/{penawaran}', 'otorisasiPenawaranKJPP')->name('penawaran.otorisasiPenawaranKJPP');
// revisi penawaran ulang
Route::put('/penawaranulang/{penawaranulang}', 'penawaranulang')->name('penawaran.penawaranulang');
}); });
}); });

View File

@@ -1,305 +1,310 @@
<?php <?php
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
use Modules\Lpj\Http\Controllers\SLAController; use Modules\Lpj\Http\Controllers\ActivityController;
use Modules\Lpj\Http\Controllers\KJPPController; use Modules\Lpj\Http\Controllers\ArahMataAnginController;
use Modules\Lpj\Http\Controllers\TeamsController; use Modules\Lpj\Http\Controllers\DebitureController;
use Modules\Lpj\Http\Controllers\RegionController; use Modules\Lpj\Http\Controllers\DokumenJaminanController;
use Modules\Lpj\Http\Controllers\ResumeController; use Modules\Lpj\Http\Controllers\HubunganPemilikJaminanController;
use Modules\Lpj\Http\Controllers\TenderController; use Modules\Lpj\Http\Controllers\HubunganPenghuniJaminanController;
use Modules\Lpj\Http\Controllers\LaporanController; use Modules\Lpj\Http\Controllers\IjinUsahaController;
use Modules\Lpj\Http\Controllers\PenilaiController; use Modules\Lpj\Http\Controllers\JenisDokumenController;
use Modules\Lpj\Http\Controllers\ActivityController; use Modules\Lpj\Http\Controllers\JenisFasilitasKreditController;
use Modules\Lpj\Http\Controllers\DebitureController; use Modules\Lpj\Http\Controllers\JenisJaminanController;
use Modules\Lpj\Http\Controllers\SurveyorController; use Modules\Lpj\Http\Controllers\JenisLaporanController;
use Modules\Lpj\Http\Controllers\IjinUsahaController; use Modules\Lpj\Http\Controllers\JenisLegalitasJaminanController;
use Modules\Lpj\Http\Controllers\PenilaianController; use Modules\Lpj\Http\Controllers\JenisPenilaianController;
use Modules\Lpj\Http\Controllers\PermohonanController; use Modules\Lpj\Http\Controllers\KJPPController;
use Modules\Lpj\Http\Controllers\JenisDokumenController; use Modules\Lpj\Http\Controllers\LaporanController;
use Modules\Lpj\Http\Controllers\JenisJaminanController; use Modules\Lpj\Http\Controllers\NilaiPlafondController;
use Modules\Lpj\Http\Controllers\JenisLaporanController; use Modules\Lpj\Http\Controllers\PemilikJaminanController;
use Modules\Lpj\Http\Controllers\NilaiPlafondController; use Modules\Lpj\Http\Controllers\PenilaianController;
use Modules\Lpj\Http\Controllers\ArahMataAnginController; use Modules\Lpj\Http\Controllers\PenilaiController;
use Modules\Lpj\Http\Controllers\DokumenJaminanController; use Modules\Lpj\Http\Controllers\PermohonanController;
use Modules\Lpj\Http\Controllers\JenisPenilaianController; use Modules\Lpj\Http\Controllers\PersetujuanPenawaranController;
use Modules\Lpj\Http\Controllers\PemilikJaminanController; use Modules\Lpj\Http\Controllers\RegionController;
use Modules\Lpj\Http\Controllers\TujuanPenilaianController; use Modules\Lpj\Http\Controllers\ResumeController;
use Modules\Lpj\Http\Controllers\StatusPermohonanController; use Modules\Lpj\Http\Controllers\SLAController;
use Modules\Lpj\Http\Controllers\TujuanPenilaianKJPPController; use Modules\Lpj\Http\Controllers\StatusPermohonanController;
use Modules\Lpj\Http\Controllers\JenisFasilitasKreditController; use Modules\Lpj\Http\Controllers\SurveyorController;
use Modules\Lpj\Http\Controllers\JenisLegalitasJaminanController; use Modules\Lpj\Http\Controllers\TeamsController;
// use Modules\Lpj\Http\Controllers\ActivityController; use Modules\Lpj\Http\Controllers\TenderController;
use Modules\Lpj\Http\Controllers\HubunganPemilikJaminanController; use Modules\Lpj\Http\Controllers\TujuanPenilaianController;
use Modules\Lpj\Http\Controllers\HubunganPenghuniJaminanController; use Modules\Lpj\Http\Controllers\TujuanPenilaianKJPPController;
/* // use Modules\Lpj\Http\Controllers\ActivityController;
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::middleware(['auth'])->group(function () { /*
Route::get('api/check-penawaran/{nomor_registrasi}', [TenderController::class, 'checkPenawaranExistence']); |--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::name('basicdata.')->prefix('basic-data')->group(function () { Route::middleware(['auth'])->group(function () {
Route::name('jenis-fasilitas-kredit.')->prefix('jenis-fasilitas-kredit')->group(function () { Route::get('api/check-penawaran/{nomor_registrasi}', [TenderController::class, 'checkPenawaranExistence']);
Route::get('restore/{id}', [JenisFasilitasKreditController::class, 'restore'])->name('restore');
Route::get('datatables', [JenisFasilitasKreditController::class, 'dataForDatatables'])->name( Route::name('basicdata.')->prefix('basic-data')->group(function () {
'datatables', Route::name('jenis-fasilitas-kredit.')->prefix('jenis-fasilitas-kredit')->group(function () {
Route::get('restore/{id}', [JenisFasilitasKreditController::class, 'restore'])->name('restore');
Route::get('datatables', [JenisFasilitasKreditController::class, 'dataForDatatables'])->name(
'datatables',
);
Route::get('export', [JenisFasilitasKreditController::class, 'export'])->name('export');
});
Route::resource('jenis-fasilitas-kredit', JenisFasilitasKreditController::class);
Route::name('jenis-legalitas-jaminan.')->prefix('jenis-legalitas-jaminan')->group(function () {
Route::get('restore/{id}', [JenisLegalitasJaminanController::class, 'restore'])->name('restore');
Route::get('datatables', [JenisLegalitasJaminanController::class, 'dataForDatatables'])->name(
'datatables',
);
Route::get('export', [JenisLegalitasJaminanController::class, 'export'])->name('export');
});
Route::resource('jenis-legalitas-jaminan', JenisLegalitasJaminanController::class);
Route::name('jenis-jaminan.')->prefix('jenis-jaminan')->group(function () {
Route::get('legalitas/{id}/{jenisJaminanId}', [DokumenJaminanController::class, 'getLegalitasJaminan'])
->name('legalitas');
Route::get('restore/{id}', [JenisJaminanController::class, 'restore'])->name('restore');
Route::get('datatables', [JenisJaminanController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [JenisJaminanController::class, 'export'])->name('export');
});
Route::resource('jenis-jaminan', JenisJaminanController::class);
Route::name('tujuan-penilaian.')->prefix('tujuan-penilaian')->group(function () {
Route::get('restore/{id}', [TujuanPenilaianController::class, 'restore'])->name('restore');
Route::get('datatables', [TujuanPenilaianController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [TujuanPenilaianController::class, 'export'])->name('export');
});
Route::resource('tujuan-penilaian', TujuanPenilaianController::class);
Route::name('tujuan_penilaian_kjpp.')->prefix('tujuan_penilaian_kjpp')->group(function () {
Route::get('datatables', [TujuanPenilaianKJPPController::class, 'dataForDatatables'])->name(
'datatables',
);
Route::get('export', [TujuanPenilaianKJPPController::class, 'export'])->name('export');
});
Route::resource('tujuan_penilaian_kjpp', TujuanPenilaianKJPPController::class);
Route::name('jenis-dokumen.')->prefix('jenis-dokumen')->group(function () {
Route::get('restore/{id}', [JenisDokumenController::class, 'restore'])->name('restore');
Route::get('datatables', [JenisDokumenController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [JenisDokumenController::class, 'export'])->name('export');
});
Route::resource('jenis-dokumen', JenisDokumenController::class);
Route::name('nilai-plafond.')->prefix('nilai-plafond')->group(function () {
Route::get('restore/{id}', [NilaiPlafondController::class, 'restore'])->name('restore');
Route::get('datatables', [NilaiPlafondController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [NilaiPlafondController::class, 'export'])->name('export');
});
Route::resource('nilai-plafond', NilaiPlafondController::class);
Route::name('hubungan-pemilik-jaminan.')->prefix('hubungan-pemilik-jaminan')->group(function () {
Route::get('restore/{id}', [HubunganPemilikJaminanController::class, 'restore'])->name('restore');
Route::get('datatables', [HubunganPemilikJaminanController::class, 'dataForDatatables'])->name(
'datatables',
);
Route::get('export', [HubunganPemilikJaminanController::class, 'export'])->name('export');
});
Route::resource('hubungan-pemilik-jaminan', HubunganPemilikJaminanController::class);
Route::name('hubungan-penghuni-jaminan.')->prefix('hubungan-penghuni-jaminan')->group(function () {
Route::get('restore/{id}', [HubunganPenghuniJaminanController::class, 'restore'])->name('restore');
Route::get('datatables', [HubunganPenghuniJaminanController::class, 'dataForDatatables'])->name(
'datatables',
);
Route::get('export', [HubunganPenghuniJaminanController::class, 'export'])->name('export');
});
Route::resource('hubungan-penghuni-jaminan', HubunganPenghuniJaminanController::class);
Route::name('arah-mata-angin.')->prefix('arah-mata-angin')->group(function () {
Route::get('restore/{id}', [ArahMataAnginController::class, 'restore'])->name('restore');
Route::get('datatables', [ArahMataAnginController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [ArahMataAnginController::class, 'export'])->name('export');
});
Route::resource('arah-mata-angin', ArahMataAnginController::class);
Route::name('status-permohonan.')->prefix('status-permohonan')->group(function () {
Route::get('restore/{id}', [StatusPermohonanController::class, 'restore'])->name('restore');
Route::get('datatables', [StatusPermohonanController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [StatusPermohonanController::class, 'export'])->name('export');
});
Route::resource('status-permohonan', StatusPermohonanController::class);
Route::name('region.')->prefix('region')->group(function () {
Route::get('restore/{id}', [RegionController::class, 'restore'])->name('restore');
Route::get('datatables', [RegionController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [RegionController::class, 'export'])->name('export');
});
Route::resource('region', RegionController::class, [
'names' => [
'index' => 'region.index',
'show' => 'region.show',
'create' => 'region.create',
'store' => 'region.store',
'edit' => 'region.edit',
'update' => 'region.update',
'destroy' => 'region.destroy',
],
]);
Route::resource('region', RegionController::class);
Route::name('teams.')->prefix('teams')->group(function () {
Route::get('restore/{id}', [TeamsController::class, 'restore'])->name('restore');
Route::get('datatables', [TeamsController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [TeamsController::class, 'export'])->name('export');
});
Route::resource('teams', TeamsController::class, [
'names' => [
'index' => 'teams.index',
'show' => 'teams.show',
'create' => 'teams.create',
'store' => 'teams.store',
'edit' => 'teams.edit',
'update' => 'teams.update',
'destroy' => 'teams.destroy',
],
]);
Route::name('jenis-penilaian.')->prefix('jenis-penilaian')->group(function () {
Route::get('restore/{id}', [JenisPenilaianController::class, 'restore'])->name('restore');
Route::get('datatables', [JenisPenilaianController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [JenisPenilaianController::class, 'export'])->name('export');
});
Route::resource('jenis-penilaian', JenisPenilaianController::class, [
'names' => [
'index' => 'jenis-penilaian.index',
'show' => 'jenis-penilaian.show',
'create' => 'jenis-penilaian.create',
'store' => 'jenis-penilaian.store',
'edit' => 'jenis-penilaian.edit',
'update' => 'jenis-penilaian.update',
'destroy' => 'jenis-penilaian.destroy',
],
]);
Route::name('nilai-plafond.')->prefix('nilai-plafond')->group(function () {
Route::get('restore/{id}', [NilaiPlafondController::class, 'restore'])->name('restore');
Route::get('datatables', [NilaiPlafondController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [NilaiPlafondController::class, 'export'])->name('export');
});
Route::resource('nilai-plafond', NilaiPlafondController::class);
Route::name('hubungan-pemilik-jaminan.')->prefix('hubungan-pemilik-jaminan')->group(function () {
Route::get('restore/{id}', [HubunganPemilikJaminanController::class, 'restore'])->name('restore');
Route::get('datatables', [HubunganPemilikJaminanController::class, 'dataForDatatables'])->name(
'datatables',
);
Route::get('export', [HubunganPemilikJaminanController::class, 'export'])->name('export');
});
Route::resource('hubungan-pemilik-jaminan', HubunganPemilikJaminanController::class);
Route::name('hubungan-penghuni-jaminan.')->prefix('hubungan-penghuni-jaminan')->group(function () {
Route::get('restore/{id}', [HubunganPenghuniJaminanController::class, 'restore'])->name('restore');
Route::get('datatables', [HubunganPenghuniJaminanController::class, 'dataForDatatables'])->name(
'datatables',
);
Route::get('export', [HubunganPenghuniJaminanController::class, 'export'])->name('export');
});
Route::resource('hubungan-penghuni-jaminan', HubunganPenghuniJaminanController::class);
Route::name('arah-mata-angin.')->prefix('arah-mata-angin')->group(function () {
Route::get('restore/{id}', [ArahMataAnginController::class, 'restore'])->name('restore');
Route::get('datatables', [ArahMataAnginController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [ArahMataAnginController::class, 'export'])->name('export');
});
Route::resource('arah-mata-angin', ArahMataAnginController::class);
Route::resource('arah-mata-angin', ArahMataAnginController::class);
Route::name('status-permohonan.')->prefix('status-permohonan')->group(function () {
Route::get('restore/{id}', [StatusPermohonanController::class, 'restore'])->name('restore');
Route::get('datatables', [StatusPermohonanController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [StatusPermohonanController::class, 'export'])->name('export');
});
Route::resource('status-permohonan', StatusPermohonanController::class);
// Start Activity KJPP route
Route::name('kjpp.')->prefix('kjpp')->group(function () {
Route::get('datatables', [KJPPController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [KJPPController::class, 'export'])->name('export');
});
Route::resource('kjpp', KJPPController::class);
// End Activity KJPP route
// Start Activity Ijin Usaha route
Route::name('ijin_usaha.')->prefix('ijin_usaha')->group(function () {
Route::get('datatables', [IjinUsahaController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [IjinUsahaController::class, 'export'])->name('export');
});
Route::resource('ijin_usaha', IjinUsahaController::class);
// End Activity Ijin Usaha route
// Start Activity Jenis Laporan route
Route::name('jenis_laporan.')->prefix('jenis_laporan')->group(function () {
Route::get('datatables', [JenisLaporanController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [JenisLaporanController::class, 'export'])->name('export');
});
Route::resource('jenis_laporan', JenisLaporanController::class);
// End Activity Jenis Laporan route
// basic data surveyor
Route::get('datatablesSurveyory/{type}', [SurveyorController::class, 'dataForDatatablesData'])->name(
'datatablesSurveyory',
); );
Route::get('export', [JenisFasilitasKreditController::class, 'export'])->name('export'); Route::get('createData/{type}', [SurveyorController::class, 'createData'])->name('createData');
}); Route::get('/{type}/{id}', [SurveyorController::class, 'editData'])->name('editData');
Route::resource('jenis-fasilitas-kredit', JenisFasilitasKreditController::class); Route::post('storeData/{type}', [SurveyorController::class, 'storeData'])->name('storeData');
Route::put('updateData/{type}/{id}', [SurveyorController::class, 'updateData'])->name('updateData');
Route::delete('deleteData/{id}/{type}', [SurveyorController::class, 'destroy'])->name('deleteData');
Route::name('jenis-legalitas-jaminan.')->prefix('jenis-legalitas-jaminan')->group(function () { // Start Activity SLA route
Route::get('restore/{id}', [JenisLegalitasJaminanController::class, 'restore'])->name('restore'); Route::name('sla.')->prefix('sla')->group(function () {
Route::get('datatables', [JenisLegalitasJaminanController::class, 'dataForDatatables'])->name( Route::get('/', [SLAController::class, 'index'])->name('index');
'datatables', });
); // End Activity SLA route
Route::get('export', [JenisLegalitasJaminanController::class, 'export'])->name('export');
});
Route::resource('jenis-legalitas-jaminan', JenisLegalitasJaminanController::class);
Route::name('jenis-jaminan.')->prefix('jenis-jaminan')->group(function () { $headers = [
Route::get('legalitas/{id}/{jenisJaminanId}', [DokumenJaminanController::class, 'getLegalitasJaminan'])->name('legalitas'); 'bentuk-tanah' => 'Bentuk Tanah',
Route::get('restore/{id}', [JenisJaminanController::class, 'restore'])->name('restore'); 'kontur-tanah' => 'Kontur Tanah',
Route::get('datatables', [JenisJaminanController::class, 'dataForDatatables'])->name('datatables'); 'posisi-kavling' => 'Posisi Kavling',
Route::get('export', [JenisJaminanController::class, 'export'])->name('export'); 'ketinggian-tanah' => 'Ketinggian Tanah',
}); 'kondisi-fisik-tanah' => 'Kondisi Fisik Tanah',
Route::resource('jenis-jaminan', JenisJaminanController::class); 'jenis-bangunan' => 'Jenis Bangunan',
'kondisi-bangunan' => 'Kondisi Bangunan',
Route::name('tujuan-penilaian.')->prefix('tujuan-penilaian')->group(function () { 'sifat-bangunan' => 'Sifat Bangunan',
Route::get('restore/{id}', [TujuanPenilaianController::class, 'restore'])->name('restore'); 'spek-bangunan' => 'Speksifikasi Bangunan',
Route::get('datatables', [TujuanPenilaianController::class, 'dataForDatatables'])->name('datatables'); 'spek-kategori-bangunan' => 'Speksifikasi Kategori Bangunan',
Route::get('export', [TujuanPenilaianController::class, 'export'])->name('export'); 'sarana-pelengkap' => 'Sarana Pelengkap',
}); 'lalu-lintas-lokasi' => 'Lalu Lintas',
Route::resource('tujuan-penilaian', TujuanPenilaianController::class); 'tingkat-keramaian' => 'Tingkat Keramaian',
'gol-mas-sekitar' => 'Golongan Masyarakat Sekitar',
Route::name('tujuan_penilaian_kjpp.')->prefix('tujuan_penilaian_kjpp')->group(function () { 'lantai-unit' => 'Lantai Unit',
Route::get('datatables', [TujuanPenilaianKJPPController::class, 'dataForDatatables'])->name( 'view-unit' => 'View Unit',
'datatables', 'bentuk-unit' => 'Bentuk unit',
); 'perkerasan-jalan' => 'Perkerasan jalan',
Route::get('export', [TujuanPenilaianKJPPController::class, 'export'])->name('export'); 'jenis-pesawat' => 'Jenis pesawat',
}); 'model-alat-berat' => 'Model Alat Berat',
Route::resource('tujuan_penilaian_kjpp', TujuanPenilaianKJPPController::class); 'jenis-kapal' => 'Jenis kapal',
'jenis-kendaraan' => 'Jenis kendaraan',
Route::name('jenis-dokumen.')->prefix('jenis-dokumen')->group(function () { 'jenis-unit' => 'Jenis unit',
Route::get('restore/{id}', [JenisDokumenController::class, 'restore'])->name('restore');
Route::get('datatables', [JenisDokumenController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [JenisDokumenController::class, 'export'])->name('export');
});
Route::resource('jenis-dokumen', JenisDokumenController::class);
Route::name('nilai-plafond.')->prefix('nilai-plafond')->group(function () {
Route::get('restore/{id}', [NilaiPlafondController::class, 'restore'])->name('restore');
Route::get('datatables', [NilaiPlafondController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [NilaiPlafondController::class, 'export'])->name('export');
});
Route::resource('nilai-plafond', NilaiPlafondController::class);
Route::name('hubungan-pemilik-jaminan.')->prefix('hubungan-pemilik-jaminan')->group(function () {
Route::get('restore/{id}', [HubunganPemilikJaminanController::class, 'restore'])->name('restore');
Route::get('datatables', [HubunganPemilikJaminanController::class, 'dataForDatatables'])->name(
'datatables',
);
Route::get('export', [HubunganPemilikJaminanController::class, 'export'])->name('export');
});
Route::resource('hubungan-pemilik-jaminan', HubunganPemilikJaminanController::class);
Route::name('hubungan-penghuni-jaminan.')->prefix('hubungan-penghuni-jaminan')->group(function () {
Route::get('restore/{id}', [HubunganPenghuniJaminanController::class, 'restore'])->name('restore');
Route::get('datatables', [HubunganPenghuniJaminanController::class, 'dataForDatatables'])->name(
'datatables',
);
Route::get('export', [HubunganPenghuniJaminanController::class, 'export'])->name('export');
});
Route::resource('hubungan-penghuni-jaminan', HubunganPenghuniJaminanController::class);
Route::name('arah-mata-angin.')->prefix('arah-mata-angin')->group(function () {
Route::get('restore/{id}', [ArahMataAnginController::class, 'restore'])->name('restore');
Route::get('datatables', [ArahMataAnginController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [ArahMataAnginController::class, 'export'])->name('export');
});
Route::resource('arah-mata-angin', ArahMataAnginController::class);
Route::name('status-permohonan.')->prefix('status-permohonan')->group(function () {
Route::get('restore/{id}', [StatusPermohonanController::class, 'restore'])->name('restore');
Route::get('datatables', [StatusPermohonanController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [StatusPermohonanController::class, 'export'])->name('export');
});
Route::resource('status-permohonan', StatusPermohonanController::class);
Route::name('region.')->prefix('region')->group(function () {
Route::get('restore/{id}', [RegionController::class, 'restore'])->name('restore');
Route::get('datatables', [RegionController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [RegionController::class, 'export'])->name('export');
});
Route::resource('region', RegionController::class, [
'names' => [
'index' => 'region.index',
'show' => 'region.show',
'create' => 'region.create',
'store' => 'region.store',
'edit' => 'region.edit',
'update' => 'region.update',
'destroy' => 'region.destroy',
],
]);
Route::resource('region', RegionController::class);
Route::name('teams.')->prefix('teams')->group(function () {
Route::get('restore/{id}', [TeamsController::class, 'restore'])->name('restore');
Route::get('datatables', [TeamsController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [TeamsController::class, 'export'])->name('export');
});
Route::resource('teams', TeamsController::class, [
'names' => [
'index' => 'teams.index',
'show' => 'teams.show',
'create' => 'teams.create',
'store' => 'teams.store',
'edit' => 'teams.edit',
'update' => 'teams.update',
'destroy' => 'teams.destroy',
],
]);
Route::name('jenis-penilaian.')->prefix('jenis-penilaian')->group(function () {
Route::get('restore/{id}', [JenisPenilaianController::class, 'restore'])->name('restore');
Route::get('datatables', [JenisPenilaianController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [JenisPenilaianController::class, 'export'])->name('export');
});
Route::resource('jenis-penilaian', JenisPenilaianController::class, [
'names' => [
'index' => 'jenis-penilaian.index',
'show' => 'jenis-penilaian.show',
'create' => 'jenis-penilaian.create',
'store' => 'jenis-penilaian.store',
'edit' => 'jenis-penilaian.edit',
'update' => 'jenis-penilaian.update',
'destroy' => 'jenis-penilaian.destroy',
],
]);
Route::name('nilai-plafond.')->prefix('nilai-plafond')->group(function () {
Route::get('restore/{id}', [NilaiPlafondController::class, 'restore'])->name('restore');
Route::get('datatables', [NilaiPlafondController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [NilaiPlafondController::class, 'export'])->name('export');
});
Route::resource('nilai-plafond', NilaiPlafondController::class);
Route::name('hubungan-pemilik-jaminan.')->prefix('hubungan-pemilik-jaminan')->group(function () {
Route::get('restore/{id}', [HubunganPemilikJaminanController::class, 'restore'])->name('restore');
Route::get('datatables', [HubunganPemilikJaminanController::class, 'dataForDatatables'])->name(
'datatables',
);
Route::get('export', [HubunganPemilikJaminanController::class, 'export'])->name('export');
});
Route::resource('hubungan-pemilik-jaminan', HubunganPemilikJaminanController::class);
Route::name('hubungan-penghuni-jaminan.')->prefix('hubungan-penghuni-jaminan')->group(function () {
Route::get('restore/{id}', [HubunganPenghuniJaminanController::class, 'restore'])->name('restore');
Route::get('datatables', [HubunganPenghuniJaminanController::class, 'dataForDatatables'])->name(
'datatables',
);
Route::get('export', [HubunganPenghuniJaminanController::class, 'export'])->name('export');
});
Route::resource('hubungan-penghuni-jaminan', HubunganPenghuniJaminanController::class);
Route::name('arah-mata-angin.')->prefix('arah-mata-angin')->group(function () {
Route::get('restore/{id}', [ArahMataAnginController::class, 'restore'])->name('restore');
Route::get('datatables', [ArahMataAnginController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [ArahMataAnginController::class, 'export'])->name('export');
});
Route::resource('arah-mata-angin', ArahMataAnginController::class);
Route::resource('arah-mata-angin', ArahMataAnginController::class);
Route::name('status-permohonan.')->prefix('status-permohonan')->group(function () {
Route::get('restore/{id}', [StatusPermohonanController::class, 'restore'])->name('restore');
Route::get('datatables', [StatusPermohonanController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [StatusPermohonanController::class, 'export'])->name('export');
});
Route::resource('status-permohonan', StatusPermohonanController::class);
// Start Activity KJPP route
Route::name('kjpp.')->prefix('kjpp')->group(function () {
Route::get('datatables', [KJPPController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [KJPPController::class, 'export'])->name('export');
});
Route::resource('kjpp', KJPPController::class);
// End Activity KJPP route
// Start Activity Ijin Usaha route
Route::name('ijin_usaha.')->prefix('ijin_usaha')->group(function () {
Route::get('datatables', [IjinUsahaController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [IjinUsahaController::class, 'export'])->name('export');
});
Route::resource('ijin_usaha', IjinUsahaController::class);
// End Activity Ijin Usaha route
// Start Activity Jenis Laporan route
Route::name('jenis_laporan.')->prefix('jenis_laporan')->group(function () {
Route::get('datatables', [JenisLaporanController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [JenisLaporanController::class, 'export'])->name('export');
});
Route::resource('jenis_laporan', JenisLaporanController::class);
// End Activity Jenis Laporan route
// basic data surveyor
Route::get('datatablesSurveyory/{type}', [SurveyorController::class, 'dataForDatatablesData'])->name('datatablesSurveyory');
Route::get('createData/{type}', [SurveyorController::class, 'createData'])->name('createData');
Route::get('/{type}/{id}', [SurveyorController::class, 'editData'])->name('editData');
Route::post('storeData/{type}', [SurveyorController::class, 'storeData'])->name('storeData');
Route::put('updateData/{type}/{id}', [SurveyorController::class, 'updateData'])->name('updateData');
Route::delete('deleteData/{id}/{type}', [SurveyorController::class, 'destroy'])->name('deleteData');
// Start Activity SLA route
Route::name('sla.')->prefix('sla')->group(function () {
Route::get('/', [SLAController::class, 'index'])->name('index');
});
// End Activity SLA route
$headers = [
'bentuk-tanah' => 'Bentuk Tanah',
'kontur-tanah' => 'Kontur Tanah',
'posisi-kavling' => 'Posisi Kavling',
'ketinggian-tanah' => 'Ketinggian Tanah',
'kondisi-fisik-tanah' => 'Kondisi Fisik Tanah',
'jenis-bangunan' => 'Jenis Bangunan',
'kondisi-bangunan' => 'Kondisi Bangunan',
'sifat-bangunan' => 'Sifat Bangunan',
'spek-bangunan' => 'Speksifikasi Bangunan',
'spek-kategori-bangunan' => 'Speksifikasi Kategori Bangunan',
'sarana-pelengkap' => 'Sarana Pelengkap',
'lalu-lintas-lokasi' => 'Lalu Lintas',
'tingkat-keramaian' => 'Tingkat Keramaian',
'gol-mas-sekitar' => 'Golongan Masyarakat Sekitar',
'lantai-unit' => 'Lantai Unit',
'view-unit' => 'View Unit',
'bentuk-unit' => 'Bentuk unit',
'perkerasan-jalan' => 'Perkerasan jalan',
'jenis-pesawat' => 'Jenis pesawat',
'model-alat-berat' => 'Model Alat Berat',
'jenis-kapal' => 'Jenis kapal',
'jenis-kendaraan' => 'Jenis kendaraan',
'jenis-unit' => 'Jenis unit',
'terletak-area' => 'Terletak di Area', 'terletak-area' => 'Terletak di Area',
'merupakan-daerah' => 'Merupakan Daerah', 'merupakan-daerah' => 'Merupakan Daerah',
'posisi-unit' => 'Posisi unit', 'posisi-unit' => 'Posisi unit',
@@ -308,144 +313,156 @@ Route::middleware(['auth'])->group(function () {
]; ];
foreach ($headers as $type => $header) { foreach ($headers as $type => $header) {
Route::get($type, [SurveyorController::class, 'data']) Route::get($type, [SurveyorController::class, 'data'])->name($type . '.index')->defaults('type', $type);
->name($type . '.index') }
->defaults('type', $type);
}
});
Route::name('debitur.')->prefix('debitur')->group(function () {
Route::get('restore/{id}', [DebitureController::class, 'restore'])->name('restore');
Route::get('datatables', [DebitureController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [DebitureController::class, 'export'])->name('export');
Route::name('jaminan.')->prefix('{id}/jaminan')->group(function () {
Route::get('download', [DokumenJaminanController::class, 'download'])->name('download');
Route::get('bulk-download', [DokumenJaminanController::class, 'bulkDownload'])->name('bulk.download');
Route::get('/', [DokumenJaminanController::class, 'index'])->name('index');
Route::get('create', [DokumenJaminanController::class, 'create'])->name('create');
Route::get('{jaminan}/edit', [DokumenJaminanController::class, 'edit'])->name('edit');
Route::put('{jaminan}', [DokumenJaminanController::class, 'update'])->name('update');
Route::post('store', [DokumenJaminanController::class, 'store'])->name('store');
Route::delete('{jaminan}', [DokumenJaminanController::class, 'destroy'])->name('destroy');
}); });
Route::name('pemilik.')->prefix('{id}/pemilik')->group(function () { Route::name('debitur.')->prefix('debitur')->group(function () {
Route::get('/', [PemilikJaminanController::class, 'index'])->name('index'); Route::get('restore/{id}', [DebitureController::class, 'restore'])->name('restore');
Route::get('create', [PemilikJaminanController::class, 'create'])->name('create'); Route::get('datatables', [DebitureController::class, 'dataForDatatables'])->name('datatables');
Route::get('{pemilik}/edit', [PemilikJaminanController::class, 'edit'])->name('edit'); Route::get('export', [DebitureController::class, 'export'])->name('export');
Route::put('{pemilik}', [PemilikJaminanController::class, 'update'])->name('update');
Route::post('store', [PemilikJaminanController::class, 'store'])->name('store'); Route::name('jaminan.')->prefix('{id}/jaminan')->group(function () {
Route::delete('{pemilik}', [PemilikJaminanController::class, 'destroy'])->name('destroy'); Route::get('download', [DokumenJaminanController::class, 'download'])->name('download');
Route::get('bulk-download', [DokumenJaminanController::class, 'bulkDownload'])->name('bulk.download');
Route::get('/', [DokumenJaminanController::class, 'index'])->name('index');
Route::get('create', [DokumenJaminanController::class, 'create'])->name('create');
Route::get('{jaminan}/edit', [DokumenJaminanController::class, 'edit'])->name('edit');
Route::put('{jaminan}', [DokumenJaminanController::class, 'update'])->name('update');
Route::post('store', [DokumenJaminanController::class, 'store'])->name('store');
Route::delete('{jaminan}', [DokumenJaminanController::class, 'destroy'])->name('destroy');
});
Route::name('pemilik.')->prefix('{id}/pemilik')->group(function () {
Route::get('/', [PemilikJaminanController::class, 'index'])->name('index');
Route::get('create', [PemilikJaminanController::class, 'create'])->name('create');
Route::get('{pemilik}/edit', [PemilikJaminanController::class, 'edit'])->name('edit');
Route::put('{pemilik}', [PemilikJaminanController::class, 'update'])->name('update');
Route::post('store', [PemilikJaminanController::class, 'store'])->name('store');
Route::delete('{pemilik}', [PemilikJaminanController::class, 'destroy'])->name('destroy');
});
}); });
});
Route::resource('debitur', DebitureController::class); Route::resource('debitur', DebitureController::class);
Route::name('laporan.')->prefix('laporan')->group(function () { Route::name('laporan.')->prefix('laporan')->group(function () {
Route::get('sederhana', [LaporanController::class, 'sederhana_index'])->name('sederhana.index'); Route::get('sederhana', [LaporanController::class, 'sederhana_index'])->name('sederhana.index');
Route::get('standard', [LaporanController::class, 'standard_index'])->name('standard.index'); Route::get('standard', [LaporanController::class, 'standard_index'])->name('standard.index');
}); });
Route::name('resume.')->prefix('resume')->group(function () { Route::name('resume.')->prefix('resume')->group(function () {
Route::get('/', [ResumeController::class, 'index'])->name('index'); Route::get('/', [ResumeController::class, 'index'])->name('index');
Route::get('{id}/show', [ResumeController::class, 'show'])->name('show'); Route::get('{id}/show', [ResumeController::class, 'show'])->name('show');
Route::post('store', [ResumeController::class, 'store'])->name('store'); Route::post('store', [ResumeController::class, 'store'])->name('store');
Route::get('datatables', [ResumeController::class, 'dataForDatatables'])->name('datatables'); Route::get('datatables', [ResumeController::class, 'dataForDatatables'])->name('datatables');
}); });
Route::name('permohonan.')->prefix('permohonan')->group(function () { Route::name('permohonan.')->prefix('permohonan')->group(function () {
Route::get('{id}/create', [PermohonanController::class, 'createPermohonan'])->name('create.debitur'); Route::get('{id}/create', [PermohonanController::class, 'createPermohonan'])->name('create.debitur');
Route::get('restore/{id}', [PermohonanController::class, 'restore'])->name('restore'); Route::get('restore/{id}', [PermohonanController::class, 'restore'])->name('restore');
Route::get('datatables', [PermohonanController::class, 'dataForDatatables'])->name('datatables'); Route::get('datatables', [PermohonanController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [PermohonanController::class, 'export'])->name('export'); Route::get('export', [PermohonanController::class, 'export'])->name('export');
Route::get('print/{id}', [PermohonanController::class, 'print'])->name('print'); Route::get('print/{id}', [PermohonanController::class, 'print'])->name('print');
}); });
Route::get('authorization', [PermohonanController::class, 'authorization'])->name('authorization.index'); Route::get('authorization', [PermohonanController::class, 'authorization'])->name('authorization.index');
Route::resource('permohonan', PermohonanController::class); Route::resource('permohonan', PermohonanController::class);
Route::get('authorization', [PermohonanController::class, 'authorization'])->name('authorization.index'); Route::get('authorization', [PermohonanController::class, 'authorization'])->name('authorization.index');
Route::get('authorization/datatables', [PermohonanController::class, 'dataForAuthorization'])->name( Route::get('authorization/datatables', [PermohonanController::class, 'dataForAuthorization'])->name(
'authorization.datatables', 'authorization.datatables',
);
Route::get('authorization/{id}/edit', [PermohonanController::class, 'showAuthorization'])->name(
'authorization.show',
);
Route::put('authorization/{id}', [PermohonanController::class, 'updateAuthorization'])->name(
'authorization.update',
);
Route::name('tender.')->prefix('tender')->group(function () {
// Penawaran
Route::get('penawaran', [TenderController::class, 'penawaran_index'])->name('penawaran.index');
Route::get('penawaran/{noreg}/show', [TenderController::class, 'penawaran_show'])->name('penawaran.show');
Route::get('penawaran/{noreg}/create', [TenderController::class, 'penawaran_create'])->name(
'penawaran.createPenawaran',
); );
Route::post('penawaran/{noreg}/store', [TenderController::class, 'penawaran_store'])->name( Route::get('authorization/{id}/edit', [PermohonanController::class, 'showAuthorization'])->name(
'penawaran.storePenawaran', 'authorization.show',
); );
Route::get('penawaran/{noreg}/edit', [TenderController::class, 'penawaran_edit'])->name( Route::put('authorization/{id}', [PermohonanController::class, 'updateAuthorization'])->name(
'penawaran.editPenawaran', 'authorization.update',
); );
Route::put('penawaran/{noreg}/update', [TenderController::class, 'penawaran_update'])->name(
'penawaran.updatePenawaran',
);
Route::get('penawaran/exportPenawaran', [TenderController::class, 'exportPenawaran'])->name(
'penawaran.exportPenawaran',
);
Route::get('penawaran/datatables', [TenderController::class, 'datatablesPenawaran'])->name(
'penawaran.datatables',
);
Route::get('penawaran/{noreg}/suratTender', [TenderController::class, 'showSuratTender'])->name(
'penawaran.showSuratTender'
);
Route::get('penawaran/{noreg}/suratTender/downloadpdf', [TenderController::class, 'downloadSuratTender'])->name('penawaran.downloadSuratTender');
// Kirim Email Penawaran
Route::get('penawaran/{noreg}/showKirimEmail', [TenderController::class, 'showKirimEmail'])->name('penawaran.showKirimEmail');
Route::get('penawaran/{noreg}/kirimEmailAll', [TenderController::class, 'kirimEmailAll'])->name('penawaran.kirimEmailAll');
Route::get('penawaran/{noreg}/suratTenderKJPP/{id}', [TenderController::class, 'suratTenderKJPP'])->name('penawaran.suratTenderKJPP');
Route::get('penawaran/{noreg}/suratTenderKJPP/{id}/kirimEmailKJPP', [TenderController::class, 'kirimEmailKJPP'])->name('penawaran.kirimEmailKJPP');
Route::get('penawaran/suratTenderShow/{noreg}/datatables', [TenderController::class, 'dataTablesShowKirimSurat'])->name('penawaran.showKirimSurat.datatables');
// Download Surat Tender KJPP
Route::get('penawaran/{noreg}/suratTenderKJPP/{id}/downloadSuratTenderKJPP', [TenderController::class, 'downloadSuratTenderKJPP'])
->name('penawaran.downloadSuratTenderKJPP');
// Penawaran Ulang Route::name('tender.')->prefix('tender')->group(function () {
Route::get('penawaran/ulang', [TenderController::class, 'penawaran_ulang_index'])->name( // Penawaran
'penawaran.ulang.index', Route::get('penawaran', [TenderController::class, 'penawaran_index'])->name('penawaran.index');
); Route::get('penawaran/{noreg}/show', [TenderController::class, 'penawaran_show'])->name('penawaran.show');
Route::get('penawaran/ulang/datatables', [TenderController::class, 'datatablesPenawaranUlang'])->name( Route::get('penawaran/{noreg}/create', [TenderController::class, 'penawaran_create'])->name(
'penawaran.ulang.datatables', 'penawaran.createPenawaran',
); );
}); Route::post('penawaran/{noreg}/store', [TenderController::class, 'penawaran_store'])->name(
'penawaran.storePenawaran',
);
Route::get('penawaran/{noreg}/edit', [TenderController::class, 'penawaran_edit'])->name(
'penawaran.editPenawaran',
);
Route::put('penawaran/{noreg}/update', [TenderController::class, 'penawaran_update'])->name(
'penawaran.updatePenawaran',
);
Route::get('penawaran/exportPenawaran', [TenderController::class, 'exportPenawaran'])->name(
'penawaran.exportPenawaran',
);
Route::get('penawaran/datatables', [TenderController::class, 'datatablesPenawaran'])->name(
'penawaran.datatables',
);
Route::get('penawaran/{noreg}/suratTender', [TenderController::class, 'showSuratTender'])->name(
'penawaran.showSuratTender',
);
Route::get('penawaran/{noreg}/suratTender/downloadpdf', [TenderController::class, 'downloadSuratTender'])
->name('penawaran.downloadSuratTender');
// Kirim Email Penawaran
Route::get('penawaran/{noreg}/showKirimEmail', [TenderController::class, 'showKirimEmail'])->name(
'penawaran.showKirimEmail',
);
Route::get('penawaran/{noreg}/kirimEmailAll', [TenderController::class, 'kirimEmailAll'])->name(
'penawaran.kirimEmailAll',
);
Route::get('penawaran/{noreg}/suratTenderKJPP/{id}', [TenderController::class, 'suratTenderKJPP'])->name(
'penawaran.suratTenderKJPP',
);
Route::get(
'penawaran/{noreg}/suratTenderKJPP/{id}/kirimEmailKJPP',
[TenderController::class, 'kirimEmailKJPP'],
)->name('penawaran.kirimEmailKJPP');
Route::get(
'penawaran/suratTenderShow/{noreg}/datatables',
[TenderController::class, 'dataTablesShowKirimSurat'],
)->name('penawaran.showKirimSurat.datatables');
// Download Surat Tender KJPP
Route::get(
'penawaran/{noreg}/suratTenderKJPP/{id}/downloadSuratTenderKJPP',
[TenderController::class, 'downloadSuratTenderKJPP'],
)->name('penawaran.downloadSuratTenderKJPP');
Route::name('penilaian.')->prefix('penilaian')->group(function () { // Penawaran Ulang
Route::get('restore/{id}', [PenilaianController::class, 'restore'])->name('restore'); Route::get('penawaran/ulang', [TenderController::class, 'penawaran_ulang_index'])->name(
Route::get('datatables', [PenilaianController::class, 'dataForDatatables'])->name('datatables'); 'penawaran.ulang.index',
Route::get('export', [PenilaianController::class, 'export'])->name('export'); );
Route::get('/getUserTeams/{id}', [PenilaianController::class, 'getUserTeams']); Route::get('penawaran/ulang/datatables', [TenderController::class, 'datatablesPenawaranUlang'])->name(
'penawaran.ulang.datatables',
);
});
Route::get('/', [PenilaianController::class, 'index'])->name('index'); Route::name('penilaian.')->prefix('penilaian')->group(function () {
Route::get('{id}/assignment', [PenilaianController::class, 'assignment'])->name('assignment'); Route::get('restore/{id}', [PenilaianController::class, 'restore'])->name('restore');
Route::put('{id}', [PenilaianController::class, 'update'])->name('update'); Route::get('datatables', [PenilaianController::class, 'dataForDatatables'])->name('datatables');
Route::put('revisi/{nomor_registrasi}', [PenilaianController::class, 'revisi'])->name('revisi'); Route::get('export', [PenilaianController::class, 'export'])->name('export');
Route::post('create', [PenilaianController::class, 'create'])->name('create'); Route::get('/getUserTeams/{id}', [PenilaianController::class, 'getUserTeams']);
Route::post('store', [PenilaianController::class, 'store'])->name('store');
});
/** Route::get('/', [PenilaianController::class, 'index'])->name('index');
* Route start activity Route::get('{id}/assignment', [PenilaianController::class, 'assignment'])->name('assignment');
*/ Route::put('{id}', [PenilaianController::class, 'update'])->name('update');
Route::put('revisi/{nomor_registrasi}', [PenilaianController::class, 'revisi'])->name('revisi');
Route::post('create', [PenilaianController::class, 'create'])->name('create');
Route::post('store', [PenilaianController::class, 'store'])->name('store');
});
Route::name('activity.')->prefix('activity')->group(function () { /**
Route::get('restore/{id}', [ActivityController::class, 'restore'])->name('restore'); * Route start activity
Route::get('datatables', [ActivityController::class, 'dataForDatatables'])->name('datatables'); */
Route::get('export', [ActivityController::class, 'export'])->name('export');
Route::name('activity.')->prefix('activity')->group(function () {
Route::get('restore/{id}', [ActivityController::class, 'restore'])->name('restore');
Route::get('datatables', [ActivityController::class, 'dataForDatatables'])->name('datatables');
Route::get('export', [ActivityController::class, 'export'])->name('export');
Route::get('/', [ActivityController::class, 'index'])->name('index'); Route::get('/', [ActivityController::class, 'index'])->name('index');
Route::put('update-team', [ActivityController::class, 'updateTeamAssingment'])->name('update-team'); Route::put('update-team', [ActivityController::class, 'updateTeamAssingment'])->name('update-team');
@@ -453,28 +470,40 @@ Route::middleware(['auth'])->group(function () {
Route::get('download/{id}', [ActivityController::class, 'download'])->name('download'); Route::get('download/{id}', [ActivityController::class, 'download'])->name('download');
Route::get('senior', [ActivityController::class, 'senior'])->name('senior'); Route::get('senior', [ActivityController::class, 'senior'])->name('senior');
Route::name('progres.')->prefix('progres')->group(function () { Route::name('progres.')->prefix('progres')->group(function () {
Route::get('/', [ActivityController::class, 'progres_activity'])->name('index'); Route::get('/', [ActivityController::class, 'progres_activity'])->name('index');
Route::get('/datatables/{id}', [ActivityController::class, 'dataTablesForActivity'])->name('datatables'); Route::get('/datatables/{id}', [ActivityController::class, 'dataTablesForActivity'])->name(
'datatables',
);
});
Route::get('/teams/{regionId}', [ActivityController::class, 'dataTablesForActivity']);
}); });
Route::get('/teams/{regionId}', [ActivityController::class, 'dataTablesForActivity']); /**
}); * Route end activity
*/
/**
* Route end activity
*/
Route::name('otorisator.')->prefix('otorisator')->group(function () { Route::name('otorisator.')->prefix('otorisator')->group(function () {
Route::get('pelaporan', [PenilaianController::class, 'otorisator'])->name('pelaporan.index')->defaults('type', 'pelaporan'); Route::get('pelaporan', [PenilaianController::class, 'otorisator'])->name('pelaporan.index')->defaults(
Route::get('pembayaran', [PenilaianController::class, 'otorisator'])->name('pembayaran.index')->defaults('type', 'pembayaran'); 'type',
Route::get('pembatalan', [PenilaianController::class, 'otorisator'])->name('pembatalan.index')->defaults('type', 'pembatalan'); 'pelaporan',
Route::get('sla', [PenilaianController::class, 'otorisator'])->name('sla.index')->defaults('type', 'sla'); );
Route::get('/datatables/{otorisator}', [PenilaianController::class, 'dataForAuthorization'])->name('datatables'); Route::get('pembayaran', [PenilaianController::class, 'otorisator'])->name('pembayaran.index')->defaults(
Route::get('show/{id}', [PenilaianController::class, 'show'])->name('show'); 'type',
}); 'pembayaran',
);
Route::get('pembatalan', [PenilaianController::class, 'otorisator'])->name('pembatalan.index')->defaults(
'type',
'pembatalan',
);
Route::get('sla', [PenilaianController::class, 'otorisator'])->name('sla.index')->defaults('type', 'sla');
Route::get('/datatables/{otorisator}', [PenilaianController::class, 'dataForAuthorization'])->name(
'datatables',
);
Route::get('show/{id}', [PenilaianController::class, 'show'])->name('show');
});
Route::name('surveyor.')->prefix('surveyor')->group(function () { Route::name('surveyor.')->prefix('surveyor')->group(function () {
@@ -498,16 +527,21 @@ Route::middleware(['auth'])->group(function () {
}); });
Route::name('penilai.')->prefix('penilai')->group(function () { Route::name('penilai.')->prefix('penilai')->group(function () {
Route::get('/', [PenilaiController::class, 'index'])->name('index'); Route::get('/', [PenilaiController::class, 'index'])->name('index');
Route::get('/{id}/show', [PenilaiController::class, 'show'])->name('show'); Route::get('/{id}/show', [PenilaiController::class, 'show'])->name('show');
Route::get('datatables', [PenilaiController::class, 'dataForDatatables'])->name('dataForTables'); Route::get('datatables', [PenilaiController::class, 'dataForDatatables'])->name('dataForTables');
Route::get('lampiran/{id}', [PenilaiController::class, 'lampiran'])->name('lampiran'); Route::get('lampiran/{id}', [PenilaiController::class, 'lampiran'])->name('lampiran');
}); });
});
require __DIR__ . '/registrasi.php'; Route::get('persetujuan-penawaran/datatables', [PersetujuanPenawaranController::class, 'dataForDatatables'])
->name('persetujuan-penawaran.datatables');
Route::resource('persetujuan-penawaran', PersetujuanPenawaranController::class);
});
require __DIR__ . '/registrasi.php';

View File

@@ -1,26 +1,4 @@
import {defineConfig} from 'vite'; export const paths = [
import laravel from 'laravel-vite-plugin'; "Modules/Lpj/resources/assets/sass/app.scss",
"Modules/Lpj/resources/assets/js/app.js",
export default defineConfig({ ];
build: {
outDir: '../../public/build-lpj',
emptyOutDir: true,
manifest: true,
},
plugins: [
laravel({
publicDirectory: '../../public',
buildDirectory: 'build-lpj',
input: [
__dirname + '/resources/assets/sass/app.scss',
__dirname + '/resources/assets/js/app.js'
],
refresh: true,
}),
],
});
//export const paths = [
// 'Modules/Lpj/resources/assets/sass/app.scss',
// 'Modules/Lpj/resources/assets/js/app.js',
//];