4 Commits

Author SHA1 Message Date
bf44886663 Attendance module 2024-04-16 17:23:35 +05:45
2c2526ef72 first commit 2024-04-16 11:29:08 +05:45
9a50f296fe calendar 2024-04-16 11:27:13 +05:45
d1851922ec complaint calendar transfer warning 2024-04-15 18:01:31 +05:45
48 changed files with 3364 additions and 77 deletions

View File

@ -0,0 +1,68 @@
<?php
namespace Modules\Admin\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class CalendarController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
$data['title'] = 'Calendar';
return view('admin::calendars.index', $data);
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
return view('admin::calendars.create');
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request): RedirectResponse
{
//
}
/**
* Show the specified resource.
*/
public function show($id)
{
return view('admin::calendars.show');
}
/**
* Show the form for editing the specified resource.
*/
public function edit($id)
{
return view('admin::calendars.edit');
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, $id): RedirectResponse
{
//
}
/**
* Remove the specified resource from storage.
*/
public function destroy($id)
{
//
}
}

View File

@ -34,7 +34,7 @@ class CompanyController extends Controller
*/
public function create()
{
$data['title'] = 'Create Companys';
$data['title'] = 'Create Company';
$data['editable'] = false;
$data['companyTypeLists'] = $this->adminService->pluckCompanyTypes();
return view('admin::companies.create', $data);

View File

@ -31,7 +31,7 @@ class ComplaintController extends Controller
*/
public function create()
{
$data['title'] = 'Create Complaints';
$data['title'] = 'Create Complaint';
$data['editable'] = false;
return view('admin::complaints.create', $data);
}
@ -65,7 +65,7 @@ class ComplaintController extends Controller
public function edit($id)
{
try {
$data['title'] = 'Edit Complaints';
$data['title'] = 'Edit Complaint';
$data['editable'] = true;
$data['complaint'] = $this->complaintRepository->getComplaintById($id);

View File

@ -0,0 +1,109 @@
<?php
namespace Modules\Admin\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Modules\Admin\Repositories\EventRepository;
class EventController extends Controller
{
private $eventRepository;
public function __construct(EventRepository $eventRepository)
{
$this->eventRepository = $eventRepository;
}
/**
* Display a listing of the resource.
*/
public function index()
{
$data['title'] = 'Event Lists';
$data['eventLists'] = $this->eventRepository->findAll();
return view('admin::events.index', $data);
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
$data['title'] = 'Create Event';
$data['editable'] = false;
return view('admin::events.create', $data);
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request): RedirectResponse
{
try {
$this->eventRepository->create($request->all());
toastr()->success('Event Created Successfully');
} catch (\Throwable $th) {
toastr()->error($th->getMessage());
}
return redirect()->route('event.index');
}
/**
* Show the specified resource.
*/
public function show($id)
{
return view('admin::events.show');
}
/**
* Show the form for editing the specified resource.
*/
public function edit($id)
{
try {
$data['title'] = 'Edit Event';
$data['editable'] = true;
$data['event'] = $this->eventRepository->getEventById($id);
} catch (\Throwable $th) {
toastr()->error($th->getMessage());
}
return view('admin::events.edit', $data);
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, $id): RedirectResponse
{
try {
$this->eventRepository->update($id, $request->all());
toastr()->success('Event Updated Successfully');
} catch (\Throwable $th) {
toastr()->error($th->getMessage());
}
return redirect()->route('event.index');
}
/**
* Remove the specified resource from storage.
*/
public function destroy($id)
{
try {
$this->eventRepository->delete($id);
toastr()->success('Event Deleted Successfully');
} catch (\Throwable $th) {
toastr()->error($th->getMessage());
}
return redirect()->route('event.index');
}
}

View File

@ -0,0 +1,109 @@
<?php
namespace Modules\Admin\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Modules\Admin\Repositories\HolidayRepository;
class HolidayController extends Controller
{
private $holidayRepository;
public function __construct(HolidayRepository $holidayRepository)
{
$this->holidayRepository = $holidayRepository;
}
/**
* Display a listing of the resource.
*/
public function index()
{
$data['title'] = 'Holiday Lists';
$data['holidayLists'] = $this->holidayRepository->findAll();
return view('admin::holidays.index', $data);
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
$data['title'] = 'Create Holiday';
$data['editable'] = false;
return view('admin::holidays.create', $data);
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request): RedirectResponse
{
try {
$this->holidayRepository->create($request->all());
toastr()->success('Holiday Created Successfully');
} catch (\Throwable $th) {
toastr()->error($th->getMessage());
}
return redirect()->route('holiday.index');
}
/**
* Show the specified resource.
*/
public function show($id)
{
return view('admin::holidays.show');
}
/**
* Show the form for editing the specified resource.
*/
public function edit($id)
{
try {
$data['title'] = 'Edit Holiday';
$data['editable'] = true;
$data['holiday'] = $this->holidayRepository->getHolidayById($id);
} catch (\Throwable $th) {
toastr()->error($th->getMessage());
}
return view('admin::holidays.edit', $data);
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, $id): RedirectResponse
{
try {
$this->holidayRepository->update($id, $request->all());
toastr()->success('Holiday Updated Successfully');
} catch (\Throwable $th) {
toastr()->error($th->getMessage());
}
return redirect()->route('holiday.index');
}
/**
* Remove the specified resource from storage.
*/
public function destroy($id)
{
try {
$this->holidayRepository->delete($id);
toastr()->success('Holiday Deleted Successfully');
} catch (\Throwable $th) {
toastr()->error($th->getMessage());
}
return redirect()->route('holiday.index');
}
}

View File

@ -31,7 +31,7 @@ class TransferController extends Controller
*/
public function create()
{
$data['title'] = 'Create Transfers';
$data['title'] = 'Create Transfer';
$data['editable'] = false;
return view('admin::transfers.create', $data);
}
@ -65,7 +65,7 @@ class TransferController extends Controller
public function edit($id)
{
try {
$data['title'] = 'Edit Transfers';
$data['title'] = 'Edit Transfer';
$data['editable'] = true;
$data['transfer'] = $this->transferRepository->getTransferById($id);

View File

@ -31,7 +31,7 @@ class WarningController extends Controller
*/
public function create()
{
$data['title'] = 'Create Warnings';
$data['title'] = 'Create Warning';
$data['editable'] = false;
return view('admin::warnings.create', $data);
}
@ -65,7 +65,7 @@ class WarningController extends Controller
public function edit($id)
{
try {
$data['title'] = 'Edit Warnings';
$data['title'] = 'Edit Warning';
$data['editable'] = true;
$data['warning'] = $this->warningRepository->getWarningById($id);

View File

@ -19,6 +19,10 @@ class Company extends Model
'title',
'alias',
'company_type_id',
'address',
'bank_name',
'bank_acc_no',
'bank_acc_branch',
'status',
'description',
'remarks',

View File

@ -0,0 +1,33 @@
<?php
namespace Modules\Admin\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Admin\Database\factories\EventFactory;
class Event extends Model
{
use HasFactory;
protected $table = 'tbl_events';
protected $primaryKey = "event_id";
/**
* The attributes that are mass assignable.
*/
protected $fillable = [
'title',
'alias',
'type',
'date',
'start_time',
'end_time',
'location',
'status',
'description',
'remarks',
'createdBy',
'updatedBy',
];
}

View File

@ -0,0 +1,30 @@
<?php
namespace Modules\Admin\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Admin\Database\factories\HolidayFactory;
class Holiday extends Model
{
use HasFactory;
protected $table = 'tbl_holidays';
protected $primaryKey = "holiday_id";
/**
* The attributes that are mass assignable.
*/
protected $fillable = [
'title',
'alias',
'date',
'status',
'description',
'remarks',
'createdBy',
'updatedBy'
];
}

View File

@ -0,0 +1,12 @@
<?php
namespace Modules\Admin\Repositories;
interface EventInterface
{
public function findAll();
public function getEventById($eventId);
public function delete($eventId);
public function create(array $eventDetails);
public function update($eventId, array $newDetails);
}

View File

@ -0,0 +1,35 @@
<?php
namespace Modules\Admin\Repositories;
use Modules\Admin\Models\Event;
class EventRepository implements EventInterface
{
public function findAll()
{
return Event::get();
}
public function getEventById($eventId)
{
return Event::findOrFail($eventId);
}
public function delete($eventId)
{
Event::destroy($eventId);
}
public function create(array $eventDetails)
{
return Event::create($eventDetails);
}
public function update($eventId, array $newDetails)
{
return Event::where('event_id', $eventId)->update($newDetails);
}
}

View File

@ -0,0 +1,12 @@
<?php
namespace Modules\Admin\Repositories;
interface HolidayInterface
{
public function findAll();
public function getHolidayById($holidayId);
public function delete($holidayId);
public function create(array $holidayDetails);
public function update($holidayId, array $newDetails);
}

View File

@ -0,0 +1,35 @@
<?php
namespace Modules\Admin\Repositories;
use Modules\Admin\Models\Holiday;
class HolidayRepository implements HolidayInterface
{
public function findAll()
{
return Holiday::get();
}
public function getHolidayById($holidayId)
{
return Holiday::findOrFail($holidayId);
}
public function delete($holidayId)
{
Holiday::destroy($holidayId);
}
public function create(array $holidayDetails)
{
return Holiday::create($holidayDetails);
}
public function update($holidayId, array $newDetails)
{
return Holiday::where('holiday_id', $holidayId)->update($newDetails);
}
}

View File

@ -18,6 +18,9 @@ return new class extends Migration {
$table->integer('status')->nullable();
$table->mediumText('description')->nullable();
$table->mediumText('remarks')->nullable();
$table->string('bank_name')->nullable();
$table->string('bank_acc_no')->nullable();
$table->string('bank_acc_branch')->nullable();
$table->unsignedBigInteger('createdBy')->nullable();
$table->unsignedBigInteger('updatedBy')->nullable();
$table->timestamps();

View File

@ -0,0 +1,38 @@
<?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::create('tbl_events', function (Blueprint $table) {
$table->unsignedTinyInteger('event_id')->autoIncrement();
$table->string('title')->nullable();
$table->string('alias')->nullable();
$table->string('type')->nullable();
$table->string('date')->nullable();
$table->time('start_time')->nullable();
$table->time('end_time')->nullable();
$table->integer('status')->nullable();
$table->mediumText('description')->nullable();
$table->string('location')->nullable();
$table->mediumText('remarks')->nullable();
$table->unsignedBigInteger('createdBy')->nullable();
$table->unsignedBigInteger('updatedBy')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('tbl_events');
}
};

View File

@ -0,0 +1,34 @@
<?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::create('tbl_holidays', function (Blueprint $table) {
$table->unsignedTinyInteger('holiday_id')->autoIncrement();
$table->string('title')->nullable();
$table->string('alias')->nullable();
$table->string('date')->nullable();
$table->integer('status')->nullable();
$table->mediumText('description')->nullable();
$table->mediumText('remarks')->nullable();
$table->unsignedBigInteger('createdBy')->nullable();
$table->unsignedBigInteger('updatedBy')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('tbl_holidays');
}
};

View File

@ -0,0 +1,224 @@
@extends('layouts.app')
@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-12">
<div class="row">
<div class="col-xl-3">
<div class="card card-h-100">
<div class="card-body">
<button class="btn btn-primary w-100" id="btn-new-event"><i class="mdi mdi-plus"></i> Create New
Event</button>
<div id="external-events">
<br>
<p class="text-muted">Drag and drop your event or click in the calendar</p>
<div class="external-event fc-event bg-success-subtle text-success" data-class="bg-success-subtle">
<i class="mdi mdi-checkbox-blank-circle me-2"></i>New Event Planning
</div>
<div class="external-event fc-event bg-info-subtle text-info" data-class="bg-info-subtle">
<i class="mdi mdi-checkbox-blank-circle me-2"></i>Meeting
</div>
<div class="external-event fc-event bg-warning-subtle text-warning" data-class="bg-warning-subtle">
<i class="mdi mdi-checkbox-blank-circle me-2"></i>Generating Reports
</div>
<div class="external-event fc-event bg-danger-subtle text-danger" data-class="bg-danger-subtle">
<i class="mdi mdi-checkbox-blank-circle me-2"></i>Create New theme
</div>
</div>
</div>
</div>
<div>
<h5 class="mb-1">Upcoming Events</h5>
<p class="text-muted">Don't miss scheduled events</p>
<div class="me-n1 mb-3 pe-2" data-simplebar style="height: 400px">
<div id="upcoming-event-list"></div>
</div>
</div>
<div class="card">
<div class="card-body bg-info-subtle">
<div class="d-flex">
<div class="flex-shrink-0">
<i data-feather="calendar" class="text-info icon-dual-info"></i>
</div>
<div class="flex-grow-1 ms-3">
<h6 class="fs-15">Welcome to your Calendar!</h6>
<p class="text-muted mb-0">Event that applications book will appear here. Click on an event to see
the details and manage applicants event.</p>
</div>
</div>
</div>
</div>
<!--end card-->
</div> <!-- end col-->
<div class="col-xl-9">
<div class="card card-h-100">
<div class="card-body">
<div id="calendar"></div>
</div>
</div>
</div><!-- end col -->
</div>
<!--end row-->
<div style='clear:both'></div>
<!-- Add New Event MODAL -->
<div class="modal fade" id="event-modal" tabindex="-1">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content border-0">
<div class="modal-header bg-info-subtle p-3">
<h5 class="modal-title" id="modal-title">Event</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-hidden="true"></button>
</div>
<div class="modal-body p-4">
<form class="needs-validation" name="event-form" id="form-event" novalidate>
<div class="text-end">
<a href="#" class="btn btn-sm btn-soft-primary" id="edit-event-btn" data-id="edit-event"
onclick="editEvent(this)" role="button">Edit</a>
</div>
<div class="event-details">
<div class="d-flex mb-2">
<div class="flex-grow-1 d-flex align-items-center">
<div class="me-3 flex-shrink-0">
<i class="ri-calendar-event-line text-muted fs-16"></i>
</div>
<div class="flex-grow-1">
<h6 class="d-block fw-semibold mb-0" id="event-start-date-tag"></h6>
</div>
</div>
</div>
<div class="d-flex align-items-center mb-2">
<div class="me-3 flex-shrink-0">
<i class="ri-time-line text-muted fs-16"></i>
</div>
<div class="flex-grow-1">
<h6 class="d-block fw-semibold mb-0"><span id="event-timepicker1-tag"></span> - <span
id="event-timepicker2-tag"></span></h6>
</div>
</div>
<div class="d-flex align-items-center mb-2">
<div class="me-3 flex-shrink-0">
<i class="ri-map-pin-line text-muted fs-16"></i>
</div>
<div class="flex-grow-1">
<h6 class="d-block fw-semibold mb-0"> <span id="event-location-tag"></span></h6>
</div>
</div>
<div class="d-flex mb-3">
<div class="me-3 flex-shrink-0">
<i class="ri-discuss-line text-muted fs-16"></i>
</div>
<div class="flex-grow-1">
<p class="d-block text-muted mb-0" id="event-description-tag"></p>
</div>
</div>
</div>
<div class="row event-form">
<div class="col-12">
<div class="mb-3">
<label class="form-label">Type</label>
<select class="form-select d-none" name="category" id="event-category" required>
<option value="bg-danger-subtle">Danger</option>
<option value="bg-success-subtle">Success</option>
<option value="bg-primary-subtle">Primary</option>
<option value="bg-info-subtle">Info</option>
<option value="bg-dark-subtle">Dark</option>
<option value="bg-warning-subtle">Warning</option>
</select>
<div class="invalid-feedback">Please select a valid event category</div>
</div>
</div>
<!--end col-->
<div class="col-12">
<div class="mb-3">
<label class="form-label">Event Name</label>
<input class="form-control d-none" placeholder="Enter event name" type="text"
name="title" id="event-title" required value="" />
<div class="invalid-feedback">Please provide a valid event name</div>
</div>
</div>
<!--end col-->
<div class="col-12">
<div class="mb-3">
<label>Event Date</label>
<div class="input-group d-none">
<input type="text" id="event-start-date" class="form-control flatpickr flatpickr-input"
placeholder="Select date" readonly required>
<span class="input-group-text"><i class="ri-calendar-event-line"></i></span>
</div>
</div>
</div>
<!--end col-->
<div class="col-12" id="event-time">
<div class="row">
<div class="col-6">
<div class="mb-3">
<label class="form-label">Start Time</label>
<div class="input-group d-none">
<input id="timepicker1" type="text" class="form-control flatpickr flatpickr-input"
placeholder="Select start time" readonly>
<span class="input-group-text"><i class="ri-time-line"></i></span>
</div>
</div>
</div>
<div class="col-6">
<div class="mb-3">
<label class="form-label">End Time</label>
<div class="input-group d-none">
<input id="timepicker2" type="text" class="form-control flatpickr flatpickr-input"
placeholder="Select end time" readonly>
<span class="input-group-text"><i class="ri-time-line"></i></span>
</div>
</div>
</div>
</div>
</div>
<!--end col-->
<div class="col-12">
<div class="mb-3">
<label for="event-location">Location</label>
<div>
<input type="text" class="form-control d-none" name="event-location"
id="event-location" placeholder="Event location">
</div>
</div>
</div>
<!--end col-->
<input type="hidden" id="eventid" name="eventid" value="" />
<div class="col-12">
<div class="mb-3">
<label class="form-label">Description</label>
<textarea class="form-control d-none" id="event-description" placeholder="Enter a description" rows="3"
spellcheck="false"></textarea>
</div>
</div>
<!--end col-->
</div>
<!--end row-->
<div class="hstack justify-content-end gap-2">
<button type="button" class="btn btn-soft-danger" id="btn-delete-event"><i
class="ri-close-line align-bottom"></i> Delete</button>
<button type="submit" class="btn btn-success" id="btn-save-event">Add Event</button>
</div>
</form>
</div>
</div> <!-- end modal-content-->
</div> <!-- end modal dialog-->
</div> <!-- end modal-->
<!-- end modal-->
</div>
</div> <!-- end row-->
</div>
</div>
@endsection

View File

@ -0,0 +1,23 @@
@extends('layouts.app')
@section('content')
<div class="page-content">
<div class="container-fluid">
<!-- start page title -->
@include('layouts.partials.breadcrumb', ['title' => $title])
<!-- end page title -->
<div class='card'>
<div class='card-body'>
{{ html()->form('POST')->route('event.store')->class(['needs-validation'])->attributes(['novalidate'])->open() }}
@include('admin::partials.events.action')
{{ html()->form()->close() }}
</div>
</div>
</div>
@endsection

View File

@ -0,0 +1,23 @@
@extends('layouts.app')
@section('content')
<div class="page-content">
<div class="container-fluid">
<!-- start page title -->
@include('layouts.partials.breadcrumb', ['title' => $title])
<!-- end page title -->
<div class='card'>
<div class='card-body'>
{{ html()->modelForm($event, 'PUT')->route('event.update', $event->event_id)->class(['needs-validation'])->attributes(['novalidate'])->open() }}
@include('admin::partials.events.action')
{{ html()->form()->close() }}
</div>
</div>
</div>
@endsection

View File

@ -0,0 +1,76 @@
@extends('layouts.app')
@section('content')
<div class="page-content">
<div class="container-fluid">
<!-- start page title -->
@include('layouts.partials.breadcrumb', ['title' => $title])
<!-- end page title -->
<div class="card">
<div class="card-header align-items-center d-flex">
<h5 class="card-title flex-grow-1 mb-0">{{ $title }}</h5>
<div class="flex-shrink-0">
<a href="{{ route('event.create') }}" class="btn btn-success waves-effect waves-light"><i
class="ri-add-fill me-1 align-bottom"></i> Create Event</a>
</div>
</div>
<div class="card-body">
<table id="buttons-datatables" class="display table-sm table-bordered table">
<thead class="table-light">
<tr>
<th class="tb-col"><span class="overline-title">S.N</span></th>
<th class="tb-col"><span class="overline-title">Type</span></th>
<th class="tb-col"><span class="overline-title">Title</span></th>
<th class="tb-col"><span class="overline-title">Date</span></th>
<th class="tb-col"><span class="overline-title">Start Time</span></th>
<th class="tb-col"><span class="overline-title">Location</span></th>
<th class="tb-col" data-sortable="false"><span class="overline-title">Action</span>
</th>
</tr>
</thead>
<tbody>
@foreach ($eventLists as $index => $item)
<tr>
<td class="tb-col">{{ $index + 1 }}</td>
<td class="tb-col">{{ $item->type }}</td>
<td class="tb-col">{{ $item->title }}</td>
<td class="tb-col">{{ $item->date }}</td>
<td class="tb-col">{{ $item->start_time }}</td>
<td class="tb-col">{{ $item->location }}</td>
<td class="tb-col">
<div class="dropdown d-inline-block">
<button class="btn btn-soft-secondary btn-sm dropdown" type="button" data-bs-toggle="dropdown"
aria-expanded="false">
<i class="ri-more-fill align-middle"></i>
</button>
<ul class="dropdown-menu dropdown-menu-end">
<li><a href="{{ route('event.show', [$item->event_id]) }}" class="dropdown-item"><i
class="ri-eye-fill text-muted me-2 align-bottom"></i> View</a>
</li>
<li><a href="{{ route('event.edit', [$item->event_id]) }}" class="dropdown-item edit-item-btn"><i
class="ri-pencil-fill text-muted me-2 align-bottom"></i>
Edit</a>
</li>
<li>
<a href="{{ route('event.destroy', [$item->event_id]) }}" class="dropdown-item remove-item-btn"
onclick="confirmDelete(this.href)">
<i class="ri-delete-bin-fill text-muted me-2 align-bottom"></i> Delete
</a>
</li>
</ul>
</div>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
@endsection

View File

@ -0,0 +1,48 @@
@extends('layouts.app')
@section('content')
<div class="page-content">
<div class="container-fluid">
<!-- start page title -->
@include('layouts.partials.breadcrumb', ['title' => $title])
<!-- end page title -->
<div class='card'>
<div class="card-header align-items-center d-flex">
<h5 class="card-title flex-grow-1 mb-0">View Detail</h5>
<div class="flex-shrink-0">
<a href="{{ route('designations.index') }}" class="btn btn-success waves-effect waves-light"><i
class="ri-add-fill me-1 align-bottom"></i> Back to List</a>
</div>
</div>
<div class='card-body'>
<p><b>Title :&nbsp;&nbsp;&nbsp;&nbsp;</b> <span>{{ $data->title }}</span></p>
<p><b>Alias :&nbsp;&nbsp;&nbsp;&nbsp;</b> <span>{{ $data->alias }}</span></p>
<p><b>Status :&nbsp;&nbsp;&nbsp;&nbsp;</b> <span
class="{{ $data->status == 1 ? 'text-success' : 'text-danger' }}">{{ $data->status == 1 ? 'Active' : 'Inactive' }}</span>
</p>
<p><b>Remarks :&nbsp;&nbsp;&nbsp;&nbsp;</b> <span>{{ $data->remarks }}</span></p>
<p><b>Display Order :&nbsp;&nbsp;&nbsp;&nbsp;</b> <span>{{ $data->display_order }}</span></p>
<p><b>Createdby :&nbsp;&nbsp;&nbsp;&nbsp;</b> <span>{{ $data->createdby }}</span></p>
<p><b>Updatedby :&nbsp;&nbsp;&nbsp;&nbsp;</b> <span>{{ $data->updatedby }}</span></p>
<p><b>Job Description :&nbsp;&nbsp;&nbsp;&nbsp;</b> <span>{{ $data->job_description }}</span></p>
<p><b>Departments Id :&nbsp;&nbsp;&nbsp;&nbsp;</b> <span>{{ $data->departments_id }}</span></p>
<div class="d-flex justify-content-between">
<div>
<p><b>Created On :</b>&nbsp;&nbsp;&nbsp;<span>{{ $data->created_at }}</span></p>
<p><b>Created By :</b>&nbsp;&nbsp;&nbsp;<span>{{ $data->createdBy }}</span></p>
</div>
<div>
<p><b>Updated On :</b>&nbsp;&nbsp;&nbsp;<span>{{ $data->updated_at }}</span></p>
<p><b>Updated By :</b>&nbsp;&nbsp;&nbsp;<span>{{ $data->updatedBy }}</span></p>
</div>
</div>
</div>
</div>
</div>
</div>
@endSection

View File

@ -0,0 +1,23 @@
@extends('layouts.app')
@section('content')
<div class="page-content">
<div class="container-fluid">
<!-- start page title -->
@include('layouts.partials.breadcrumb', ['title' => $title])
<!-- end page title -->
<div class='card'>
<div class='card-body'>
{{ html()->form('POST')->route('holiday.store')->class(['needs-validation'])->attributes(['novalidate'])->open() }}
@include('admin::partials.holidays.action')
{{ html()->form()->close() }}
</div>
</div>
</div>
@endsection

View File

@ -0,0 +1,23 @@
@extends('layouts.app')
@section('content')
<div class="page-content">
<div class="container-fluid">
<!-- start page title -->
@include('layouts.partials.breadcrumb', ['title' => $title])
<!-- end page title -->
<div class='card'>
<div class='card-body'>
{{ html()->modelForm($holiday, 'PUT')->route('holiday.update', $holiday->holiday_id)->class(['needs-validation'])->attributes(['novalidate'])->open() }}
@include('admin::partials.holidays.action')
{{ html()->form()->close() }}
</div>
</div>
</div>
@endsection

View File

@ -0,0 +1,71 @@
@extends('layouts.app')
@section('content')
<div class="page-content">
<div class="container-fluid">
<!-- start page title -->
@include('layouts.partials.breadcrumb', ['title' => $title])
<!-- end page title -->
<div class="card">
<div class="card-header align-items-center d-flex">
<h5 class="card-title flex-grow-1 mb-0">{{ $title }}</h5>
<div class="flex-shrink-0">
<a href="{{ route('holiday.create') }}" class="btn btn-success waves-effect waves-light"><i
class="ri-add-fill me-1 align-bottom"></i> Create Holiday</a>
</div>
</div>
<div class="card-body">
<table id="buttons-datatables" class="display table-sm table-bordered table">
<thead class="table-light">
<tr>
<th class="tb-col"><span class="overline-title">S.N</span></th>
<th class="tb-col"><span class="overline-title">Type</span></th>
<th class="tb-col"><span class="overline-title">Title</span></th>
<th class="tb-col"><span class="overline-title">Date</span></th>
<th class="tb-col" data-sortable="false"><span class="overline-title">Action</span>
</th>
</tr>
</thead>
<tbody>
@foreach ($holidayLists as $index => $item)
<tr>
<td class="tb-col">{{ $index + 1 }}</td>
<td class="tb-col">{{ $item->title }}</td>
<td class="tb-col">{{ $item->date }}</td>
<td class="tb-col">
<div class="dropdown d-inline-block">
<button class="btn btn-soft-secondary btn-sm dropdown" type="button" data-bs-toggle="dropdown"
aria-expanded="false">
<i class="ri-more-fill align-middle"></i>
</button>
<ul class="dropdown-menu dropdown-menu-end">
<li><a href="{{ route('holiday.show', [$item->holiday_id]) }}" class="dropdown-item"><i
class="ri-eye-fill text-muted me-2 align-bottom"></i> View</a>
</li>
<li><a href="{{ route('holiday.edit', [$item->holiday_id]) }}" class="dropdown-item edit-item-btn"><i
class="ri-pencil-fill text-muted me-2 align-bottom"></i>
Edit</a>
</li>
<li>
<a href="{{ route('holiday.destroy', [$item->holiday_id]) }}" class="dropdown-item remove-item-btn"
onclick="confirmDelete(this.href)">
<i class="ri-delete-bin-fill text-muted me-2 align-bottom"></i> Delete
</a>
</li>
</ul>
</div>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
@endsection

View File

@ -0,0 +1,48 @@
@extends('layouts.app')
@section('content')
<div class="page-content">
<div class="container-fluid">
<!-- start page title -->
@include('layouts.partials.breadcrumb', ['title' => $title])
<!-- end page title -->
<div class='card'>
<div class="card-header align-items-center d-flex">
<h5 class="card-title flex-grow-1 mb-0">View Detail</h5>
<div class="flex-shrink-0">
<a href="{{ route('designations.index') }}" class="btn btn-success waves-effect waves-light"><i
class="ri-add-fill me-1 align-bottom"></i> Back to List</a>
</div>
</div>
<div class='card-body'>
<p><b>Title :&nbsp;&nbsp;&nbsp;&nbsp;</b> <span>{{ $data->title }}</span></p>
<p><b>Alias :&nbsp;&nbsp;&nbsp;&nbsp;</b> <span>{{ $data->alias }}</span></p>
<p><b>Status :&nbsp;&nbsp;&nbsp;&nbsp;</b> <span
class="{{ $data->status == 1 ? 'text-success' : 'text-danger' }}">{{ $data->status == 1 ? 'Active' : 'Inactive' }}</span>
</p>
<p><b>Remarks :&nbsp;&nbsp;&nbsp;&nbsp;</b> <span>{{ $data->remarks }}</span></p>
<p><b>Display Order :&nbsp;&nbsp;&nbsp;&nbsp;</b> <span>{{ $data->display_order }}</span></p>
<p><b>Createdby :&nbsp;&nbsp;&nbsp;&nbsp;</b> <span>{{ $data->createdby }}</span></p>
<p><b>Updatedby :&nbsp;&nbsp;&nbsp;&nbsp;</b> <span>{{ $data->updatedby }}</span></p>
<p><b>Job Description :&nbsp;&nbsp;&nbsp;&nbsp;</b> <span>{{ $data->job_description }}</span></p>
<p><b>Departments Id :&nbsp;&nbsp;&nbsp;&nbsp;</b> <span>{{ $data->departments_id }}</span></p>
<div class="d-flex justify-content-between">
<div>
<p><b>Created On :</b>&nbsp;&nbsp;&nbsp;<span>{{ $data->created_at }}</span></p>
<p><b>Created By :</b>&nbsp;&nbsp;&nbsp;<span>{{ $data->createdBy }}</span></p>
</div>
<div>
<p><b>Updated On :</b>&nbsp;&nbsp;&nbsp;<span>{{ $data->updated_at }}</span></p>
<p><b>Updated By :</b>&nbsp;&nbsp;&nbsp;<span>{{ $data->updatedBy }}</span></p>
</div>
</div>
</div>
</div>
</div>
</div>
@endSection

View File

@ -1,8 +1,8 @@
<div class="row gy-3">
<div class="col-lg-4 col-md-6">
{{ html()->label('Title')->class('form-label') }}
{{ html()->text('title')->class('form-control')->placeholder('Enter Title') }}
{{ html()->label('Name')->class('form-label') }}
{{ html()->text('title')->class('form-control')->placeholder('Company Name') }}
</div>
<div class="col-lg-4 col-md-6">
@ -10,17 +10,38 @@
{{ html()->select('company_type_id', $companyTypeLists)->class('form-select')->placeholder('Select Company Type') }}
</div>
<div class="col-lg-4 col-md-6">
{{ html()->label('Address')->class('form-label') }}
{{ html()->text('address')->class('form-control')->placeholder('Company Full Address') }}
</div>
<div class="col-lg-12 col-md-12">
{{ html()->label('Description')->class('form-label') }}
{{ html()->textarea('description')->class('form-control')->attributes(['rows' => 5]) }}
{{ html()->textarea('description')->class('form-control')->placeholder('Company Description')->attributes(['rows' => 3]) }}
</div>
</div>
<div class="col-lg-12 col-md-12">
{{ html()->label('Remarks')->class('form-label') }}
{{ html()->textarea('remarks')->class('form-control')->attributes(['rows' => 5]) }}
<div class="row">
<div class="col-md-12 py-4">
<h5 class="text-center">Bank Details</h5>
<div class="border-dash border"></div>
</div>
<div class="col-lg-4 col-md-6">
{{ html()->label('Name')->class('form-label') }}
{{ html()->text('bank_name')->class('form-control')->placeholder('Bank Name') }}
</div>
<div class="text-end">
<div class="col-lg-4 col-md-6">
{{ html()->label('Account Number')->class('form-label') }}
{{ html()->text('bank_acc_no')->class('form-control')->placeholder('Bank Account Number') }}
</div>
<div class="col-lg-4 col-md-6">
{{ html()->label('Branch')->class('form-label') }}
{{ html()->text('bank_acc_branch')->class('form-control')->placeholder('Branch Name') }}
</div>
<div class="text-end mt-4">
{{ html()->button($editable ? 'Update' : 'Add Company', 'submit')->class('btn btn-success') }}
</div>
</div>

View File

@ -0,0 +1,50 @@
<div class="row gy-3">
<div class="col-lg-4 col-md-6">
{{ html()->label('Event Type')->class('form-label') }}
{{ html()->select('type')->class('form-select')->placeholder('Select Event Type') }}
</div>
<div class="col-lg-4 col-md-6">
{{ html()->label('Title')->class('form-label') }}
{{ html()->text('title')->class('form-control')->placeholder('Event Title') }}
</div>
<div class="col-lg-4 col-md-6">
{{ html()->label('Date')->class('form-label') }}
<div class="input-group">
{{ html()->text('date')->class('form-control flatpickr flatpickr-input')->id('event-start-date')->placeholder('Select Event Date') }}
<span class="input-group-text"><i class="ri-calendar-event-line"></i></span>
</div>
</div>
<div class="col-lg-4 col-md-6">
{{ html()->label('Start Time')->class('form-label') }}
{{ html()->time('start_time')->class('form-control')->placeholder('Event Start Time') }}
</div>
<div class="col-lg-4 col-md-6">
{{ html()->label('End Time')->class('form-label') }}
{{ html()->time('end_time')->class('form-control')->placeholder('Event End Time') }}
</div>
<div class="col-lg-4 col-md-6">
{{ html()->label('Location')->class('form-label') }}
{{ html()->text('location')->class('form-control')->placeholder('Event Location') }}
</div>
<div class="col-lg-12 col-md-12">
{{ html()->label('Description')->class('form-label') }}
{{ html()->textarea('description')->class('form-control')->placeholder('Event Description')->attributes(['rows' => 3]) }}
</div>
<div class="col-lg-12 col-md-12">
{{ html()->label('Remarks')->class('form-label') }}
{{ html()->textarea('remarks')->class('form-control')->attributes(['rows' => 3]) }}
</div>
<div class="text-end">
{{ html()->button($editable ? 'Update' : 'Add Event', 'submit')->class('btn btn-success') }}
</div>
</div>

View File

@ -0,0 +1,29 @@
<div class="row gy-3">
<div class="col-lg-4 col-md-6">
{{ html()->label('Title')->class('form-label') }}
{{ html()->text('title')->class('form-control')->placeholder('Holiday Title') }}
</div>
<div class="col-lg-4 col-md-6">
{{ html()->label('Date')->class('form-label') }}
<div class="input-group">
{{ html()->text('date')->class('form-control flatpickr flatpickr-input')->id('event-start-date')->placeholder('Select Holiday Date') }}
<span class="input-group-text"><i class="ri-calendar-event-line"></i></span>
</div>
</div>
<div class="col-lg-12 col-md-12">
{{ html()->label('Description')->class('form-label') }}
{{ html()->textarea('description')->class('form-control')->placeholder('Holiday Description')->attributes(['rows' => 3]) }}
</div>
<div class="col-lg-12 col-md-12">
{{ html()->label('Remarks')->class('form-label') }}
{{ html()->textarea('remarks')->class('form-control')->attributes(['rows' => 3]) }}
</div>
<div class="text-end">
{{ html()->button($editable ? 'Update' : 'Add Holiday', 'submit')->class('btn btn-success') }}
</div>
</div>

View File

@ -3,9 +3,12 @@
use Illuminate\Support\Facades\Route;
use Modules\Admin\Http\Controllers\AdminController;
use Modules\Admin\Http\Controllers\AppreciationController;
use Modules\Admin\Http\Controllers\CalendarController;
use Modules\Admin\Http\Controllers\CompanyController;
use Modules\Admin\Http\Controllers\CompanyTypeController;
use Modules\Admin\Http\Controllers\ComplaintController;
use Modules\Admin\Http\Controllers\EventController;
use Modules\Admin\Http\Controllers\HolidayController;
use Modules\Admin\Http\Controllers\PromotionDemotionController;
use Modules\Admin\Http\Controllers\ResignationController;
use Modules\Admin\Http\Controllers\TransferController;
@ -32,6 +35,9 @@ Route::group([], function () {
Route::resource('warning', WarningController::class)->names('warning');
Route::resource('company', CompanyController::class)->names('company');
Route::resource('company-type', CompanyTypeController::class)->names('companyType');
Route::resource('event', EventController::class)->names('event');
Route::resource('holiday', HolidayController::class)->names('holiday');
Route::resource('calendar', CalendarController::class)->names('calendar');
});
require __DIR__ . '/route.countries.php';

View File

@ -6,15 +6,24 @@ use App\Http\Controllers\Controller;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Modules\Attendance\Repositories\AttendanceRepository;
class AttendanceController extends Controller
{
private $attendanceRepository;
public function __construct(AttendanceRepository $attendanceRepository)
{
$this->attendanceRepository = $attendanceRepository;
}
/**
* Display a listing of the resource.
*/
public function index()
{
return view('attendance::index');
$data['title'] = 'Attendance Lists';
$data['attendanceLists'] = $this->attendanceRepository->findAll();
return view('attendance::attendances.index', $data);
}
/**
@ -22,7 +31,9 @@ class AttendanceController extends Controller
*/
public function create()
{
return view('attendance::create');
$data['title'] = 'Create Attendance';
$data['editable'] = false;
return view('attendance::attendances.create', $data);
}
/**
@ -30,7 +41,17 @@ class AttendanceController extends Controller
*/
public function store(Request $request): RedirectResponse
{
//
$request->merge([
'date' => $request->date ? $request->date : now()->format('Y-m-d'),
]);
try {
$this->attendanceRepository->create($request->all());
toastr()->success('Attendance Created Successfully');
} catch (\Throwable $th) {
toastr()->error($th->getMessage());
}
return redirect()->route('attendance.index');
}
/**
@ -38,7 +59,7 @@ class AttendanceController extends Controller
*/
public function show($id)
{
return view('attendance::show');
return view('attendance::attendances.show');
}
/**
@ -46,7 +67,17 @@ class AttendanceController extends Controller
*/
public function edit($id)
{
return view('attendance::edit');
try {
$data['title'] = 'Edit Attendance';
$data['editable'] = true;
$data['attendance'] = $this->attendanceRepository->getAttendanceById($id);
} catch (\Throwable $th) {
toastr()->error($th->getMessage());
}
return view('attendance::attendances.edit', $data);
}
/**
@ -54,7 +85,15 @@ class AttendanceController extends Controller
*/
public function update(Request $request, $id): RedirectResponse
{
//
try {
$this->attendanceRepository->update($id, $request->all());
toastr()->success('Attendance Updated Successfully');
} catch (\Throwable $th) {
toastr()->error($th->getMessage());
}
return redirect()->route('attendance.index');
}
/**
@ -62,6 +101,12 @@ class AttendanceController extends Controller
*/
public function destroy($id)
{
//
try {
$this->attendanceRepository->delete($id);
toastr()->success('Attendance Deleted Successfully');
} catch (\Throwable $th) {
toastr()->error($th->getMessage());
}
return redirect()->route('attendance.index');
}
}

View File

@ -0,0 +1,30 @@
<?php
namespace Modules\Attendance\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Modules\Attendance\Database\factories\AttendanceFactory;
class Attendance extends Model
{
use HasFactory;
protected $table = 'tbl_attendances';
protected $primaryKey = 'attendance_id';
/**
* The attributes that are mass assignable.
*/
protected $fillable = [
'clock_in_time',
'clock_out_time',
'work_from_type',
'date',
'status',
'total_hours',
'description',
'remarks',
'createdBy',
'updatedBy',
];
}

View File

@ -0,0 +1,12 @@
<?php
namespace Modules\Attendance\Repositories;
interface AttendanceInterface
{
public function findAll();
public function getAttendanceById($attendanceId);
public function delete($attendanceId);
public function create(array $attendanceDetails);
public function update($attendanceId, array $newDetails);
}

View File

@ -0,0 +1,35 @@
<?php
namespace Modules\Attendance\Repositories;
use Modules\Attendance\Models\Attendance;
class AttendanceRepository implements AttendanceInterface
{
public function findAll()
{
return Attendance::get();
}
public function getAttendanceById($attendanceId)
{
return Attendance::findOrFail($attendanceId);
}
public function delete($attendanceId)
{
Attendance::destroy($attendanceId);
}
public function create(array $attendanceDetails)
{
return Attendance::create($attendanceDetails);
}
public function update($attendanceId, array $newDetails)
{
return Attendance::where('attendance_id', $attendanceId)->update($newDetails);
}
}

View File

@ -0,0 +1,37 @@
<?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::create('tbl_attendances', function (Blueprint $table) {
$table->unsignedTinyInteger('attendance_id')->autoIncrement();
$table->unsignedBigInteger('employee_id')->nullable();
$table->time('clock_in_time')->nullable();
$table->time('clock_out_time')->nullable();
$table->string('work_from_type')->nullable();
$table->date('date')->nullable();
$table->integer('status')->nullable();
$table->integer('total_hours')->nullable();
$table->mediumText('description')->nullable();
$table->mediumText('remarks')->nullable();
$table->unsignedBigInteger('createdBy')->nullable();
$table->unsignedBigInteger('updatedBy')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('tbl_attendances');
}
};

View File

@ -0,0 +1,23 @@
@extends('layouts.app')
@section('content')
<div class="page-content">
<div class="container-fluid">
<!-- start page title -->
@include('layouts.partials.breadcrumb', ['title' => $title])
<!-- end page title -->
<div class='card'>
<div class='card-body'>
{{ html()->form('POST')->route('attendance.store')->class(['needs-validation'])->attributes(['novalidate'])->open() }}
@include('attendance::partials.attendances.action')
{{ html()->form()->close() }}
</div>
</div>
</div>
@endsection

View File

@ -0,0 +1,23 @@
@extends('layouts.app')
@section('content')
<div class="page-content">
<div class="container-fluid">
<!-- start page title -->
@include('layouts.partials.breadcrumb', ['title' => $title])
<!-- end page title -->
<div class='card'>
<div class='card-body'>
{{ html()->modelForm($attendance, 'PUT')->route('attendance.update', $attendance->attendance_id)->class(['needs-validation'])->attributes(['novalidate'])->open() }}
@include('attendance::partials.attendances.action')
{{ html()->form()->close() }}
</div>
</div>
</div>
@endsection

View File

@ -0,0 +1,238 @@
@extends('layouts.app')
@section('content')
<div class="page-content">
<div class="container-fluid">
<!-- start page title -->
@include('layouts.partials.breadcrumb', ['title' => $title])
<!-- end page title -->
<div class="card">
<div class="card-header align-items-center d-flex">
<h5 class="card-title flex-grow-1 mb-0">{{ $title }}</h5>
<div class="flex-shrink-0">
<a href="{{ route('attendance.create') }}" class="btn btn-success waves-effect waves-light"><i
class="ri-add-fill me-1 align-bottom"></i>Mark Attendance</a>
</div>
</div>
<div class="card-body">
<div class="row">
<div class="col-md-12">
<div class="table-responsive">
<table class="dataTable table-bordered table-hover mt-3 table" id="example">
<thead class="thead-light">
<tr>
<th class="px-2" style="vertical-align: middle;">Employee</th>
<th class="f-11 pl-1 pr-2">1
<br>
<span class="text-dark-grey f-10">
Mon
</span>
</th>
<th class="f-11 pl-1 pr-2">2
<br>
<span class="text-dark-grey f-10">
Tue
</span>
</th>
<th class="f-11 pl-1 pr-2">3
<br>
<span class="text-dark-grey f-10">
Wed
</span>
</th>
<th class="f-11 pl-1 pr-2">4
<br>
<span class="text-dark-grey f-10">
Thu
</span>
</th>
<th class="f-11 pl-1 pr-2">5
<br>
<span class="text-dark-grey f-10">
Fri
</span>
</th>
<th class="f-11 pl-1 pr-2">6
<br>
<span class="text-dark-grey f-10">
Sat
</span>
</th>
<th class="f-11 pl-1 pr-2">7
<br>
<span class="text-dark-grey f-10">
Sun
</span>
</th>
<th class="f-11 pl-1 pr-2">8
<br>
<span class="text-dark-grey f-10">
Mon
</span>
</th>
<th class="f-11 pl-1 pr-2">9
<br>
<span class="text-dark-grey f-10">
Tue
</span>
</th>
<th class="f-11 pl-1 pr-2">10
<br>
<span class="text-dark-grey f-10">
Wed
</span>
</th>
<th class="f-11 pl-1 pr-2">11
<br>
<span class="text-dark-grey f-10">
Thu
</span>
</th>
<th class="f-11 pl-1 pr-2">12
<br>
<span class="text-dark-grey f-10">
Fri
</span>
</th>
<th class="f-11 pl-1 pr-2">13
<br>
<span class="text-dark-grey f-10">
Sat
</span>
</th>
<th class="f-11 pl-1 pr-2">14
<br>
<span class="text-dark-grey f-10">
Sun
</span>
</th>
<th class="f-11 pl-1 pr-2">15
<br>
<span class="text-dark-grey f-10">
Mon
</span>
</th>
<th class="f-11 pl-1 pr-2">16
<br>
<span class="text-dark-grey f-10">
Tue
</span>
</th>
<th class="f-11 pl-1 pr-2">17
<br>
<span class="text-dark-grey f-10">
Wed
</span>
</th>
<th class="f-11 pl-1 pr-2">18
<br>
<span class="text-dark-grey f-10">
Thu
</span>
</th>
<th class="f-11 pl-1 pr-2">19
<br>
<span class="text-dark-grey f-10">
Fri
</span>
</th>
<th class="f-11 pl-1 pr-2">20
<br>
<span class="text-dark-grey f-10">
Sat
</span>
</th>
<th class="f-11 pl-1 pr-2">21
<br>
<span class="text-dark-grey f-10">
Sun
</span>
</th>
<th class="f-11 pl-1 pr-2">22
<br>
<span class="text-dark-grey f-10">
Mon
</span>
</th>
<th class="f-11 pl-1 pr-2">23
<br>
<span class="text-dark-grey f-10">
Tue
</span>
</th>
<th class="f-11 pl-1 pr-2">24
<br>
<span class="text-dark-grey f-10">
Wed
</span>
</th>
<th class="f-11 pl-1 pr-2">25
<br>
<span class="text-dark-grey f-10">
Thu
</span>
</th>
<th class="f-11 pl-1 pr-2">26
<br>
<span class="text-dark-grey f-10">
Fri
</span>
</th>
<th class="f-11 pl-1 pr-2">27
<br>
<span class="text-dark-grey f-10">
Sat
</span>
</th>
<th class="f-11 pl-1 pr-2">28
<br>
<span class="text-dark-grey f-10">
Sun
</span>
</th>
<th class="f-11 pl-1 pr-2">29
<br>
<span class="text-dark-grey f-10">
Mon
</span>
</th>
<th class="f-11 pl-1 pr-2">30
<br>
<span class="text-dark-grey f-10">
Tue
</span>
</th>
<th class="px-2 text-right">Total</th>
</tr>
</thead>
<tbody>
<tr>
<td class="w-10 px-2">
<div class="align-items-center mw-50">
<div class="text-truncate">
<h5 class="f-12 mb-0">
<a href="https://demo.worksuite.biz/account/employees/1" class="text-darkest-grey">Mr.
Fletcher Berge <span class="badge badge-secondary ml-1 pr-1">It's you</span></a>
</h5>
<p class="f-12 text-dark-grey mb-0">
Junior
</p>
</div>
</div>
</td>
<td class="text-dark f-w-500 attendance-total w-100 px-2 text-right">
0 / <span class="text-lightest">30</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection

View File

@ -0,0 +1,32 @@
<div class="row gy-3">
<div class="col-lg-4 col-md-6">
{{ html()->label('Employee')->class('form-label') }}
{{ html()->select('employee_id')->class('form-select')->placeholder('Select Employee') }}
</div>
<div class="col-lg-4 col-md-6">
{{ html()->label('Clock In')->class('form-label') }}
{{ html()->time('clock_in_time')->class('form-control') }}
</div>
<div class="col-lg-4 col-md-6">
{{ html()->label('Clock Out')->class('form-label') }}
{{ html()->time('clock_out_time')->class('form-control') }}
</div>
<div class="col-lg-4 col-md-6">
{{ html()->label('Date')->class('form-label') }}
{{ html()->date('date')->class('form-control')->placeholder('Attendance Date') }}
</div>
<div class="col-lg-4 col-md-6">
{{ html()->label('Working From')->class('form-label') }}
{{ html()->select('work_from_type', ['home' => 'Home', 'office' => 'Office', 'other' => 'Other'])->class('form-select')->placeholder('Working From') }}
</div>
<div class="text-end">
{{ html()->button($editable ? 'Update' : 'Mark Attendance', 'submit')->class('btn btn-success') }}
</div>
</div>

View File

@ -34,7 +34,6 @@
{{ html()->label('Date of Birth')->class('form-label') }}
{{ html()->date('dob')->class('form-control')->placeholder('Choose Date of Birth')->required() }}
{{ html()->div('Please choose dob')->class('invalid-feedback') }}
</div>
<div class="col-md-4">
@ -56,9 +55,7 @@
<div class="col-md-4">
{{ html()->label('Upload Profile Picture')->class('form-label') }}
{{ html()->file('profile_picture')->class('form-control') }}
</div>
</div>
<div class="row gy-1 mt-1">

View File

@ -47,28 +47,6 @@ document.querySelectorAll('.ckeditor-classic').forEach(editor => {
});
$('.date-picker').nepaliDatePicker({
// dateFormat: '%D, %M %d, %y',
dateFormat: '%y-%m-%d',
closeOnDateSelect: true,
});
// initialize filepond
const inputElement = document.querySelector('.filepond');
console.log(inputElement);
FilePond.registerPlugin(FilePondPluginImagePreview);
const pond = FilePond.create(inputElement);
FilePond.setOptions({
server: {
process: "/filepond/upload",
revert: '/delete',
headers: {
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').getAttribute('content'),
},
}
});
//ajax form submit
document.addEventListener('DOMContentLoaded', function () {
let form = document.getElementById('storeUpdateForm');

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -9,32 +9,28 @@
<title>{{ config('app.name', 'Laravel') }}</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta content="Education Consultancy" name="description" />
<meta content="Themesbrand" name="author" />
<meta content="OMIS" name="description" />
<!-- App favicon -->
<link rel="shortcut icon" href="{{ asset('assets/images/favicon.ico') }}">
<!--datatable css-->
<link rel="stylesheet" href="https://cdn.datatables.net/1.11.5/css/dataTables.bootstrap5.min.css" />
<!--datatable responsive css-->
<link rel="stylesheet" href="https://cdn.datatables.net/responsive/2.2.9/css/responsive.bootstrap.min.css" />
<link rel="stylesheet" href="https://cdn.datatables.net/buttons/2.2.2/css/buttons.dataTables.min.css">
<!-- Layout config Js -->
<script src="{{ asset('assets/js/layout.js') }}"></script>
<!-- Bootstrap Css -->
<link href="{{ asset('assets/css/bootstrap.min.css') }}" rel="stylesheet" type="text/css" />
<!-- Toastr Css -->
<link href="{{ asset('assets/css/toastr.css') }}" rel="stylesheet" type="text/css" />
<!-- Nepali DatePicker Css -->
<link href="{{ asset('assets/css/nepali.datepicker.v4.0.1.min.css') }}" rel="stylesheet" type="text/css" />
<!-- Filepond css -->
<link href="https://unpkg.com/filepond/dist/filepond.css" rel="stylesheet" />
<link href="https://unpkg.com/filepond-plugin-image-preview/dist/filepond-plugin-image-preview.css"
rel="stylesheet" />
<!-- App Css-->
<link href="{{ asset('assets/css/app.min.css') }}" rel="stylesheet" type="text/css" />
@ -58,10 +54,13 @@
<!-- removeNotificationModal -->
@include('layouts.partials.notification-modal')
<!-- /.modal -->
<!-- ========== App Menu ========== -->
@include('layouts.partials.sidebar')
<!-- Left Sidebar End -->
<!-- Vertical Overlay-->
<div class="vertical-overlay"></div>
@ -109,20 +108,36 @@
<script src="{{ asset('assets/libs/simplebar/simplebar.min.js') }}"></script>
<script src="{{ asset('assets/libs/node-waves/waves.min.js') }}"></script>
<script src="{{ asset('assets/libs/feather-icons/feather.min.js') }}"></script>
{{-- <script src="{{ asset('assets/js/pages/plugins/lord-icon-2.1.0.js') }}"></script> --}}
{{-- <script src="{{ asset('assets/js/plugins.js') }}"></script> --}}
<script src="{{ asset('assets/js/plugins.js') }}"></script>
<script src="{{ asset('assets/libs/@ckeditor/ckeditor5-build-classic/build/ckeditor.js') }}"></script>
<script src="{{ asset('assets/libs/toastr/toastr.min.js') }}"></script>
<script src="{{ asset('assets/libs/nepalidatepicker/nepali.datepicker.v4.0.1.min.js') }}"></script>
<script src="{{ asset('assets/libs/flatpickr/flatpickr.min.js') }}"></script>
<script src="https://cdn.datatables.net/1.11.5/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/1.11.5/js/dataTables.bootstrap5.min.js"></script>
<script src="{{ asset('assets/libs/fullcalendar/index.global.min.js') }}"></script>
<script src="{{ asset('assets/libs/choices.js') }}"></script>
<script src="{{ asset('assets/js/pages/calendar.init.js') }}"></script>
{{-- <script src="https://cdn.datatables.net/responsive/2.2.9/js/dataTables.responsive.min.js"></script>
<script src="https://cdn.datatables.net/buttons/2.2.2/js/dataTables.buttons.min.js"></script>
<script src="https://cdn.datatables.net/buttons/2.2.2/js/buttons.print.min.js"></script>
<script src="https://cdn.datatables.net/buttons/2.2.2/js/buttons.html5.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.53/vfs_fonts.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.53/pdfmake.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.3/jszip.min.js"></script> --}}
<script src="{{ asset('assets/js/pages/datatables.init.js') }}"></script>
<!--apexcharts-->
@ -136,16 +151,14 @@
<!-- projects js -->
{{-- <script src="{{ asset('assets/js/pages/dashboard-projects.init.js') }}"></script> --}}
<!-- filepond js -->
{{-- <script src="https://unpkg.com/filepond-plugin-image-preview/dist/filepond-plugin-image-preview.js"></script>
<script src="https://unpkg.com/filepond/dist/filepond.js"></script> --}}
<!-- App js -->
<script src="{{ asset('assets/js/app.js') }}"></script>
<!-- Custom js -->
<script src="{{ asset('assets/js/custom.js') }}"></script>
@stack('js')
</body>
</html>

View File

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

View File

@ -1,7 +1,7 @@
<footer class="footer">
<div class="container-fluid">
<div class="row">
<div class="col-sm-6">@php echo date('Y') @endphp © Education Consultancy.
<div class="col-sm-6">@php echo date('Y') @endphp © Bibhuti Solutions.
</div>
<div class="col-sm-6">
<div class="text-sm-end d-none d-sm-block">

View File

@ -39,6 +39,7 @@
aria-controls="MenuOne">
<i class="ri-building-2-line"></i> <span data-key="t-companies">Company Setup</span>
</a>
<div class="menu-dropdown collapse" id="MenuOne">
<ul class="nav nav-sm flex-column">
@ -51,13 +52,28 @@
<a href="{{ route('company.index') }}"
class="nav-link @if (\Request::is('company') || \Request::is('company/*')) active @endif">Company</a>
</li>
</ul>
</div>
</li>
<li class="nav-item">
<a class="nav-link menu-link" href="#MenuAttendance" data-bs-toggle="collapse" role="button"
aria-expanded="false" aria-controls="MenuAttendance">
<i class="ri-shopping-cart-2-line"></i> <span data-key="t-attendances">Attendance</span>
</a>
<div class="menu-dropdown collapse" id="MenuAttendance">
<ul class="nav nav-sm flex-column">
<li class="nav-item">
<a href="{{ route('attendance.index') }}"
class="nav-link @if (\Request::is('attendance')) active @endif">Attendance Report</a>
</li>
</ul>
</div>
</li>
{{-- <li class="nav-item">
<a class="nav-link menu-link" href="#MenuTwo" data-bs-toggle="collapse" role="button" aria-expanded="false"
aria-controls="MenuTwo">
<i class="ri-shopping-cart-2-line"></i> <span data-key="t-vendors">Vendor Setup</span>
@ -76,7 +92,7 @@
</li>
</ul>
</div>
</li>
</li> --}}
<li class="nav-item">
<a class="nav-link menu-link @if (\Request::is('employee') || \Request::is('employee/*')) active @endif"
@ -85,6 +101,13 @@
</a>
</li>
<li class="nav-item">
<a class="nav-link menu-link @if (\Request::is('calendar') || \Request::is('calendar/*')) active @endif"
href="{{ route('calendar.index') }}">
<i class="ri-calendar-line"></i> <span data-key="t-widgets">Calendar</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link menu-link" href="#leave" data-bs-toggle="collapse" role="button" aria-expanded="false"
aria-controls="leave">
@ -93,6 +116,7 @@
<div class="menu-dropdown collapse" id="leave">
<ul class="nav nav-sm flex-column">
<li class="nav-item">
<a href="{{ route('leaveType.index') }}"
class="nav-link @if (\Request::is('leavetype') || \Request::is('leavetype/*')) active @endif">Leave Type</a>
@ -103,11 +127,15 @@
class="nav-link @if (\Request::is('leave') || \Request::is('leave/*')) active @endif">Apply Leave</a>
</li>
<li class="nav-item">
<a href="" class="nav-link @if (\Request::is('leaveReport') || \Request::is('leaveReport/*')) active @endif">Leave Report</a>
</li>
</ul>
</div>
</li>
<li class="nav-item">
{{-- <li class="nav-item">
<a class="nav-link menu-link" href="#taxation" data-bs-toggle="collapse" role="button" aria-expanded="false"
aria-controls="taxation">
<i class="ri-book-2-line"></i> <span data-key="t-masters">Taxation</span>
@ -121,7 +149,7 @@
</li>
</ul>
</div>
</li>
</li> --}}
<li class="nav-item">
<a class="nav-link menu-link" href="#MenuThree" data-bs-toggle="collapse" role="button"
@ -226,6 +254,16 @@
class="nav-link @if (\Request::is('warning') || \Request::is('warning/*')) active @endif">Warnings</a>
</li>
<li class="nav-item">
<a href="{{ route('event.index') }}"
class="nav-link @if (\Request::is('event') || \Request::is('event/*')) active @endif">Manage Events</a>
</li>
<li class="nav-item">
<a href="{{ route('holiday.index') }}"
class="nav-link @if (\Request::is('holiday') || \Request::is('holiday/*')) active @endif">Manage Holidays</a>
</li>
</ul>
</div>
</li>