218 lines
12 KiB
PHP
218 lines
12 KiB
PHP
@extends('layouts.app')
|
|
|
|
@section('title', __('lang_v1.holding_structure'))
|
|
|
|
@section('css')
|
|
<style>
|
|
/* Persian datepicker must appear above Bootstrap modals (z-index 1050) */
|
|
.datepicker-container {
|
|
z-index: 2000 !important;
|
|
}
|
|
.holding-date-picker {
|
|
cursor: pointer;
|
|
background-color: #fff;
|
|
}
|
|
</style>
|
|
@endsection
|
|
|
|
@section('content')
|
|
@include('essentials::layouts.nav_hrm')
|
|
|
|
<section class="content-header">
|
|
<h1>
|
|
@lang('lang_v1.holding_structure')
|
|
<small>@lang('lang_v1.holding_manage_desc')</small>
|
|
</h1>
|
|
</section>
|
|
|
|
<section class="content">
|
|
<div class="row row-custom">
|
|
@can('holding.context.switch')
|
|
<div class="col-md-12">
|
|
<div class="box box-solid">
|
|
<div class="box-body">
|
|
@if($userAssignments->isEmpty())
|
|
<div class="alert alert-warning no-margin">
|
|
<i class="fas fa-info-circle"></i> @lang('lang_v1.holding_setup_guide')
|
|
@can('holding.assignments.manage')
|
|
<button type="button" class="btn btn-sm btn-primary pull-left btn-modal" style="margin-right:8px;" data-href="{{ route('holding.assignments.create') }}" data-container=".holding_assignment_modal">
|
|
<i class="fa fa-plus"></i> @lang('lang_v1.holding_add_assignment_cta')
|
|
</button>
|
|
@endcan
|
|
</div>
|
|
@else
|
|
{!! Form::open(['url' => route('holding.context.switch'), 'method' => 'post', 'class' => 'form-inline']) !!}
|
|
<div class="form-group">
|
|
{!! Form::select('assignment_id', $userAssignments->mapWithKeys(function ($a) {
|
|
return [$a->id => trim($a->user->first_name.' '.($a->user->last_name ?? '')).' — '.optional($a->entity)->name.($a->orgUnit ? ' / '.$a->orgUnit->name : '')];
|
|
}), session('holding.active_assignment_id'), ['class' => 'form-control select2', 'placeholder' => __('lang_v1.holding_assignment'), 'required', 'style' => 'min-width:320px']) !!}
|
|
</div>
|
|
<button type="submit" class="btn btn-primary"><i class="fas fa-exchange-alt"></i> @lang('lang_v1.holding_switch')</button>
|
|
{!! Form::close() !!}
|
|
@endif
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@endcan
|
|
|
|
<div class="col-md-3 col-sm-6 col-xs-12 col-custom">
|
|
<div class="info-box info-box-new-style">
|
|
<span class="info-box-icon bg-aqua"><i class="fas fa-building"></i></span>
|
|
<div class="info-box-content">
|
|
<span class="info-box-text">@lang('lang_v1.holding_total_entities')</span>
|
|
<span class="info-box-number">{{ $stats['entities'] }}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-3 col-sm-6 col-xs-12 col-custom">
|
|
<div class="info-box info-box-new-style">
|
|
<span class="info-box-icon bg-green"><i class="fas fa-sitemap"></i></span>
|
|
<div class="info-box-content">
|
|
<span class="info-box-text">@lang('lang_v1.holding_total_units')</span>
|
|
<span class="info-box-number">{{ $stats['units'] }}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-3 col-sm-6 col-xs-12 col-custom">
|
|
<div class="info-box info-box-new-style">
|
|
<span class="info-box-icon bg-yellow"><i class="fas fa-users"></i></span>
|
|
<div class="info-box-content">
|
|
<span class="info-box-text">@lang('essentials::lang.departments')</span>
|
|
<span class="info-box-number">{{ $stats['hrm_departments'] }}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-3 col-sm-6 col-xs-12 col-custom">
|
|
<div class="info-box info-box-new-style">
|
|
<span class="info-box-icon bg-red"><i class="fas fa-user-tie"></i></span>
|
|
<div class="info-box-content">
|
|
<span class="info-box-text">@lang('lang_v1.holding_total_assignments')</span>
|
|
<span class="info-box-number">{{ $stats['assignments'] }}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
@if(!empty($activeHoldingAssignment))
|
|
<div class="alert alert-success">
|
|
<strong>@lang('lang_v1.holding_active_context'):</strong>
|
|
{{ optional($activeHoldingAssignment->entity)->name }}
|
|
@if(!empty($activeHoldingAssignment->orgUnit)) / {{ $activeHoldingAssignment->orgUnit->name }} @endif
|
|
@if($activeHoldingAssignment->is_primary)
|
|
<span class="label label-info">@lang('lang_v1.holding_primary')</span>
|
|
@endif
|
|
</div>
|
|
@endif
|
|
|
|
<div class="row">
|
|
<div class="col-md-12">
|
|
<div class="nav-tabs-custom">
|
|
<ul class="nav nav-tabs">
|
|
<li class="active"><a href="#overview_tab" data-toggle="tab"><i class="fas fa-chart-pie"></i> @lang('lang_v1.holding_overview')</a></li>
|
|
<li><a href="#entities_tab" data-toggle="tab"><i class="fas fa-building"></i> @lang('lang_v1.holding_entities_tab')</a></li>
|
|
<li><a href="#units_tab" data-toggle="tab"><i class="fas fa-sitemap"></i> @lang('lang_v1.holding_org_structure_tab')</a></li>
|
|
<li><a href="#relations_tab" data-toggle="tab"><i class="fas fa-link"></i> @lang('lang_v1.holding_relations_tab')</a></li>
|
|
<li><a href="#assignments_tab" data-toggle="tab"><i class="fas fa-user-tie"></i> @lang('lang_v1.holding_assignments_tab')</a></li>
|
|
</ul>
|
|
<div class="tab-content">
|
|
<div class="tab-pane active" id="overview_tab">
|
|
<div class="box-header with-border">
|
|
<h3 class="box-title">@lang('lang_v1.holding_org_tree')</h3>
|
|
<div class="box-tools pull-left">
|
|
@can('holding.update')
|
|
{!! Form::open(['url' => route('holding.sync.hrm'), 'method' => 'post', 'id' => 'holding_sync_hrm_form', 'style' => 'display:inline']) !!}
|
|
<button type="submit" class="btn btn-sm btn-success"><i class="fas fa-sync"></i> @lang('lang_v1.holding_sync_hrm')</button>
|
|
{!! Form::close() !!}
|
|
@endcan
|
|
<a href="{{ action([\App\Http\Controllers\TaxonomyController::class, 'index']) . '?type=hrm_department' }}" class="btn btn-sm btn-default">
|
|
<i class="fas fa-users"></i> @lang('essentials::lang.departments')
|
|
</a>
|
|
</div>
|
|
</div>
|
|
@if($entities->isEmpty())
|
|
<p class="text-center text-muted">@lang('lang_v1.holding_empty_entities')</p>
|
|
@else
|
|
<div class="row">
|
|
@foreach($orgTrees as $tree)
|
|
<div class="col-md-6">
|
|
<div class="box box-solid">
|
|
<div class="box-header with-border">
|
|
<h3 class="box-title">{{ $tree['entity']->name }}</h3>
|
|
<span class="label label-primary">{{ $entityTypes[$tree['entity']->entity_type] ?? $tree['entity']->entity_type }}</span>
|
|
</div>
|
|
<div class="box-body">
|
|
@if(empty($tree['nodes']))
|
|
<p class="text-muted">@lang('lang_v1.holding_no_units')</p>
|
|
@else
|
|
@include('holding.partials.org_tree_nodes', ['nodes' => $tree['nodes']])
|
|
@endif
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@endforeach
|
|
</div>
|
|
@endif
|
|
</div>
|
|
|
|
<div class="tab-pane" id="entities_tab">
|
|
@can('holding.create')
|
|
<button type="button" class="btn btn-primary btn-modal margin-bottom-10" data-href="{{ route('holding.entities.create') }}" data-container=".holding_entity_modal">
|
|
<i class="fa fa-plus"></i> @lang('messages.add')
|
|
</button>
|
|
@endcan
|
|
@include('holding.partials.table_entities')
|
|
</div>
|
|
|
|
<div class="tab-pane" id="units_tab">
|
|
@can('holding.create')
|
|
<button type="button" class="btn btn-primary btn-modal margin-bottom-10" data-href="{{ route('holding.units.create') }}" data-container=".holding_unit_modal">
|
|
<i class="fa fa-plus"></i> @lang('messages.add')
|
|
</button>
|
|
@endcan
|
|
@include('holding.partials.table_units')
|
|
</div>
|
|
|
|
<div class="tab-pane" id="relations_tab">
|
|
@can('holding.create')
|
|
<button type="button" class="btn btn-primary btn-modal margin-bottom-10" data-href="{{ route('holding.relations.create') }}" data-container=".holding_relation_modal">
|
|
<i class="fa fa-plus"></i> @lang('messages.add')
|
|
</button>
|
|
@endcan
|
|
@include('holding.partials.table_relations')
|
|
</div>
|
|
|
|
<div class="tab-pane" id="assignments_tab">
|
|
<div class="margin-bottom-10">
|
|
@can('holding.assignments.manage')
|
|
<button type="button" class="btn btn-primary btn-modal" data-href="{{ route('holding.assignments.create') }}" data-container=".holding_assignment_modal">
|
|
<i class="fa fa-plus"></i> @lang('messages.add')
|
|
</button>
|
|
@endcan
|
|
@can('holding.update')
|
|
<button type="button" class="btn btn-success" id="holding_sync_hrm_btn"><i class="fas fa-sync"></i> @lang('lang_v1.holding_sync_hrm')</button>
|
|
@endcan
|
|
</div>
|
|
@include('holding.partials.table_assignments')
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<div class="modal fade holding_entity_modal" tabindex="-1" role="dialog"></div>
|
|
<div class="modal fade holding_unit_modal" tabindex="-1" role="dialog"></div>
|
|
<div class="modal fade holding_relation_modal" tabindex="-1" role="dialog"></div>
|
|
<div class="modal fade holding_assignment_modal" tabindex="-1" role="dialog"></div>
|
|
@endsection
|
|
|
|
@section('javascript')
|
|
<script type="text/javascript">
|
|
var HOLDING_LANG = {
|
|
confirm_delete: @json(__('lang_v1.holding_confirm_delete')),
|
|
sync_hrm_url: @json(route('holding.sync.hrm'))
|
|
};
|
|
</script>
|
|
<script src="{{ asset('js/holding.js?v=' . $asset_v) }}"></script>
|
|
@endsection
|