ultimatepos/Modules/AdvancedPlanning/Resources/views/sop_cycles/show.blade.php

201 lines
11 KiB
PHP

@extends('layouts.app')
@section('title', __('advancedplanning::lang.sop_cycles').' — '.$cycle->cycle_month?->format('Y-m'))
@section('content')
@include('advancedplanning::layouts.nav')
@php
$util = app(\Modules\AdvancedPlanning\Utils\AdvancedPlanningUtil::class);
$demand = $cycle->demand_plan ?? [];
$supply = $cycle->supply_plan ?? [];
$financial = $cycle->financial_plan ?? [];
$gaps = $cycle->gaps ?? [];
@endphp
<section class="content-header">
<h1>@lang('advancedplanning::lang.sop_cycles'): @format_date($cycle->cycle_month)
<small>{{ $util->statusLabel($cycle->status) }}</small>
</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">&times;</button>
{{ session('status.msg') }}
</div>
@endif
@can('ap.sop.manage')
<div class="box box-solid">
<div class="box-body">
<form action="{{ action([\Modules\AdvancedPlanning\Http\Controllers\SopCycleController::class, 'refresh'], $cycle->id) }}" method="POST" style="display:inline;">
@csrf
<button type="submit" class="btn btn-info btn-sm"><i class="fa fa-refresh"></i> @lang('advancedplanning::lang.refresh_plans')</button>
</form>
@if($cycle->status === 'draft')
<form action="{{ action([\Modules\AdvancedPlanning\Http\Controllers\SopCycleController::class, 'advanceStatus'], $cycle->id) }}" method="POST" style="display:inline;">
@csrf
<input type="hidden" name="status" value="consensus">
<button type="submit" class="btn btn-warning btn-sm">@lang('advancedplanning::lang.advance_to_consensus')</button>
</form>
@endif
@if($cycle->status === 'consensus')
<form action="{{ action([\Modules\AdvancedPlanning\Http\Controllers\SopCycleController::class, 'advanceStatus'], $cycle->id) }}" method="POST" style="display:inline;">
@csrf
<input type="hidden" name="status" value="approved">
<button type="submit" class="btn btn-success btn-sm">@lang('advancedplanning::lang.advance_to_approved')</button>
</form>
<form action="{{ action([\Modules\AdvancedPlanning\Http\Controllers\SopCycleController::class, 'advanceStatus'], $cycle->id) }}" method="POST" style="display:inline;">
@csrf
<input type="hidden" name="status" value="draft">
<button type="submit" class="btn btn-default btn-sm">@lang('advancedplanning::lang.revert_to_draft')</button>
</form>
@endif
@if($cycle->status === 'approved')
<form action="{{ action([\Modules\AdvancedPlanning\Http\Controllers\SopCycleController::class, 'advanceStatus'], $cycle->id) }}" method="POST" style="display:inline;">
@csrf
<input type="hidden" name="status" value="draft">
<button type="submit" class="btn btn-default btn-sm">@lang('advancedplanning::lang.revert_to_draft')</button>
</form>
@endif
</div>
</div>
@endcan
<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-shopping-cart"></i></span>
<div class="info-box-content">
<span class="info-box-text">@lang('advancedplanning::lang.total_demand')</span>
<span class="info-box-number">{{ $demand['total_demand_units'] ?? 0 }}</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-clock-o"></i></span>
<div class="info-box-content">
<span class="info-box-text">@lang('advancedplanning::lang.total_capacity')</span>
<span class="info-box-number">{{ $supply['total_available_hours'] ?? 0 }}</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-wrench"></i></span>
<div class="info-box-content">
<span class="info-box-text">@lang('advancedplanning::lang.open_work_orders')</span>
<span class="info-box-number">{{ $supply['open_work_orders'] ?? 0 }}</span>
</div>
</div>
</div>
<div class="col-md-3 col-sm-6">
<div class="info-box bg-purple">
<span class="info-box-icon"><i class="fa fa-money"></i></span>
<div class="info-box-content">
<span class="info-box-text">@lang('advancedplanning::lang.margin_estimate')</span>
<span class="info-box-number">{{ $financial['margin_estimate'] ?? 0 }}</span>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="box box-primary">
<div class="box-header"><h3 class="box-title">@lang('advancedplanning::lang.demand_plan')</h3></div>
<div class="box-body">
<p><strong>@lang('advancedplanning::lang.period'):</strong>
{{ $demand['period']['start'] ?? '—' }} {{ $demand['period']['end'] ?? '—' }}
</p>
@if(!empty($demand['sales_history']))
<h5>@lang('advancedplanning::lang.sales_history')</h5>
<table class="table table-condensed table-bordered">
<thead><tr><th>@lang('advancedplanning::lang.product')</th><th>@lang('advancedplanning::lang.quantity')</th></tr></thead>
<tbody>
@foreach(array_slice($demand['sales_history'], 0, 10) as $row)
<tr>
<td>{{ $row['product_id'] }} / {{ $row['variation_id'] ?? '—' }}</td>
<td>{{ $row['quantity'] }}</td>
</tr>
@endforeach
</tbody>
</table>
@endif
@if(!empty($demand['mrp_demand']))
<h5>@lang('advancedplanning::lang.mrp_demand')</h5>
<table class="table table-condensed table-bordered">
<thead><tr><th>@lang('advancedplanning::lang.ref_no')</th><th>@lang('advancedplanning::lang.work_order')</th><th>@lang('advancedplanning::lang.quantity')</th></tr></thead>
<tbody>
@foreach($demand['mrp_demand'] as $row)
<tr>
<td>{{ $row['run_code'] }}</td>
<td>{{ $row['work_order_number'] ?? '—' }}</td>
<td>{{ $row['planned_quantity'] }}</td>
</tr>
@endforeach
</tbody>
</table>
@endif
</div>
</div>
</div>
<div class="col-md-6">
<div class="box box-primary">
<div class="box-header"><h3 class="box-title">@lang('advancedplanning::lang.supply_plan')</h3></div>
<div class="box-body">
<p><strong>@lang('advancedplanning::lang.scheduled_hours'):</strong> {{ $supply['scheduled_hours'] ?? 0 }}</p>
<p><strong>@lang('advancedplanning::lang.open_work_order_qty'):</strong> {{ $supply['open_work_order_qty'] ?? 0 }}</p>
@if(!empty($supply['capacity_resources']))
<table class="table table-condensed table-bordered">
<thead><tr><th>@lang('advancedplanning::lang.resource')</th><th>@lang('advancedplanning::lang.type')</th><th>@lang('advancedplanning::lang.available_hours')</th></tr></thead>
<tbody>
@foreach($supply['capacity_resources'] as $row)
<tr>
<td>{{ $row['name'] }}</td>
<td>{{ $util->resourceTypeLabel($row['type']) }}</td>
<td>{{ $row['available_hours'] }}</td>
</tr>
@endforeach
</tbody>
</table>
@endif
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="box box-solid">
<div class="box-header"><h3 class="box-title">@lang('advancedplanning::lang.financial_plan')</h3></div>
<div class="box-body">
<p><strong>@lang('advancedplanning::lang.projected_revenue'):</strong> {{ $financial['projected_revenue'] ?? 0 }}</p>
<p><strong>@lang('advancedplanning::lang.projected_supply_cost'):</strong> {{ $financial['projected_supply_cost'] ?? 0 }}</p>
<p><strong>@lang('advancedplanning::lang.capacity_cost_ceiling'):</strong> {{ $financial['capacity_cost_ceiling'] ?? 0 }}</p>
</div>
</div>
</div>
<div class="col-md-6">
<div class="box box-warning">
<div class="box-header"><h3 class="box-title">@lang('advancedplanning::lang.gaps')</h3></div>
<div class="box-body">
<p><strong>@lang('advancedplanning::lang.demand_vs_supply_units'):</strong> {{ $gaps['demand_vs_supply_units'] ?? 0 }}</p>
<p><strong>@lang('advancedplanning::lang.capacity_vs_scheduled_hours'):</strong> {{ $gaps['capacity_vs_scheduled_hours'] ?? 0 }}</p>
@if(!empty($gaps['recommendations']))
<h5>@lang('advancedplanning::lang.recommendations')</h5>
<ul>
@foreach($gaps['recommendations'] as $rec)
<li>{{ $rec }}</li>
@endforeach
</ul>
@endif
</div>
</div>
</div>
</div>
<div class="box-footer">
<a href="{{ action([\Modules\AdvancedPlanning\Http\Controllers\SopCycleController::class, 'index']) }}" class="btn btn-default">@lang('advancedplanning::lang.back')</a>
</div>
</section>
@endsection