From 2984c663f9e8ea6169a1184b3a5f2c38bcf92a1c Mon Sep 17 00:00:00 2001 From: Shailesh Ladumor Date: Sat, 11 Apr 2020 19:19:30 +0530 Subject: [PATCH 1/2] feat: Department support add into Report --- app/Http/Controllers/DepartmentController.php | 14 ++ app/Http/Controllers/ReportController.php | 26 +++- app/Models/Client.php | 6 +- app/Repositories/ClientRepository.php | 12 +- app/Repositories/DepartmentRepository.php | 14 ++ app/Repositories/ReportRepository.php | 123 +++++++++++++----- resources/assets/js/report/report.js | 71 +++++++--- resources/assets/style/sass/report.scss | 14 +- resources/views/reports/create.blade.php | 1 + resources/views/reports/edit.blade.php | 1 + resources/views/reports/fields.blade.php | 11 +- .../views/reports/report_format.blade.php | 104 +++++++++------ resources/views/reports/show.blade.php | 6 +- routes/web.php | 1 + 14 files changed, 291 insertions(+), 113 deletions(-) diff --git a/app/Http/Controllers/DepartmentController.php b/app/Http/Controllers/DepartmentController.php index bb9afd03c..86fa72b8c 100644 --- a/app/Http/Controllers/DepartmentController.php +++ b/app/Http/Controllers/DepartmentController.php @@ -6,6 +6,7 @@ use App\Http\Requests\UpdateDepartmentRequest; use App\Models\Department; use App\Queries\DepartmentDataTable; +use App\Repositories\ClientRepository; use App\Repositories\DepartmentRepository; use DataTables; use Exception; @@ -100,4 +101,17 @@ public function destroy(Department $department) return $this->sendSuccess('Department deleted successfully.'); } + + /** + * @param Request $request + * @param ClientRepository $clientRepository + * + * @return JsonResponse + */ + public function clients(Request $request, ClientRepository $clientRepository) + { + $projects = $clientRepository->getClientList($request->get('department_id', null)); + + return $this->sendResponse($projects, 'Clients retrieved successfully.'); + } } diff --git a/app/Http/Controllers/ReportController.php b/app/Http/Controllers/ReportController.php index a2e94d296..1ee43c41e 100644 --- a/app/Http/Controllers/ReportController.php +++ b/app/Http/Controllers/ReportController.php @@ -8,6 +8,7 @@ use App\Models\User; use App\Queries\ReportDataTable; use App\Repositories\ClientRepository; +use App\Repositories\DepartmentRepository; use App\Repositories\ProjectRepository; use App\Repositories\ReportRepository; use App\Repositories\TagRepository; @@ -17,10 +18,12 @@ use DataTables; use Exception; use Flash; +use Illuminate\Contracts\View\Factory; use Illuminate\Http\JsonResponse; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Routing\Redirector; +use Illuminate\View\View; use Response; /** @@ -43,18 +46,23 @@ class ReportController extends AppBaseController /** @var ProjectRepository */ private $projectRepo; + /** @var DepartmentRepository */ + private $departmentRepo; + public function __construct( ReportRepository $reportRepo, UserRepository $userRepository, ProjectRepository $projectRepository, ClientRepository $clientRepository, - TagRepository $tagRepository + TagRepository $tagRepository, + DepartmentRepository $departmentRepository ) { $this->reportRepository = $reportRepo; $this->userRepo = $userRepository; $this->clientRepo = $clientRepository; $this->tagRepo = $tagRepository; $this->projectRepo = $projectRepository; + $this->departmentRepo = $departmentRepository; } /** @@ -62,9 +70,10 @@ public function __construct( * * @param Request $request * + * @return Factory|View + * * @throws Exception * - * @return Response */ public function index(Request $request) { @@ -79,7 +88,7 @@ public function index(Request $request) /** * Show the form for creating a new Report. * - * @return Response + * @return Factory|View */ public function create() { @@ -87,6 +96,7 @@ public function create() $data['users'] = $this->userRepo->getUserList(); $data['clients'] = $this->clientRepo->getClientList(); $data['projects'] = $this->projectRepo->getProjectsList(); + $data['departments'] = $this->departmentRepo->getDepartmentList(); return view('reports.create', $data); } @@ -96,7 +106,7 @@ public function create() * * @param CreateReportRequest $request * - * @return Response + * @return RedirectResponse|Redirector */ public function store(CreateReportRequest $request) { @@ -114,7 +124,7 @@ public function store(CreateReportRequest $request) * * @param Report $report * - * @return Response + * @return Factory|View */ public function show(Report $report) { @@ -136,7 +146,7 @@ public function show(Report $report) * * @param Report $report * - * @return Response + * @return Factory|View */ public function edit(Report $report) { @@ -146,10 +156,12 @@ public function edit(Report $report) $data['tagIds'] = $this->reportRepository->getTagIds($id); $data['userIds'] = $this->reportRepository->getUserIds($id); $data['clientId'] = $this->reportRepository->getClientId($id); + $data['departmentId'] = $this->reportRepository->getDepartmentId($id); $data['projects'] = $this->projectRepo->getProjectsList($data['clientId']); $data['users'] = $this->userRepo->getUserList($data['projectIds']); $data['clients'] = $this->clientRepo->getClientList(); $data['tags'] = $this->tagRepo->getTagList(); + $data['departments'] = $this->departmentRepo->getDepartmentList(); return view('reports.edit')->with($data); } @@ -160,9 +172,9 @@ public function edit(Report $report) * @param Report $report * @param UpdateReportRequest $request * + * @return RedirectResponse|Redirector * @throws Exception * - * @return Response */ public function update(Report $report, UpdateReportRequest $request) { diff --git a/app/Models/Client.php b/app/Models/Client.php index 53cfe759b..09bdebc1a 100644 --- a/app/Models/Client.php +++ b/app/Models/Client.php @@ -24,7 +24,6 @@ * @property Carbon|null $created_at * @property Carbon|null $updated_at * @property-read User|null $createdUser - * * @method static BuilderAlias|Client newModelQuery() * @method static BuilderAlias|Client newQuery() * @method static BuilderAlias|Client query() @@ -36,11 +35,9 @@ * @method static BuilderAlias|Client whereUpdatedAt($value) * @method static BuilderAlias|Client whereWebsite($value) * @mixin Eloquent - * * @property Carbon|null $deleted_at * @property-read Collection|Project[] $projects * @property-read int|null $projects_count - * * @method static bool|null forceDelete() * @method static Builder|Client onlyTrashed() * @method static bool|null restore() @@ -48,6 +45,9 @@ * @method static BuilderAlias|Client whereDeletedBy($value) * @method static Builder|Client withTrashed() * @method static Builder|Client withoutTrashed() + * @property int|null $department_id + * @property-read \App\Models\Department|null $department + * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Client whereDepartmentId($value) */ class Client extends Model { diff --git a/app/Repositories/ClientRepository.php b/app/Repositories/ClientRepository.php index 3954cfaab..182dd6172 100644 --- a/app/Repositories/ClientRepository.php +++ b/app/Repositories/ClientRepository.php @@ -44,11 +44,19 @@ public function model() /** * get clients. * + * @param null $departmentId + * * @return Collection */ - public function getClientList() + public function getClientList($departmentId = null) { - return Client::orderBy('name')->pluck('name', 'id'); + $query = Client::orderBy('name'); + + if (!empty($departmentId)) { + $query->where('department_id', '=', $departmentId); + } + + return $query->pluck('name', 'id'); } /** diff --git a/app/Repositories/DepartmentRepository.php b/app/Repositories/DepartmentRepository.php index f023f60c0..b63e9a53a 100644 --- a/app/Repositories/DepartmentRepository.php +++ b/app/Repositories/DepartmentRepository.php @@ -3,6 +3,8 @@ namespace App\Repositories; use App\Models\Department; +use Illuminate\Database\Query\Builder; +use Illuminate\Support\Collection; /** * Class DepartmentRepository. @@ -35,4 +37,16 @@ public function model() { return Department::class; } + + /** + * get Departments. + * + * @return Collection + */ + public function getDepartmentList() + { + /** @var Builder|Department $query */ + $query = Department::orderBy('name'); + return $query->pluck('name', 'id'); + } } diff --git a/app/Repositories/ReportRepository.php b/app/Repositories/ReportRepository.php index 60f10c5ff..3aae040c9 100644 --- a/app/Repositories/ReportRepository.php +++ b/app/Repositories/ReportRepository.php @@ -3,6 +3,7 @@ namespace App\Repositories; use App\Models\Client; +use App\Models\Department; use App\Models\Project; use App\Models\Report; use App\Models\ReportFilter; @@ -118,6 +119,10 @@ public function createReportFilter($input, $report) $result[] = $this->createFilter($report->id, $input['client_id'], Client::class); } + if (isset($input['department_id'])) { + $result[] = $this->createFilter($report->id, $input['department_id'], Department::class); + } + return $result; } @@ -151,6 +156,7 @@ public function updateReportFilter($input, $report) $input['projectIds'] = isset($input['projectIds']) ? $input['projectIds'] : []; $input['userIds'] = isset($input['userIds']) ? $input['userIds'] : []; $input['tagIds'] = isset($input['tagIds']) ? $input['tagIds'] : []; + $input['department_id'] = isset($input['department_id']) ? $input['department_id'] : 0; $input['client_id'] = isset($input['client_id']) ? $input['client_id'] : 0; $projectIds = $this->getProjectIds($report->id); @@ -190,6 +196,13 @@ public function updateReportFilter($input, $report) } } + $departmentId = $this->getDepartmentId($report->id); + if ($input['department_id'] != 0) { + if ($input['department_id'] != $departmentId) { + $result[] = $this->createFilter($report->id, $input['department_id'], Department::class); + } + } + if (!empty($clientId) && $input['client_id'] != $clientId) { ReportFilter::ofParamType(Client::class)->whereParamId($clientId)->delete(); } @@ -242,6 +255,21 @@ public function getClientId($reportId) return $report->param_id; } + /** + * @param int $reportId + * + * @return Collection|void + */ + public function getDepartmentId($reportId) + { + $report = ReportFilter::ofParamType(Department::class)->ofReport($reportId)->first(); + if (empty($report)) { + return; + } + + return $report->param_id; + } + /** * @param int $reportId * @@ -271,6 +299,7 @@ public function getReport($report) $tagIds = $this->getTagIds($id); $userIds = $this->getUserIds($id); $clientId = $this->getClientId($id); + $departmentId = $this->getDepartmentId($id); $query->when(!empty($userIds), function (Builder $q) use ($userIds) { $q->whereIn('user_id', $userIds); @@ -294,6 +323,12 @@ public function getReport($report) }); }); + $query->when(!empty($departmentId), function (Builder $q) use ($departmentId) { + $q->whereHas('task.project.client', function (Builder $query) use ($departmentId) { + $query->where('department_id', $departmentId); + }); + }); + $entries = $query->get(); // TODO : NEED TO REFACTOR/OPTIMIZE THIS CODE @@ -302,72 +337,88 @@ public function getReport($report) /** @var TimeEntry $entry */ foreach ($entries as $entry) { $clientId = $entry->task->project->client_id; + $deptId = $entry->task->project->client->department_id; $project = $entry->task->project; $client = $project->client; $duration = $entry->duration; + $department = $project->client->department; + + // prepare department and duration + $result[$deptId]['name'] = $department->name; + if (!isset($result[$deptId]['duration'])) { + $result[$deptId]['duration'] = 0; + $result[$deptId]['time'] = 0; + } + // prepare cost for client + if (!isset($result[$deptId]['cost'])) { + $result[$deptId]['cost'] = 0; + } + $result[$deptId]['duration'] = $duration + $result[$deptId]['duration']; + $result[$deptId]['time'] = $this->getDurationTime($result[$deptId]['duration']); // prepare client and duration - $result[$clientId]['name'] = $client->name; - if (!isset($result[$clientId]['duration'])) { - $result[$clientId]['duration'] = 0; - $result[$clientId]['time'] = 0; + $result[$deptId]['clients'][$clientId]['name'] = $client->name; + if (!isset( $result[$deptId]['clients'][$clientId]['duration'])) { + $result[$deptId]['clients'][$clientId]['duration'] = 0; + $result[$deptId]['clients'][$clientId]['time'] = 0; } // prepare cost for client - if (!isset($result[$clientId]['cost'])) { - $result[$clientId]['cost'] = 0; + if (!isset($result[$deptId]['clients'][$clientId]['cost'])) { + $result[$deptId]['clients'][$clientId]['cost'] = 0; } - $result[$clientId]['duration'] = $duration + $result[$clientId]['duration']; - $result[$clientId]['time'] = $this->getDurationTime($result[$clientId]['duration']); + $result[$deptId]['clients'][$clientId]['duration'] = $duration + $result[$deptId]['clients'][$clientId]['duration']; + $result[$deptId]['clients'][$clientId]['time'] = $this->getDurationTime( $result[$deptId]['clients'][$clientId]['duration']); // prepare projects and duration - $result[$clientId]['projects'][$project->id]['name'] = $project->name; - if (!isset($result[$clientId]['projects'][$project->id]['duration'])) { - $result[$clientId]['projects'][$project->id]['duration'] = 0; - $result[$clientId]['projects'][$project->id]['time'] = 0; + $result[$deptId]['clients'][$clientId]['projects'][$project->id]['name'] = $project->name; + if (!isset( $result[$deptId]['clients'][$clientId]['projects'][$project->id]['duration'])) { + $result[$deptId]['clients'][$clientId]['projects'][$project->id]['duration'] = 0; + $result[$deptId]['clients'][$clientId]['projects'][$project->id]['time'] = 0; } - $projectDuration = $result[$clientId]['projects'][$project->id]['duration']; + $projectDuration = $result[$deptId]['clients'][$clientId]['projects'][$project->id]['duration']; // set default cost for projects - if (!isset($result[$clientId]['projects'][$project->id]['cost'])) { - $result[$clientId]['projects'][$project->id]['cost'] = 0; + if (!isset( $result[$deptId]['clients'][$clientId]['projects'][$project->id]['cost'])) { + $result[$deptId]['clients'][$clientId]['projects'][$project->id]['cost'] = 0; } - $result[$clientId]['projects'][$project->id]['duration'] = $duration + $projectDuration; - $result[$clientId]['projects'][$project->id]['time'] = $this->getDurationTime($duration + $projectDuration); + $result[$deptId]['clients'][$clientId]['projects'][$project->id]['duration'] = $duration + $projectDuration; + $result[$deptId]['clients'][$clientId]['projects'][$project->id]['time'] = $this->getDurationTime($duration + $projectDuration); // prepare users and duration - $result[$clientId]['projects'][$project->id]['users'][$entry->user_id]['name'] = $entry->user->name; - if (!isset($result[$clientId]['projects'][$project->id]['users'][$entry->user_id]['duration'])) { - $result[$clientId]['projects'][$project->id]['users'][$entry->user_id]['duration'] = 0; + $result[$deptId]['clients'][$clientId]['projects'][$project->id]['users'][$entry->user_id]['name'] = $entry->user->name; + if (!isset( $result[$deptId]['clients'][$clientId]['projects'][$project->id]['users'][$entry->user_id]['duration'])) { + $result[$deptId]['clients'][$clientId]['projects'][$project->id]['users'][$entry->user_id]['duration'] = 0; } // set default cost for users - if (!isset($result[$clientId]['projects'][$project->id]['users'][$entry->user_id]['cost'])) { - $result[$clientId]['projects'][$project->id]['users'][$entry->user_id]['cost'] = 0; + if (!isset( $result[$deptId]['clients'][$clientId]['projects'][$project->id]['users'][$entry->user_id]['cost'])) { + $result[$deptId]['clients'][$clientId]['projects'][$project->id]['users'][$entry->user_id]['cost'] = 0; } - $userDuration = $result[$clientId]['projects'][$project->id]['users'][$entry->user_id]['duration']; + $userDuration = $result[$deptId]['clients'][$clientId]['projects'][$project->id]['users'][$entry->user_id]['duration']; - $result[$clientId]['projects'][$project->id]['users'][$entry->user_id]['duration'] = $duration + $userDuration; - $result[$clientId]['projects'][$project->id]['users'][$entry->user_id]['time'] = $this->getDurationTime($duration + $userDuration); + $result[$deptId]['clients'][$clientId]['projects'][$project->id]['users'][$entry->user_id]['duration'] = $duration + $userDuration; + $result[$deptId]['clients'][$clientId]['projects'][$project->id]['users'][$entry->user_id]['time'] = $this->getDurationTime($duration + $userDuration); // calculate cost of user $userCost = $this->getCosting($duration, $entry->user); // calculate cost for client and project with user - $result[$clientId]['cost'] += $userCost; - $result[$clientId]['projects'][$project->id]['cost'] += $userCost; - $result[$clientId]['projects'][$project->id]['users'][$entry->user_id]['cost'] += $userCost; + $result[$deptId]['cost'] += $userCost; + $result[$deptId]['clients'][$clientId]['cost'] += $userCost; + $result[$deptId]['clients'][$clientId]['projects'][$project->id]['cost'] += $userCost; + $result[$deptId]['clients'][$clientId]['projects'][$project->id]['users'][$entry->user_id]['cost'] += $userCost; // prepare tasks and duration - $result[$clientId]['projects'][$project->id]['users'][$entry->user_id]['tasks'][$entry->task_id]['name'] = $entry->task->title; - if (!isset($result[$clientId]['projects'][$project->id]['users'][$entry->user_id]['tasks'][$entry->task_id]['duration'])) { - $result[$clientId]['projects'][$project->id]['users'][$entry->user_id]['tasks'][$entry->task_id]['duration'] = 0; - $result[$clientId]['projects'][$project->id]['users'][$entry->user_id]['tasks'][$entry->task_id]['time'] = 0; + $result[$deptId]['clients'][$clientId]['projects'][$project->id]['users'][$entry->user_id]['tasks'][$entry->task_id]['name'] = $entry->task->title; + if (!isset( $result[$deptId]['clients'][$clientId]['projects'][$project->id]['users'][$entry->user_id]['tasks'][$entry->task_id]['duration'])) { + $result[$deptId]['clients'][$clientId]['projects'][$project->id]['users'][$entry->user_id]['tasks'][$entry->task_id]['duration'] = 0; + $result[$deptId]['clients'][$clientId]['projects'][$project->id]['users'][$entry->user_id]['tasks'][$entry->task_id]['time'] = 0; } - $time = $result[$clientId]['projects'][$project->id]['users'][$entry->user_id]['tasks'][$entry->task_id]['duration'] + $entry->duration; + $time = $result[$deptId]['clients'][$clientId]['projects'][$project->id]['users'][$entry->user_id]['tasks'][$entry->task_id]['duration'] + $entry->duration; - $result[$clientId]['projects'][$project->id]['users'][$entry->user_id]['tasks'][$entry->task_id]['duration'] = $time; - $result[$clientId]['projects'][$project->id]['users'][$entry->user_id]['tasks'][$entry->task_id]['time'] = $this->getDurationTime($time); - $result[$clientId]['projects'][$project->id]['users'][$entry->user_id]['tasks'][$entry->task_id]['task_id'] = $entry->task->id; + $result[$deptId]['clients'][$clientId]['projects'][$project->id]['users'][$entry->user_id]['tasks'][$entry->task_id]['duration'] = $time; + $result[$deptId]['clients'][$clientId]['projects'][$project->id]['users'][$entry->user_id]['tasks'][$entry->task_id]['time'] = $this->getDurationTime($time); + $result[$deptId]['clients'][$clientId]['projects'][$project->id]['users'][$entry->user_id]['tasks'][$entry->task_id]['task_id'] = $entry->task->id; } return $result; diff --git a/resources/assets/js/report/report.js b/resources/assets/js/report/report.js index e5542e3a8..db7cfb6d6 100644 --- a/resources/assets/js/report/report.js +++ b/resources/assets/js/report/report.js @@ -1,26 +1,33 @@ -const clientDropDown = $('#client') -clientDropDown.select2({ +const departmentDropDown = $('#department'); + +$('#clientId').select2({ width: '100%', placeholder: 'Select Client', +}).prepend($(''); + + loadClient(parseInt($(this).val())); +}); + +function loadClient(departmentId) { + departmentId = (departmentId === 0) ? '' : departmentId; + let url = clientsOfDepartment + '?department_id=' + departmentId; + $.ajax({ + url: url, + type: 'GET', + success: function (result) { + const clients = result.data; + let options = ''; + $.each(clients, function (key, value) { + options += '' + }); + $('#clientId').html(options); + }, + }) +} -clientDropDown.on('change', function () { +$('#clientId').on('change', function () { $('#projectIds').empty() if ($(this).val() != 0) { $('#projectIds').val(null).trigger('change') } loadProjects($(this).val()) -}) +}); function loadProjects (clientId) { clientId = (clientId == 0) ? '' : clientId @@ -83,7 +117,7 @@ $('#projectIds').on('change', function () { $('#userIds').empty() $('#userIds').val(null).trigger('change') loadUsers($(this).val().toString()) -}) +}); function loadUsers (projectIds) { let url = usersOfProjects + '?projectIds=' + projectIds @@ -104,9 +138,10 @@ function loadUsers (projectIds) { // open delete confirmation model $(document).on('click', '.delete-btn', function (event) { - let reportId = $(event.currentTarget).data('id') + let reportId = $(event.currentTarget).data('id'); deleteReport(reportUrl + reportId) -}) +}); + window.deleteReport = function (url) { swal({ title: 'Delete !', @@ -146,7 +181,7 @@ window.deleteReport = function (url) { }, }) }) -} +}; let tbl = $('#report_table').DataTable({ processing: true, @@ -214,4 +249,4 @@ let tbl = $('#report_table').DataTable({ tbl.ajax.reload() }) }, -}) +}); diff --git a/resources/assets/style/sass/report.scss b/resources/assets/style/sass/report.scss index 604c5cc50..44296b2c9 100644 --- a/resources/assets/style/sass/report.scss +++ b/resources/assets/style/sass/report.scss @@ -13,6 +13,17 @@ border-radius: 8px; } + &__department-row { + @extend %report-row; + color: $orange; + background-color: #f2fcff; + padding: 10px; + + &-title { + cursor: pointer; + } + } + &__client-row { @extend %report-row; color: $blue; @@ -21,6 +32,7 @@ &-title { cursor: pointer; + margin-left: 2%; } } @@ -54,7 +66,7 @@ &__project { &-header { - margin-left: 3%; + margin-left: 4%; cursor: pointer; } } diff --git a/resources/views/reports/create.blade.php b/resources/views/reports/create.blade.php index 4d052bb8c..e821987a6 100644 --- a/resources/views/reports/create.blade.php +++ b/resources/views/reports/create.blade.php @@ -33,6 +33,7 @@ let reportUrl = "{{ url('reports') }}"; let usersOfProjects = "{{ url('users-of-projects') }}"; let projectsOfClient = "{{ url('projects-of-client') }}"; + let clientsOfDepartment = "{{ url('clients-of-department') }}"; @endsection diff --git a/resources/views/reports/edit.blade.php b/resources/views/reports/edit.blade.php index 2ce249cbb..5a788d9e6 100644 --- a/resources/views/reports/edit.blade.php +++ b/resources/views/reports/edit.blade.php @@ -34,6 +34,7 @@ let reportUrl = "{{ url('reports') }}"; let usersOfProjects = "{{ url('users-of-projects') }}"; let projectsOfClient = "{{ url('projects-of-client') }}"; + let clientsOfDepartment = "{{ url('clients-of-department') }}"; @endsection diff --git a/resources/views/reports/fields.blade.php b/resources/views/reports/fields.blade.php index dbd9db532..6bb84ad8c 100644 --- a/resources/views/reports/fields.blade.php +++ b/resources/views/reports/fields.blade.php @@ -19,11 +19,18 @@ {!! Form::text('end_date', null, ['class' => 'form-control','id'=>'end_date','required', 'autocomplete' => 'off']) !!} +
+ +
+ {!! Form::label('department_id', 'Department') !!} + {!! Form::select('department_id', $departments, isset($departmentId)?$departmentId:null, ['class' => 'form-control','id' => 'department','placeholder'=>'Select Department']) !!} +
+
- {!! Form::label('client_id', 'Client') !!} - {!! Form::select('client_id', $clients, isset($clientId)?$clientId:null, ['class' => 'form-control','id' => 'client','placeholder'=>'Select Client']) !!} + {!! Form::label('clientId', 'Client') !!} + {!! Form::select('client_id', $clients, isset($clientId)?$clientId:null, ['class' => 'form-control','id' => 'clientId']) !!}
diff --git a/resources/views/reports/report_format.blade.php b/resources/views/reports/report_format.blade.php index 64ca3affa..0e81a0279 100644 --- a/resources/views/reports/report_format.blade.php +++ b/resources/views/reports/report_format.blade.php @@ -11,64 +11,82 @@ No record available.
@endif - @foreach($reports as $client) + @foreach($reports as $department)
-
-
+
+
- {{ucwords($client['name'])}} + {{ucwords($department['name'])}}
- {{$client['time']}} ({{round($client['duration'] * 100 / $totalMinutes, 2)}} %) + {{$department['time']}} ({{round($department['duration'] * 100 / $totalMinutes, 2)}} %) @can('manage_users') - - [Cost: {{ number_format($client['cost']) }}] + - [Cost: {{ number_format($department['cost']) }}] @endcan

- @foreach($client['projects'] as $project) -
-
+ @foreach($department['clients'] as $client) +
+
- - {{ucwords($project['name'])}} -
- - {{$project['time']}} ({{round($project['duration'] * 100 / $client['duration'], 2)}} %) - @can('manage_users') - - [Cost: {{number_format($project['cost'])}}] - @endcan - + + {{ucwords($client['name'])}} +
+
+ {{$client['time']}} ({{round($client['duration'] * 100 / $totalMinutes, 2)}} %) + @can('manage_users') + - [Cost: {{ number_format($client['cost']) }}] + @endcan +
-
- @foreach($project['users'] as $user) -
-
-
- - - {{ucwords($user['name'])}} -
- - {{$user['time']}} ({{round($user['duration'] * 100 / $project['duration'], 2)}} %) - @can('manage_users') - - [Cost: {{ number_format($user['cost'])}}] - @endcan - +
+ @foreach($client['projects'] as $project) +
+
+ + + {{ucwords($project['name'])}}
-
- @foreach($user['tasks'] as $task) -
- - {{$task['name']}} - - {{$task['time']}} + + {{$project['time']}} ({{round($project['duration'] * 100 / $client['duration'], 2)}} %) + @can('manage_users') + - [Cost: {{number_format($project['cost'])}}] + @endcan + +
+
+ @foreach($project['users'] as $user) +
+
+
+ + + {{ucwords($user['name'])}} +
+ + {{$user['time']}} ({{round($user['duration'] * 100 / $project['duration'], 2)}} %) + @can('manage_users') + - [Cost: {{ number_format($user['cost'])}}] + @endcan +
- @endforeach -
+
+ @foreach($user['tasks'] as $task) +
+ + {{$task['name']}} + + {{$task['time']}} +
+ @endforeach +
+
+ @endforeach
@endforeach
diff --git a/resources/views/reports/show.blade.php b/resources/views/reports/show.blade.php index 5f712c5d0..835cdd986 100644 --- a/resources/views/reports/show.blade.php +++ b/resources/views/reports/show.blade.php @@ -34,10 +34,14 @@ class="btn btn-primary filter-container__btn mr-1"> @section('scripts')