147 lines
7.5 KiB
PHP
147 lines
7.5 KiB
PHP
@extends('layouts.app')
|
|
@section('title', __('supplychain::lang.dashboard'))
|
|
@section('content')
|
|
@include('supplychain::layouts.nav')
|
|
<section class="content-header">
|
|
<h1>@lang('supplychain::lang.dashboard')</h1>
|
|
</section>
|
|
<section class="content">
|
|
@if(session('status'))
|
|
<div class="alert alert-{{ session('status.success') ? 'success' : 'warning' }} alert-dismissible">
|
|
<button type="button" class="close" data-dismiss="alert">×</button>
|
|
{{ session('status.msg') }}
|
|
</div>
|
|
@endif
|
|
|
|
<div class="row">
|
|
<div class="col-md-3 col-sm-6">
|
|
<div class="info-box bg-aqua">
|
|
<span class="info-box-icon"><i class="fa fa-star"></i></span>
|
|
<div class="info-box-content">
|
|
<span class="info-box-text">@lang('supplychain::lang.stats_scorecards')</span>
|
|
<span class="info-box-number">{{ $stats['scorecards'] }}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-3 col-sm-6">
|
|
<div class="info-box bg-green">
|
|
<span class="info-box-icon"><i class="fa fa-line-chart"></i></span>
|
|
<div class="info-box-content">
|
|
<span class="info-box-text">@lang('supplychain::lang.stats_forecasts')</span>
|
|
<span class="info-box-number">{{ $stats['forecasts'] }}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-3 col-sm-6">
|
|
<div class="info-box bg-yellow">
|
|
<span class="info-box-icon"><i class="fa fa-file-text"></i></span>
|
|
<div class="info-box-content">
|
|
<span class="info-box-text">@lang('supplychain::lang.stats_open_rfqs')</span>
|
|
<span class="info-box-number">{{ $stats['open_rfqs'] }}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-3 col-sm-6">
|
|
<div class="info-box bg-red">
|
|
<span class="info-box-icon"><i class="fa fa-exclamation-triangle"></i></span>
|
|
<div class="info-box-content">
|
|
<span class="info-box-text">@lang('supplychain::lang.stats_high_risk')</span>
|
|
<span class="info-box-number">{{ $stats['high_risk_suppliers'] }}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row">
|
|
<div class="col-md-6">
|
|
<div class="box box-primary">
|
|
<div class="box-header with-border">
|
|
<h3 class="box-title">@lang('supplychain::lang.recent_scorecards')</h3>
|
|
@can('supplychain.scorecard.view')
|
|
<a href="{{ action([\Modules\SupplyChain\Http\Controllers\SupplierScorecardController::class, 'index']) }}" class="btn btn-default btn-xs pull-right">@lang('supplychain::lang.supplier_scorecards')</a>
|
|
@endcan
|
|
</div>
|
|
<div class="box-body table-responsive">
|
|
<table class="table table-bordered table-striped">
|
|
<thead>
|
|
<tr>
|
|
<th>@lang('supplychain::lang.supplier')</th>
|
|
<th>@lang('supplychain::lang.overall_score')</th>
|
|
<th>@lang('supplychain::lang.risk_level')</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@forelse($recentScorecards as $sc)
|
|
<tr>
|
|
<td>{{ $sc->contact?->name ?? '—' }}</td>
|
|
<td>{{ number_format($sc->overall_score, 1) }}</td>
|
|
<td><span class="label {{ $supplyChainUtil->riskBadgeClass($sc->risk_level) }}">@lang('supplychain::lang.risk_'.$sc->risk_level)</span></td>
|
|
</tr>
|
|
@empty
|
|
<tr><td colspan="3" class="text-center text-muted">@lang('supplychain::lang.no_records')</td></tr>
|
|
@endforelse
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<div class="box box-primary">
|
|
<div class="box-header with-border">
|
|
<h3 class="box-title">@lang('supplychain::lang.recent_rfqs')</h3>
|
|
@can('supplychain.rfq.view')
|
|
<a href="{{ action([\Modules\SupplyChain\Http\Controllers\RfqController::class, 'index']) }}" class="btn btn-default btn-xs pull-right">@lang('supplychain::lang.rfq')</a>
|
|
@endcan
|
|
</div>
|
|
<div class="box-body table-responsive">
|
|
<table class="table table-bordered table-striped">
|
|
<thead>
|
|
<tr>
|
|
<th>@lang('supplychain::lang.ref_no')</th>
|
|
<th>@lang('supplychain::lang.title')</th>
|
|
<th>@lang('supplychain::lang.status')</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@forelse($recentRfqs as $rfq)
|
|
<tr>
|
|
<td><a href="{{ action([\Modules\SupplyChain\Http\Controllers\RfqController::class, 'show'], $rfq->id) }}">{{ $rfq->ref_no }}</a></td>
|
|
<td>{{ $rfq->title }}</td>
|
|
<td><span class="label {{ $supplyChainUtil->rfqStatusBadgeClass($rfq->status) }}">@lang('supplychain::lang.rfq_status_'.$rfq->status)</span></td>
|
|
</tr>
|
|
@empty
|
|
<tr><td colspan="3" class="text-center text-muted">@lang('supplychain::lang.no_records')</td></tr>
|
|
@endforelse
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="box box-default">
|
|
<div class="box-header with-border">
|
|
<h3 class="box-title">@lang('supplychain::lang.quick_actions')</h3>
|
|
</div>
|
|
<div class="box-body">
|
|
@can('supplychain.scorecard.create')
|
|
<form method="POST" action="{{ action([\Modules\SupplyChain\Http\Controllers\SupplierScorecardController::class, 'calculate']) }}" style="display:inline-block;margin-right:8px;">
|
|
@csrf
|
|
<button type="submit" class="btn btn-primary btn-sm"><i class="fa fa-calculator"></i> @lang('supplychain::lang.calculate_scorecards')</button>
|
|
</form>
|
|
@endcan
|
|
@can('supplychain.forecast.create')
|
|
<form method="POST" action="{{ action([\Modules\SupplyChain\Http\Controllers\DemandForecastController::class, 'generate']) }}" style="display:inline-block;margin-right:8px;">
|
|
@csrf
|
|
<input type="hidden" name="months_ahead" value="3">
|
|
<button type="submit" class="btn btn-success btn-sm"><i class="fa fa-line-chart"></i> @lang('supplychain::lang.generate_forecasts')</button>
|
|
</form>
|
|
@endcan
|
|
@can('supplychain.rfq.create')
|
|
<a href="{{ action([\Modules\SupplyChain\Http\Controllers\RfqController::class, 'create']) }}" class="btn btn-warning btn-sm"><i class="fa fa-plus"></i> @lang('supplychain::lang.create_rfq')</a>
|
|
@endcan
|
|
</div>
|
|
</div>
|
|
</section>
|
|
@endsection
|