first commit
This commit is contained in:
18
Modules/PMS/resources/views/task/create.blade.php
Normal file
18
Modules/PMS/resources/views/task/create.blade.php
Normal file
@ -0,0 +1,18 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="page-content">
|
||||
<div class="container-fluid">
|
||||
@include('layouts.partials.breadcrumb', ['title' => $title])
|
||||
|
||||
{{ html()->form('POST')->route('task.store')->class(['needs-validation'])->attributes(['novalidate', 'enctype' => 'multipart/form-data'])->open() }}
|
||||
@include('pms::task.partials.action')
|
||||
{{ html()->form()->close() }}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('js')
|
||||
<script src="{{ asset('assets/js/pages/form-validation.init.js') }}"></script>
|
||||
@endpush
|
22
Modules/PMS/resources/views/task/edit.blade.php
Normal file
22
Modules/PMS/resources/views/task/edit.blade.php
Normal file
@ -0,0 +1,22 @@
|
||||
@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 -->
|
||||
|
||||
{{ html()->modelForm($task, 'PUT')->route('task.update', $task->id)->class(['needs-validation'])->attributes(['novalidate', 'enctype' => 'multipart/form-data'])->open() }}
|
||||
@include('pms::task.partials.action')
|
||||
{{ html()->closeModelForm() }}
|
||||
<!--end row-->
|
||||
|
||||
</div>
|
||||
<!-- container-fluid -->
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('js')
|
||||
<script src="{{ asset('assets/js/pages/form-validation.init.js') }}"></script>
|
||||
@endpush
|
88
Modules/PMS/resources/views/task/index.blade.php
Normal file
88
Modules/PMS/resources/views/task/index.blade.php
Normal file
@ -0,0 +1,88 @@
|
||||
@extends('layouts.app')
|
||||
@inject('employeeRepository', 'Modules\Employee\Repositories\EmployeeRepository')
|
||||
@section('content')
|
||||
<div class="page-content">
|
||||
<div class="container-fluid">
|
||||
@include('layouts.partials.breadcrumb', ['title' => $title])
|
||||
|
||||
@include('pms::task.partials.menu')
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div class="table-responsive">
|
||||
<table id="buttons-datatables" class="display table-sm table-bordered table" style="width:100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>S.N</th>
|
||||
<th>Task</th>
|
||||
<th>Project</th>
|
||||
<th>Start Date</th>
|
||||
<th>Deadline</th>
|
||||
<th>Assigned</th>
|
||||
<th>Priority</th>
|
||||
<th>Status</th>
|
||||
<th>Action</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@forelse ($tasks as $key => $task)
|
||||
<tr>
|
||||
<td>{{ $key + 1 }}</td>
|
||||
<td>{{ $task->title }}</td>
|
||||
<td>{{ optional($task->project)->project_name }}</td>
|
||||
<td>{{ $task->start_date }}</td>
|
||||
<td class="text-danger">{{ $task->due_date }}</td>
|
||||
<td>
|
||||
<div class="avatar-group flex-nowrap">
|
||||
@isset($task->assigned_id)
|
||||
@foreach ($task->assigned_id as $assignedId)
|
||||
<div class="avatar-group-item">
|
||||
<a href="javascript: void(0);" class="d-inline-block">
|
||||
<img
|
||||
src="{{ asset(optional($employeeRepository->getEmployeeById($assignedId))->profile_pic) }}"
|
||||
alt="" class="rounded-circle avatar-xxs">
|
||||
</a>
|
||||
</div>
|
||||
@endforeach
|
||||
@endisset
|
||||
|
||||
</div>
|
||||
</td>
|
||||
<td>{!! $task->priority_status !!}</td>
|
||||
<td>
|
||||
<span class="badge bg-{{ $task->status_name['color'] }}"> {!! $task->status_name['status'] !!} </span>
|
||||
</td>
|
||||
<td>
|
||||
<div class="hstack flex-wrap gap-3">
|
||||
@can('task.show')
|
||||
<a href="{{ route('task.show', $task->id) }}" class="link-info fs-15">
|
||||
<i class="ri-eye-line"></i>
|
||||
</a>
|
||||
@endcan
|
||||
@can('task.edit')
|
||||
<a href="{{ route('task.edit', $task->id) }}" class="link-success fs-15 edit-item-btn"><i
|
||||
class="ri-edit-2-line"></i></a>
|
||||
@endcan
|
||||
@can('task.destroy')
|
||||
<a href="javascript:void(0);" data-link="{{ route('task.destroy', $task->id) }}"
|
||||
data-id="{{ $task->id }}" class="link-danger fs-15 remove-item-btn"><i
|
||||
class="ri-delete-bin-line"></i></a>
|
||||
@endcan
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@empty
|
||||
@endforelse
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--end row-->
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
118
Modules/PMS/resources/views/task/kanban.blade.php
Normal file
118
Modules/PMS/resources/views/task/kanban.blade.php
Normal file
@ -0,0 +1,118 @@
|
||||
@extends('layouts.app')
|
||||
@inject('employeeRepository', 'Modules\Employee\Repositories\EmployeeRepository')
|
||||
@push('css')
|
||||
<link rel="stylesheet" type="text/css" href="{{ asset('assets/libs/dragula/dragula.min.css') }}" />
|
||||
@endpush
|
||||
@section('content')
|
||||
<div class="page-content">
|
||||
<div class="container-fluid">
|
||||
@include('layouts.partials.breadcrumb', ['title' => $title])
|
||||
|
||||
@include('pms::task.partials.menu')
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div class="tasks-board mb-3" id="kanbanboard">
|
||||
@foreach ($statusList as $statuskey => $statusItem)
|
||||
<div class="tasks-list" data-status-key="{{ $statuskey }}">
|
||||
<div class="d-flex mb-3">
|
||||
<div class="flex-grow-1">
|
||||
<h6 class="fs-14 text-uppercase fw-semibold mb-0">{{ $statusItem }} <small
|
||||
class="badge bg-info totaltask-badge ms-1 align-bottom">{{ array_key_exists($statuskey, $tasks->toArray()) ? count($tasks[$statuskey]) : 0 }}</small>
|
||||
</h6>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div data-simplebar class="tasks-wrapper mx-n3 px-3">
|
||||
<div id="{{ strtolower(str_replace(' ', '-', $statusItem)) }}-task" class="tasks">
|
||||
@if (array_key_exists($statuskey, $tasks->toArray()))
|
||||
@foreach ($tasks[$statuskey] as $task)
|
||||
<div class="card tasks-box" data-id="{{ $task->id }}">
|
||||
<div class="card-body">
|
||||
<div class="d-flex mb-2">
|
||||
<div class="flex-grow-1">
|
||||
<h6 class="fs-15 text-truncate task-title mb-0"><a
|
||||
href="{{ route('task.show', $task->id) }}" class="d-block">{{ $task->title }}</a>
|
||||
</h6>
|
||||
</div>
|
||||
<div class="flex-shrink-0">
|
||||
<a href="javascript:void(0);" class="text-muted" id="dropdownMenuLink12"
|
||||
data-bs-toggle="dropdown" aria-expanded="false"><i class="ri-more-fill"></i></a>
|
||||
<ul class="dropdown-menu" aria-labelledby="dropdownMenuLink12">
|
||||
<li><a class="dropdown-item" href="{{ route('task.show', $task->id) }}"><i
|
||||
class="ri-eye-fill text-muted me-2 align-bottom"></i> View</a></li>
|
||||
<li><a class="dropdown-item" href="{{ route('task.edit', $task->id) }}"><i
|
||||
class="ri-edit-2-line text-muted me-2 align-bottom"></i> Edit</a></li>
|
||||
<li><a class="dropdown-item" data-bs-toggle="modal" href="#deleteRecordModal"><i
|
||||
class="ri-delete-bin-5-line text-muted me-2 align-bottom"></i> Delete</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<p class="text-muted">{{ $task->desc }}</p>
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="flex-grow-1">
|
||||
<span class="badge text-bg-light">{{ $task->taskCategory() }}</span>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="flex-shrink-0">
|
||||
<div class="avatar-group">
|
||||
@isset($task->assigned_id)
|
||||
@foreach ($task->assigned_id as $assignedId)
|
||||
<a href="javascript: void(0);" class="avatar-group-item" data-bs-toggle="tooltip"
|
||||
data-bs-trigger="hover" data-bs-placement="top"
|
||||
title="{{ optional($employeeRepository->getEmployeeById($assignedId))->full_name }}">
|
||||
<img
|
||||
src="{{ asset(optional($employeeRepository->getEmployeeById($assignedId))->profile_pic) }}"
|
||||
alt="" class="rounded-circle avatar-xxs">
|
||||
</a>
|
||||
@endforeach
|
||||
@endisset
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--end card-body-->
|
||||
<div class="card-footer border-top-dashed">
|
||||
<div class="d-flex">
|
||||
<div class="flex-grow-1">
|
||||
<span class="text-muted text-info"><i class="ri-time-line align-bottom"></i>
|
||||
{{ date('d M, Y', strtotime($task->start_date)) }}</span>
|
||||
</div>
|
||||
<div class="flex-shrink-0">
|
||||
{!! $task->priority_status !!}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="progress progress-sm">
|
||||
<div class="progress-bar bg-{{ $task->status_name['color'] }}" role="progressbar"
|
||||
style="width: 100%" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100"></div>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
@endif
|
||||
|
||||
|
||||
<!--end card-->
|
||||
</div>
|
||||
<!--end tasks-->
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<!--end row-->
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('js')
|
||||
<script src="{{ asset('assets/libs/dragula/dragula.min.js') }}"></script>
|
||||
<script src="{{ asset('assets/libs/dom-autoscroller/dom-autoscroller.min.js') }}"></script>
|
||||
<script src="{{ asset('assets/js/pages/tasks-kanban.init.js') }}"></script>
|
||||
@endpush
|
106
Modules/PMS/resources/views/task/partials/action.blade.php
Normal file
106
Modules/PMS/resources/views/task/partials/action.blade.php
Normal file
@ -0,0 +1,106 @@
|
||||
<div class="row">
|
||||
<div class="col-lg-8">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div class="row gy-1">
|
||||
<div class="col-md-12">
|
||||
{{ html()->label('Title')->class('form-label') }}
|
||||
{{ html()->text('title')->class('form-control')->placeholder('Enter Title')->required() }}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{{ html()->label('Task Category')->class('form-label') }}
|
||||
{{ html()->select('task_category_id', $categoryList)->class('form-control')->placeholder('Select Task Category')->required() }}
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
{{ html()->label('Project')->class('form-label') }}
|
||||
{{ html()->select('project_id', $projectList)->class('form-control')->placeholder('Select Project')->required() }}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{{ html()->label('Description')->class('form-label') }}
|
||||
{{ html()->textarea('desc')->class('form-control ckeditor-classic')->placeholder('..') }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- end card body -->
|
||||
</div>
|
||||
<!-- end card -->
|
||||
<div class="mb-3 text-end">
|
||||
<a href="{{ route('task.index') }}" class="btn btn-danger w-sm">Cancel</a>
|
||||
<button type="submit" class="btn btn-success w-sm">Save</button>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<!-- end col -->
|
||||
|
||||
<div class="col-lg-4">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h5 class="card-title mb-0">Publish</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{{ html()->label('Status')->class('form-label') }}
|
||||
{{ html()->select('status', $status)->class('form-control')->required() }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- end card body -->
|
||||
</div>
|
||||
<!-- end card -->
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h5 class="card-title mb-0">Team Members</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{{ html()->multiselect('assigned_id[]', $memberList)->class('form-control select2')->value($task->assigned_id ?? null)->attributes(['multiple', 'id' => 'assigned_id'])->required() }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- end card body -->
|
||||
</div>
|
||||
<!-- end card -->
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h5 class="card-title mb-0">Date</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{{ html()->label('Priority')->class('form-label') }}
|
||||
{{ html()->select('priority', $priority)->class('form-control')->required() }}
|
||||
</div>
|
||||
|
||||
<div class="col-md-12">
|
||||
{{ html()->label('Start Date')->class('form-label') }}
|
||||
{{ html()->date('start_date')->class('form-control')->placeholder('Choose Start Date') }}
|
||||
</div>
|
||||
|
||||
<div class="col-md-12">
|
||||
{{ html()->label('Due Date')->class('form-label') }}
|
||||
{{ html()->date('due_date')->class('form-control')->placeholder('Choose Due Date') }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- end card body -->
|
||||
</div>
|
||||
<!-- end card -->
|
||||
|
||||
|
||||
</div>
|
||||
<!-- end col -->
|
||||
</div>
|
75
Modules/PMS/resources/views/task/partials/menu.blade.php
Normal file
75
Modules/PMS/resources/views/task/partials/menu.blade.php
Normal file
@ -0,0 +1,75 @@
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div class="row g-2">
|
||||
<div class="col-sm-8">
|
||||
{{ html()->form('GET')->route('task.index')->open() }}
|
||||
<div class="row g-3">
|
||||
<div class="col-xl-3">
|
||||
<div class="search-box">
|
||||
{{ html()->text('search')->class('form-control search')->value(request('search'))->placeholder('Search...') }}
|
||||
<i class="ri-search-line search-icon"></i>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-4">
|
||||
<div class="">
|
||||
{{ html()->text('date')->class('form-control')->value(request('date'))->placeholder('Date Range')->attributes([
|
||||
'id' => 'datepicker-range',
|
||||
'data-provider' => 'flatpickr',
|
||||
'data-date-format' => 'Y-m-d',
|
||||
'data-range-date' => 'true',
|
||||
]) }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<div>
|
||||
{{ html()->select('status', $statusList)->placeholder('Select Status')->value(request('status'))->class('form-control select2') }}
|
||||
</div>
|
||||
</div>
|
||||
<!--end col-->
|
||||
|
||||
<div class="col-sm-2">
|
||||
<div>
|
||||
<button type="submit" class="btn btn-primary">
|
||||
<i class="ri-equalizer-fill me-2"></i>Filters</button>
|
||||
{{-- <a href="{{ route('task.index') }}" class="btn btn-danger">
|
||||
<i class="ri-bin-fill me-2"></i>Reset</a> --}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--end col-->
|
||||
</div>
|
||||
<!--end row-->
|
||||
{{ html()->form()->close() }}
|
||||
|
||||
</div>
|
||||
<!--end col-->
|
||||
<div class="col-sm-auto ms-auto">
|
||||
<div class="list-grid-nav hstack gap-1">
|
||||
|
||||
<a href="{{ route('task.index') }}" id="list-view-button"
|
||||
class="btn btn-soft-info nav-link btn-icon {{ Route::is('task.index') ? 'active' : '' }} fs-14"><i
|
||||
class="ri-list-unordered"></i></a>
|
||||
<a href="{{ route('task.kanban') }}" id="grid-view-button"
|
||||
class="btn btn-soft-info nav-link btn-icon fs-14 {{ Route::is('task.kanban') ? 'active' : '' }}"><i
|
||||
class="ri-grid-fill"></i></a>
|
||||
<a href="{{ route('task.create') }}" class="btn btn-success btn-md waves-effect waves-light"><i
|
||||
class="ri-add-fill me-1 align-bottom"></i> Add</a>
|
||||
</div>
|
||||
</div>
|
||||
<!--end col-->
|
||||
</div>
|
||||
<!--end row-->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
{{-- <div class="d-flex justify-content-end hstack my-2 ms-auto gap-2">
|
||||
<a href="{{ route('task.index') }}" class="btn btn-primary btn-icon waves-effect waves-light"><i
|
||||
class="ri-list-unordered"></i></a>
|
||||
<a href="{{ route('task.kanban') }}" class="btn btn-danger btn-icon waves-effect waves-light"><i
|
||||
class="ri-grid-fill"></i></a>
|
||||
<a href="{{ route('task.create') }}" class="btn btn-success btn-md waves-effect waves-light"><i
|
||||
class="ri-add-fill me-1 align-bottom"></i> Add</a>
|
||||
</div> --}}
|
49
Modules/PMS/resources/views/task/show.blade.php
Normal file
49
Modules/PMS/resources/views/task/show.blade.php
Normal file
@ -0,0 +1,49 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="page-content">
|
||||
<div class="container-fluid">
|
||||
@include('layouts.partials.breadcrumb', ['title' => $title])
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-8">
|
||||
<div class="card card-body p-4">
|
||||
<div>
|
||||
<div class="table-responsive">
|
||||
<table class="table-borderless mb-0 table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th><span class="fw-medium">Title</span></th>
|
||||
<td>{{ $task->title }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><span class="fw-medium">Task Category</span></th>
|
||||
<td>{{ $task->task_category_id }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><span class="fw-medium">Project</span></th>
|
||||
<td>{{ $task->project_id }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><span class="fw-medium">Description</span></th>
|
||||
<td>{{ $task->desc }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb-3 text-end">
|
||||
<a href="{{ route('task.index') }}" class="btn btn-secondary w-sm">Back</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('js')
|
||||
<script src="{{ asset('assets/js/pages/form-validation.init.js') }}"></script>
|
||||
@endpush
|
Reference in New Issue
Block a user