update module senior officer

This commit is contained in:
majid
2024-09-11 08:31:47 +07:00
parent a51d5fbeff
commit f9fea10607
26 changed files with 1881 additions and 227 deletions

View File

@@ -0,0 +1,49 @@
<?php
namespace Modules\Lpj\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithColumnFormatting;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Modules\Lpj\Models\Regions;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
class RegionExport implements WithColumnFormatting, WithHeadings, FromCollection, withMapping
{
public function collection()
{
return Regions::all();
}
public function map($row)
: array
{
return [
$row->id,
$row->code,
$row->name,
$row->created_at
];
}
public function headings()
: array
{
return [
'ID',
'Code',
'Name',
'Created At'
];
}
public function columnFormats()
: array
{
return [
'A' => NumberFormat::FORMAT_NUMBER,
'D' => NumberFormat::FORMAT_DATE_DATETIME
];
}
}

View File

@@ -0,0 +1,156 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use Exception;
use App\Http\Controllers\Controller;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Modules\Lpj\Models\JenisPenilaian;
use Modules\Lpj\Http\Requests\JenisPenilaianRequest;
class JenisPenilaianController extends Controller
{
public $user;
/**
* Display a listing of the resource.
*/
public function index()
{
return view('lpj::jenis_penilaian.index');
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
return view('lpj::jenis_penilaian.form');
}
/**
* Store a newly created resource in storage.
*/
public function store(JenisPenilaianRequest $request)
{
$validate = $request->validated();
try {
JenisPenilaian::create($validate);
return redirect()->route('basicdata.jenis-penilaian.index')->with('success', 'Jenis Penilaian created successfully');
} catch (Exception $e) {
return redirect()->route('basicdata.jenis-penilaian.create')->with('error', $e->getMessage());
}
}
/**
* Show the form for editing the specified resource.
*/
public function edit($id)
{
$jenisPenilaian = JenisPenilaian::find($id);
return view('lpj::jenis_penilaian.form', compact('jenisPenilaian'));
}
/**
* Update the specified resource in storage.
*/
public function update(JenisPenilaianRequest $request, $id)
{
$validate = $request->validate();
// dump($validate);
if ($validate) {
try {
$jenisPenilaian = JenisPenilaian::find($id);
$jenisPenilaian->update($validate);
return redirect()->route('basicdata.jenis-penilaian.index')->with('success', 'Jenis Penilaian updated successfully');
} catch (Exception $e) {
return redirect()->route('basicdata.jenis-penilaian.edit', $id)->with('error', $e->getMessage());
}
}
}
/**
* Remove the specified resource from storage.
*/
public function destroy($id)
{
try {
$jenisPenilaian = JenisPenilaian::find($id);
$jenisPenilaian->delete();
echo json_encode(['success' => true, 'message' => 'Jenis Penilaian deleted successfully']);
} catch (Exception $e) {
echo json_encode(['success' => false, 'message' => 'Failed to delete Jenis Penilaian']);
}
}
public function dataForDatatables(Request $request)
{
if (is_null($this->user) || !$this->user->can('jenis_penilaian.view')) {
//abort(403, 'Sorry! You are not allowed to view users.');
}
$query = JenisPenilaian::query();
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('code', 'LIKE', "%$search%");
$q->orWhere('name', 'LIKE', "%$search%");
});
}
if($request->has('sortOrder') && !empty($request->get('sortOrder'))){
$order = $request->get('sortOrder');
$column = $request->get('sortField');
$query->orderBy($column, $order);
}
$totalRecords = $query->count();
$size = $request->get('size');
$pageCount = 1;
if ($size > 0) {
if ($request->has('page') && $request->has('size')) {
$page = $request->get('page');
$offset = ($page - 1) * $size;
$query->skip($offset)->take($size);
$filteredRecords = $query->count();
$pageCount = ceil($totalRecords / $size);
}
$data = $query->get();
} else {
$filteredRecords = $totalRecords;
$data = $query->get();
}
$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

@@ -29,7 +29,7 @@
if ($validate) {
try {
// Save to database
// Save to database qq
Permohonan::create($validate);
return redirect()
->route('permohonan.index')

View File

@@ -0,0 +1,164 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Modules\Lpj\Models\Regions;
use Modules\Lpj\Http\Requests\RegionRequest;
use Maatwebsite\Excel\Facades\Excel;
use Modules\Lpj\Exports\RegionExport;
class RegionController extends Controller
{
public $user;
public function index()
{
return view('lpj::region.index');
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
return view('lpj::region.create');
}
/**
* Store a newly created resource in storage.
*/
public function store(RegionRequest $request)
{
$validate = $request->validated();
if ($validate) {
try {
// Save to database
Regions::create($validate);
return redirect()
->route('basicdata.region.index')
->with('success', 'region created successfully');
} catch (Exception $e) {
return redirect()
->route('basicdata.region.create')
->with('error', 'Failed to create region');
}
}
}
public function edit($id)
{
$region = Regions::find($id);
return view('lpj::region.create', compact('region'));
}
/**
* Update the specified resource in storage.
*/
public function update(RegionRequest $request, $id)
{
$validate = $request->validated();
if ($validate) {
try {
// Update in database
$region = Regions::find($id);
$region->update($validate);
return redirect()
->route('basicdata.region.index')
->with('success', 'Region updated successfully');
} catch (Exception $e) {
return redirect()
->route('basicdata.region.edit', $id)
->with('error', 'Failed to update region');
}
}
}
/**
* Remove the specified resource from storage.
*/
public function destroy($id)
{
try {
// Delete from database
$region = Regions::find($id);
$region->delete();
echo json_encode(['success' => true, 'message' => 'Region deleted successfully']);
} catch (Exception $e) {
echo json_encode(['success' => false, 'message' => 'Failed to delete region']);
}
}
public function dataForDatatables(Request $request)
{
if (is_null($this->user) || !$this->user->can('region.view')) {
//abort(403, 'Sorry! You are not allowed to view users.');
}
$query = Regions::query();
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('code', 'LIKE', "%$search%");
$q->orWhere('name', 'LIKE', "%$search%");
});
}
if($request->has('sortOrder') && !empty($request->get('sortOrder'))){
$order = $request->get('sortOrder');
$column = $request->get('sortField');
$query->orderBy($column, $order);
}
$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->get();
// Calculate the page count
$pageCount = ceil($totalRecords / $request->get('size'));
// Calculate the current page number
$currentPage = 0 + 1;
// dump($data);
// 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 export()
{
return Excel::download(new RegionExport, 'region.xlsx');
}
}

View File

@@ -0,0 +1,241 @@
<?php
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Modules\Lpj\Models\Regions;
use Modules\Usermanagement\Models\User;
use Modules\Lpj\Models\Teams;
use Modules\Lpj\Models\TeamsUsers;
use Modules\Lpj\Http\Requests\TeamsRequest;
use Illuminate\Support\Facades\DB;
class TeamsController extends Controller
{
public $user;
/**
* Display a listing of the resource.
*/
public function index()
{
return view('lpj::teams.index');
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
$region = Regions::all();
$user = User::all();
return view('lpj::teams.form', compact('region', 'user'));
}
/**
* Store a newly created resource in storage.
*/
public function store(TeamsRequest $request)
{
$validate = $request->validated();
DB::beginTransaction();
try {
$teams = Teams::create($validate);
$users = $request->input('user', []);
// loop untuk insert data users ke tabel teams_users
foreach ($users as $user) {
TeamsUsers::create([
'teams_id' => $teams->id,
'user_id' => $user
]);
}
DB::commit();
return redirect()
->route('basicdata.teams.index')
->with('success', 'Data saved successfully. ');
} catch (Exception $e) {
DB::rollBack();
return redirect()
->route('basicdata.teams.create')
->with('error', 'Failed to save data. ');
}
}
/**
* Show the specified resource.
*/
public function show($id)
{
return view('lpj::show');
}
/**
* Show the form for editing the specified resource.
*/
public function edit($id)
{
$teams = Teams::find($id);
$region = Regions::all();
$user = User::all();
$selectedUsers = $teams->teamsUsers->pluck('user_id')->toArray();
return view('lpj::teams.form', compact('teams', 'region', 'user', 'selectedUsers'));
}
/**
* Update the specified resource in storage.
*/
public function update(TeamsRequest $request, $id)
{
$validate = $request->validated();
DB::beginTransaction();
try {
$teams = Teams::findOrFail($id);
// Update data tim
$teams->update($validate);
$userIds = $request->input('user', []);
$teams->teamsUsers()->delete();
foreach ($userIds as $userId) {
TeamsUsers::create([
'teams_id' => $teams->id,
'user_id' => $userId
]);
}
DB::commit();
return redirect()
->route('basicdata.teams.index')
->with('success', 'Data updated successfully. ');
} catch (Exception $e) {
DB::rollBack();
return redirect()
->route('basicdata.teams.create')
->with('error', 'Failed to update data. ');
}
}
/**
* Remove the specified resource from storage.
*/
public function destroy($id)
{
DB::beginTransaction();
try {
$teams = Teams::findOrFail($id);
$teams->teamsUsers()->delete();
// Hapus tim
$teams->delete();
DB::commit();
return redirect()
->route('basicdata.teams.index')
->with('success', 'Team has been deleted successfully.');
} catch (Exception $e) {
DB::rollBack();
return redirect()
->route('basicdata.teams.index')
->with('error', 'Failed to delete team. ');
}
}
public function dataForDatatables(Request $request)
{
if (is_null($this->user) || !$this->user->can('debitur.view')) {
//abort(403, 'Sorry! You are not allowed to view users.');
}
$query = Teams::select('teams.id as id', 'teams.name as team_name', 'regions.name as region_name')
->join('regions', 'teams.regions_id', '=', 'regions.id')
->leftJoin('teams_users', 'teams.id', '=', 'teams_users.teams_id')
->leftJoin('users', 'teams_users.user_id', '=', 'users.id')
->addSelect('users.name as user_name');
// search filter
if ($request->has('search') && !empty($request->get('search'))) {
$search = $request->get('search');
$query->where(function ($q) use ($search) {
$q->where('teams.name', 'LIKE', "%$search%")
->orWhere('regions.name', 'LIKE', "%$search%")
->orWhere('users.name', 'LIKE', "%$search%");
});
}
// sorting
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder');
$column = $request->get('sortField');
$query->orderBy($column, $order);
}
$totalRecords = $query->count();
$size = $request->get('size');
$pageCount = 1;
if ($size > 0) {
if ($request->has('page') && $request->has('size')) {
$page = $request->get('page');
$offset = ($page - 1) * $size;
$query->skip($offset)->take($size);
$filteredRecords = $query->count();
$pageCount = ceil($totalRecords / $size);
}
$data = $query->get();
} else {
$filteredRecords = $totalRecords;
$data = $query->get();
}
$currentPage = $request->get('page') ?? 1;
$formattedData = $data->groupBy('id')->map(function ($group) {
$team = $group->first();
$team->user_team = $group->map(function ($item) {
return [
'nama' => $item->user_name,
// 'role' => $item->role_name,
];
})->toArray();
return $team;
})->values();
return response()->json([
'draw' => $request->get('draw'),
'recordsTotal' => $totalRecords,
'recordsFiltered' => $filteredRecords,
'pageCount' => $pageCount,
'page' => $currentPage,
'totalCount' => $totalRecords,
'data' => $formattedData
]);
}
}

View File

@@ -0,0 +1,42 @@
<?php
namespace Modules\Lpj\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class JenisPenilaianRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*/
public function rules(): array
{
$rules = [
'name' => 'required|string|max:255',
'status' => 'nullable|boolean',
'authorized_at' => 'nullable|datetime',
'authorized_status' => 'nullable|string|max:1',
'authorized_by' => 'nullable|exists:users,id',
];
if ($this->method() == 'PUT') {
$rules['code'] = 'required|string|max:3|unique:jenis_penilaian,code,' . $this->route('id');
} else {
$rules['code'] = 'required|string|max:3|unique:jenis_penilaian,code';
}
return $rules;
}
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
}

View File

@@ -0,0 +1,38 @@
<?php
namespace Modules\Lpj\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class RegionRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*/
public function rules(): array
{
$rules = [
'name' => 'required|string|max:255',
'status' => 'nullable|boolean',
'authorized_at' => 'nullable|datetime',
'authorized_status' => 'nullable|string|max:1',
'authorized_by' => 'nullable|exists:users,id',
];
if ($this->method() == 'PUT') {
$rules['code'] = 'required|string|max:3|unique:regions,code,' . $this->id;
} else {
$rules['code'] = 'required|string|max:3|unique:regions,code';
}
return $rules;
}
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
}

View File

@@ -0,0 +1,41 @@
<?php
namespace Modules\Lpj\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class TeamsRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*/
public function rules(): array
{
$rules = [
'name' => 'required|string|max:255',
'status' => 'nullable|boolean',
'regions_id' => 'nullable|exists:regions,id',
'user.*' => 'nullable|exists:users,id',
'authorized_at' => 'nullable|datetime',
'authorized_status' => 'nullable|string|max:1',
'authorized_by' => 'nullable|exists:users,id',
];
if ($this->method() == 'PUT') {
$rules['code'] = 'required|string|max:3|unique:teams,code,' . $this->id;
} else {
$rules['code'] = 'required|string|max:3|unique:teams,code';
}
return $rules;
}
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
}

View File

@@ -4,7 +4,7 @@ namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Modules\Lpj\Database\Factories\JenisPenilaianFactory;
use Modules\Lpj\Models\Penilaian;
class JenisPenilaian extends Model
{

View File

@@ -7,7 +7,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\PenilaianFactory;
use Modules\Lpj\Models\JenisPenilaian;
use Modules\Lpj\Models\Teams;
use Modules\Usermanagement\Models\User;
// use Modules\Usermanagement\Models\User;
class Penilaian extends Model
{
@@ -30,9 +30,9 @@ class Penilaian extends Model
return $this->belongsTo(Teams::class, 'team_id', 'id');
}
public function users(){
return $this->belongsTo(User::class, 'user_id', 'id');
}
// public function users(){
// return $this->belongsTo(User::class, 'user_id', 'id');
// }
}

View File

@@ -5,6 +5,7 @@ namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\RegionsFactory;
use Modules\Lpj\Models\Teams;
class Regions extends Model
{
@@ -14,13 +15,12 @@ class Regions extends Model
* The attributes that are mass assignable.
*/
protected $table = 'regions';
protected $fillable = [
'code', 'name', 'status', 'authorized_status', 'authorized_at', 'authorized_by',
'created_at', 'created_by', 'updated_at', 'updated_by', 'deleted_at', 'deleted_by'
'code', 'name', 'status', 'authorized_status', 'authorized_at', 'authorized_by'
];
public function teams(){
return $this->hasMany(Teams::class, 'region_id', 'id');
return $this->hasMany(Teams::class, 'regions_id', 'id');
}
}

View File

@@ -5,6 +5,10 @@ namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Lpj\Database\Factories\TeamsFactory;
use Modules\Lpj\Models\TeamsUsers;
use Modules\Lpj\Models\Regions;
use Modules\Lpj\Models\Penilaian;
class Teams extends Model
{
@@ -13,16 +17,24 @@ class Teams extends Model
*/
protected $table = 'teams';
protected $fillable = [
'region_id', 'code', 'name', 'status', 'authorized_status', 'authorized_at',
'authorized_by', 'created_at', 'created_by', 'updated_at', 'updated_by',
'regions_id', 'code', 'name', 'status', 'authorized_status', 'authorized_at',
'authorized_by', 'created_at', 'created_by', 'updated_at', 'updated_by',
'deleted_at', 'deleted_by'
];
public function regions(){
return $this->belongsTo(Regions::class, 'region_id', 'id');
return $this->belongsTo(Regions::class, 'regions_id', 'id');
}
public function teamsUsers(){
return $this->hasMany(TeamsUsers::class, 'team_id', 'id');
return $this->hasMany(TeamsUsers::class, 'teams_id', 'id');
}
public function penilaian(){
return $this->hasMany(Penilaian::class, 'teams_id', 'id');
}
}

View File

@@ -4,7 +4,7 @@ namespace Modules\Lpj\Models;
use Illuminate\Database\Eloquent\Model;
use Modules\Lpj\Database\Factories\TeamsUsersFactory;
use Modules\User\Models\User;
// use Modules\User\Models\User;
use Modules\Lpj\Models\Teams;
class TeamsUsers extends Model
@@ -15,16 +15,17 @@ class TeamsUsers extends Model
*/
protected $table = 'teams_users';
protected $fillable = [
'team_id', 'user_id', 'status', 'authorized_status', 'authorized_at',
'teams_id', 'user_id', 'status', 'authorized_status', 'authorized_at',
'authorized_by', 'created_at', 'created_by', 'updated_at', 'updated_by',
'deleted_at', 'deleted_by'
];
public function team()
{
return $this->belongsTo(Teams::class, 'team_id', 'id');
return $this->belongsTo(Teams::class, 'teams_id', 'id');
}
public function user()
{
return $this->belongsTo(User::class, 'user_id', 'id');