admin module added

This commit is contained in:
2024-04-14 18:29:29 +05:45
parent c7c79e69a5
commit efe174e3b3
63 changed files with 1454 additions and 182 deletions

View File

@ -5,19 +5,22 @@ namespace Modules\Leave\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Modules\Employee\Repositories\EmployeeInterface;
use Modules\Leave\Repositories\LeaveInterface;
use Modules\Employee\Repositories\EmployeeRepository;
use Modules\Leave\Repositories\LeaveRepository;
use Modules\Leave\Repositories\LeaveTypeRepository;
use Yoeunes\Toastr\Facades\Toastr;
class LeaveController extends Controller
{
private $leaveRepository;
private $employeeRepository;
private $leaveTypeRepository;
public function __construct(LeaveInterface $leaveRepository, EmployeeInterface $employeeRepository)
public function __construct(LeaveRepository $leaveRepository, EmployeeRepository $employeeRepository, LeaveTypeRepository $leaveTypeRepository)
{
$this->leaveRepository = $leaveRepository;
$this->employeeRepository = $employeeRepository;
$this->leaveTypeRepository = $leaveTypeRepository;
$this->middleware('role_or_permission:access leaves|create leaves|edit leaves|delete leaves', ['only' => ['index', 'show']]);
$this->middleware('role_or_permission:create leaves', ['only' => ['create', 'store']]);
@ -42,7 +45,9 @@ class LeaveController extends Controller
public function create()
{
$data['title'] = 'Create Leave';
$data['editable'] = false;
$data['employeeList'] = $this->employeeRepository->pluck();
$data['leaveTypeList'] = $this->leaveTypeRepository->pluck();
return view('leave::leave.create', $data);
}
@ -76,6 +81,8 @@ class LeaveController extends Controller
{
$data['title'] = 'Edit Leave';
$data['editable'] = true;
$data['leave'] = $this->leaveRepository->getLeaveById($id);
return view('leave::leave.edit', $data);

View File

@ -5,18 +5,14 @@ namespace Modules\Leave\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Modules\Leave\Repositories\LeaveInterface;
use Modules\Leave\Repositories\LeaveTypeInterface;
class LeaveTypeController extends Controller
{
private $leaveRepository;
private $leaveTypeRepository;
public function __construct(LeaveInterface $leaveRepository, LeaveTypeInterface $leaveTypeRepository)
public function __construct(LeaveTypeInterface $leaveTypeRepository)
{
$this->leaveRepository = $leaveRepository;
$this->leaveTypeRepository = $leaveTypeRepository;
}
/**
@ -24,7 +20,8 @@ class LeaveTypeController extends Controller
*/
public function index()
{
$data['leaveTypes'] = $this->leaveTypeRepository->findAll();
$data['title'] = 'LeaveType List';
$data['leaveTypeLists'] = $this->leaveTypeRepository->findAll();
return view('leave::leave-type.index', $data);
}
@ -33,7 +30,9 @@ class LeaveTypeController extends Controller
*/
public function create()
{
$data['title'] = 'Create Leave Type';
$data['title'] = 'Create LeaveType';
$data['editable'] = false;
return view('leave::leave-type.create', $data);
}
@ -43,7 +42,12 @@ class LeaveTypeController extends Controller
*/
public function store(Request $request): RedirectResponse
{
//
try {
$this->leaveTypeRepository->create($request->all());
return redirect()->route('leaveType.index')->with('success', 'Leave Type Created Successfully');
} catch (\Throwable $th) {
throw $th;
}
}
/**
@ -59,7 +63,11 @@ class LeaveTypeController extends Controller
*/
public function edit($id)
{
return view('leave::leave-type.edit');
$data['editable'] = false;
$data['title'] = 'Edit LeaveType';
return view('leave::leave-type.edit', $data);
}
/**

View File

@ -4,19 +4,12 @@ namespace Modules\Leave\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Leave\Database\factories\LeaveTypeFactory;
class LeaveType extends Model
{
use HasFactory;
/**
* The attributes that are mass assignable.
*/
protected $fillable = [];
protected static function newFactory(): LeaveTypeFactory
{
//return LeaveTypeFactory::new();
}
protected $table = 'tbl_leave_types';
protected $primaryKey = 'leave_type_id';
protected $guarded = [];
}

View File

@ -4,9 +4,10 @@ namespace Modules\Leave\Repositories;
interface LeaveTypeInterface
{
public function pluck();
public function findAll();
public function getLeaveById($leaveId);
public function delete($leaveId);
public function create(array $LeaveDetails);
public function update($leaveId, array $newDetails);
public function getLeaveTypeById($leaveTypeId);
public function delete($leaveTypeId);
public function create(array $LeaveTypeDetails);
public function update($leaveTypeId, array $newDetails);
}

View File

@ -6,29 +6,33 @@ use Modules\Leave\Models\LeaveType;
class LeaveTypeRepository implements LeaveTypeInterface
{
public function pluck()
{
return LeaveType::pluck('title', 'leave_type_id');
}
public function findAll()
{
return LeaveType::get();
}
public function getLeaveById($leaveId)
public function getLeaveTypeById($leaveTypeId)
{
return LeaveType::findOrFail($leaveId);
return LeaveType::findOrFail($leaveTypeId);
}
public function delete($leaveId)
public function delete($leaveTypeId)
{
LeaveType::destroy($leaveId);
LeaveType::destroy($leaveTypeId);
}
public function create(array $leaveDetails)
public function create(array $leaveTypeDetails)
{
return LeaveType::create($leaveDetails);
return LeaveType::create($leaveTypeDetails);
}
public function update($leaveId, array $newDetails)
public function update($leaveTypeId, array $newDetails)
{
return LeaveType::where('leave_id', $leaveId)->update($newDetails);
return LeaveType::where('leave_type_id', $leaveTypeId)->update($newDetails);
}
}

View File

@ -4,8 +4,7 @@ use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
return new class extends Migration {
/**
* Run the migrations.
*/
@ -17,6 +16,12 @@ return new class extends Migration
$table->unsignedBigInteger('leave_type_id');
$table->date('start_date')->nullable();
$table->date('end_date')->nullable();
$table->date('leave_approved_date')->nullable();
$table->Integer('total_days')->nullable();
$table->unsignedBigInteger('leave_approved_by')->nullable();
$table->Integer('status')->nullable();
$table->longtext('description')->nullable();
$table->text('remarks')->nullable();
$table->timestamps();
});
}

View File

@ -7,12 +7,12 @@
@include('layouts.partials.breadcrumb', ['title' => $title])
<!-- end page title -->
<div class="row">
<div class="col-lg-8">
<div class="col-lg-12">
<div class="card">
<div class="card-body">
<form action="{{ route('leaveType.store') }}" class="needs-validation" novalidate method="post">
@csrf
@include('leave::leave.partials.action')
@include('leave::leave-type.partials.action')
</form>
</div>
</div>

View File

@ -27,7 +27,7 @@
{{ html()->modelForm($leave, 'PUT')->route('leave.update', $leave->id)->class(['needs-validation'])->attributes(['novalidate'])->open() }}
@include('leave::leave.partials.action')
@include('leave::leave-type.partials.action')
{{ html()->closeModelForm() }}

View File

@ -3,13 +3,15 @@
@section('content')
<div class="page-content">
<div class="container-fluid">
<!-- start page title -->
@include('layouts.partials.breadcrumb', ['title' => $title])
<!-- end page title -->
<div class="row">
<div class="col-lg-12">
<div class="card">
<div class="card-header align-items-center d-flex">
<h5 class="card-title flex-grow-1 mb-0">Leave Lists</h5>
<h5 class="card-title flex-grow-1 mb-0">LeaveType Lists</h5>
<div class="flex-shrink-0">
<a href="{{ route('leaveType.create') }}" class="btn btn-success waves-effect waves-light"><i
class="ri-add-fill me-1 align-bottom"></i> Add</a>
@ -22,19 +24,16 @@
<thead>
<tr>
<th>S.N</th>
<th>Leave Type</th>
<th>Created By</th>
<th>Title</th>
<th>Status</th>
<th>Action</th>
</tr>
</thead>
<tbody>
@forelse ($leaveTypes as $key => $leaveType)
@forelse ($leaveTypeLists as $key => $leaveType)
<tr>
<td>{{ $key + 1 }}</td>
<td>{{ $leaveType->employee_id }}</td>
<td>{{ $leaveType->start_date }}</td>
<td>{{ $leaveType->end_date }}</td>
<td>{{ $leaveType->title }}</td>
<td>{{ $leaveType->created_at }}</td>
<td>
<div class="hstack flex-wrap gap-3">
@ -42,12 +41,12 @@
data-bs-target="#viewModal">
<i class="ri-eye-line"></i>
</a>
<a href="{{ route('leaveType.edit', $leaveType->leaveType_id) }}"
<a href="{{ route('leaveType.edit', $leaveType->leave_type_id) }}"
class="link-success fs-15 edit-item-btn"><i class="ri-edit-2-line"></i></a>
<a href="javascript:void(0);"
data-link="{{ route('leaveType.destroy', $leaveType->leaveType_id) }}"
data-id="{{ $leaveType->leave_id }}" class="link-danger fs-15 remove-item-btn"><i
data-link="{{ route('leaveType.destroy', $leaveType->leave_type_id) }}"
data-id="{{ $leaveType->leave_type_id }}" class="link-danger fs-15 remove-item-btn"><i
class="ri-delete-bin-line"></i></a>
</div>

View File

@ -1,23 +1,12 @@
<div class="mb-3">
<label for="employee_id" class="form-label">Employee Name</label>
{{ html()->select('employee_id', $employeeList)->class('form-select')->placeholder('Select Employee') }}
</div>
<div class="mb-3">
<label for="start_date" class="form-label">Start Leave Date</label>
<input type="date" class="form-control" id="start_date" name="start_date"
value="{{ old('start_date', $leave->start_date ?? '') }}">
</div>
<div class="mb-3">
<label for="end_date" class="form-label">End Leave Date</label>
<input type="date" class="form-control" id="end_date" name="end_date"
value="{{ old('end_date', $leave->end_date ?? '') }}">
<div class="row">
<div class="col-md-4">
{{ html()->label('Title')->class('form-label') }}
{{ html()->text('title')->class('form-control')->placeholder('Enter Leave Type') }}
</div>
</div>
<div class="text-end">
<button type="submit" class="btn btn-primary">{{ isset($leave) ? 'Update' : 'Add Leave' }}</button>
<button type="submit" class="btn btn-primary">{{ $editable ? 'Update' : 'Add Leave Type' }}</button>
</div>
@push('js')

View File

@ -6,7 +6,7 @@
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<form action="{{ route('leave.store') }}" class="needs-validation" novalidate method="post">
<form action="{{ route('leave-t.store') }}" class="needs-validation" novalidate method="post">
@csrf
@include('leave::leave.partials.action')
</form>

View File

@ -7,7 +7,7 @@
@include('layouts.partials.breadcrumb', ['title' => $title])
<!-- end page title -->
<div class="row">
<div class="col-lg-8">
<div class="col-lg-12">
<div class="card">
<div class="card-body">
<form action="{{ route('leave.store') }}" class="needs-validation" novalidate method="post">

View File

@ -15,7 +15,6 @@
<li class="breadcrumb-item active">{{ $title }}</li>
</ol>
</div>
</div>
</div>
</div>

View File

@ -50,7 +50,7 @@
<h5 class="card-title flex-grow-1 mb-0">Leave Lists</h5>
<div class="flex-shrink-0">
<a href="{{ route('leave.create') }}" class="btn btn-success waves-effect waves-light"><i
class="ri-add-fill me-1 align-bottom"></i> Add</a>
class="ri-add-fill me-1 align-bottom"></i> Apply Leave</a>
</div>
</div>
@ -104,5 +104,5 @@
</div>
</div>
<!-- container-fluid -->
@include('leave::leave.partials.view')
{{-- @include('leave::leave.partials.view') --}}
@endsection

View File

@ -1,22 +1,32 @@
<div class="mb-3">
<div class="row g-2">
<div class="col-md-6">
{{ html()->label('Leave Type')->class('form-label') }}
{{ html()->select('leave_type_id', $leaveTypeList)->class('form-select')->placeholder('Select Leave Type') }}
</div>
<label for="employee_id" class="form-label">Title</label>
</div>
<div class="col-md-6">
{{ html()->label('Employee')->class('form-label') }}
{{ html()->select('employee_id', [1 => 'Deepak'])->class('form-select')->placeholder('Select Employee') }}
</div>
<div class="mb-3">
<label for="start_date" class="form-label">Start Leave Date</label>
<input type="date" class="form-control" id="start_date" name="start_date"
value="{{ old('start_date', $leave->start_date ?? '') }}">
</div>
<div class="col-md-6">
{{ html()->label('Start Date')->class('form-label') }}
{{ html()->date('start_date')->class('form-control')->placeholder('Select Start Date') }}
</div>
<div class="mb-3">
<label for="end_date" class="form-label">End Leave Date</label>
<input type="date" class="form-control" id="end_date" name="end_date"
value="{{ old('end_date', $leave->end_date ?? '') }}">
</div>
<div class="col-md-6">
{{ html()->label('Start Date')->class('form-label') }}
{{ html()->date('end_date')->class('form-control')->placeholder('Select Start Date') }}
</div>
<div class="text-end">
<button type="submit" class="btn btn-primary">{{ isset($leave) ? 'Update' : 'Add Leave' }}</button>
<div class="col-md-12">
{{ html()->label('Description')->class('form-label') }}
{{ html()->textarea('description')->class('form-control')->placeholder('Write Reason for Leave') }}
</div>
<div class="text-end">
{{ html()->button($editable ? 'Update' : 'Add Leave', 'submit')->class('btn btn-success') }}
</div>
</div>
@push('js')

View File

@ -18,5 +18,4 @@ use Modules\Leave\Http\Controllers\LeaveTypeController;
Route::group([], function () {
Route::resource('leave', LeaveController::class)->names('leave');
Route::resource('leave-type', LeaveTypeController::class)->names('leaveType');
});