@extends('layouts.app', ['class' => 'g-sidenav-show bg-gray-100']) @section('content') @include('layouts.navbars.auth.topnav', ['title' => '']) @php $currentRole = auth()->user()->idroles ?? (auth()->user()->role ?? null); // Dashboard utama Purchase Report $canSeeFullDashboard = in_array($currentRole, ['admins', 'purchs']); // Monitoring PO Purchasing hanya untuk admpur $canSeeMonitoringPo = $currentRole === 'admpur'; @endphp @if (session('success')) @endif @if (session('error')) @endif @if (session('info')) @endif
@if ($canSeeFullDashboard)
Dashboard Purchase Report
Loading…
@php $getQty = fn($code) => number_format($summary_mtart[$code]->total_qty ?? 0, 2); @endphp
@php $safePeriod = $filter_yearmonth ?? ($maxYearMonth ?? now()->format('Ym')); try { $period = \Carbon\Carbon::createFromFormat('Ymd', $safePeriod . '01'); $periodLabel = $period->translatedFormat('F Y'); $filter_year = $period->year; } catch (\Exception $e) { $periodLabel = 'Invalid Period'; $filter_year = now()->year; } @endphp

Period

{{ $periodLabel }}
@if ($maxYearMonth && $safePeriod !== $maxYearMonth) Reset to Latest Period @endif
{{-- Summary --}}
Summary 12 Bulan Terakhir

Per Material Type: ZRAW, ZSUP, ZPCK

@foreach ($ksl_months as $m) @endforeach @foreach ($ksl_summary as $row) @php $mtart = $row['MTART']; @endphp @foreach ($ksl_months as $m) @php $monthKey = $m['key']; $cellData = $precomputedCells[$mtart][$monthKey] ?? [ 'avg12' => '0', 'avgLastYear' => '0', ]; @endphp @endforeach @endforeach @foreach ($ksl_months as $m) @endforeach
Material Type Curr{{ $m['label'] }}
{{ $mtart }} IDR {!! $cellData['avg12'] !!}
Total IDR {{ number_format($ksl_monthly_totals[$m['key']] ?? 0, 0, ',', '.') }}
{{-- Average Cards --}}
@foreach ($available_years as $year) @continue($year == getActiveYear()) @php $yearData = $groupedAvg[$year] ?? collect(); $isFullYear = ($monthCountPerYear[$year] ?? 0) >= 12; $lastMonthNum = $lastMonthPerYear[$year] ?? null; $lastMonthName = $lastMonthNum ? \Carbon\Carbon::createFromDate($year, $lastMonthNum)->translatedFormat('F') : '-'; $avgLabel = $isFullYear ? "Average {$year}" : "Average Jan - {$lastMonthName} {$year}"; $cardClass = $isFullYear ? 'card-filled text-dark' : 'bg-light text-muted'; @endphp
{{ $avgLabel }} (IDR)
  • ZRAW {{ $getAvg($yearData, 'ZRAW') }}
  • ZSUP {{ $getAvg($yearData, 'ZSUP') }}
  • ZPCK {{ $getAvg($yearData, 'ZPCK') }}
@endforeach
Average 12 Bulan Terakhir (IDR)
  • ZRAW {{ $getAvgNow('ZRAW') }}
  • ZSUP {{ $getAvgNow('ZSUP') }}
  • ZPCK {{ $getAvgNow('ZPCK') }}
YTD

Memuat data...

@endif {{-- Monitoring PO Purchasing: tampil untuk semua role --}} {{-- PO Switch Transaction List Ringkas --}} @php $poSwitchDocuments = collect($poSwitchDocuments ?? []); $fmtAmount = function ($value) { if (is_numeric($value)) { $num = (float) $value; } else { $value = (string) $value; $value = str_replace('.', '', $value); $value = str_replace(',', '.', $value); $num = (float) $value; } return number_format(abs($num), 2, ',', '.'); }; $fmtDocNo = function ($value) { $value = (string) $value; return ltrim($value, '0') ?: $value; }; $poSwitchHeaderClass = 'text-center align-middle text-uppercase text-secondary text-xs font-weight-bolder opacity-7'; @endphp
Transaction List - PO Switch Account

List Transaksi perubahan Account

{{ $poSwitchDocuments->count() }} Dokumen
@if ($poSwitchDocuments->isEmpty())
Tidak ada data PO Switch pada periode ini.
@else
@foreach ($poSwitchDocuments as $doc) @php $lines = collect($doc['lines'] ?? []); $creditLines = $lines->filter(fn($line) => ($line['ksl'] ?? 0) < 0)->values(); $debitLines = $lines->filter(fn($line) => ($line['ksl'] ?? 0) >= 0)->values(); $maxRows = max($creditLines->count(), $debitLines->count()); $mainCurr = $debitLines->first()['rkcur'] ?? ($creditLines->first()['rkcur'] ?? '-'); @endphp
{{-- Header Dokumen --}}
{{ $fmtDocNo($doc['belnr'] ?? '') }} {{ $doc['budat'] ?? '-' }}
{{ $doc['bktxt'] ?? '-' }}
PO
{{ $doc['po_list'] ?: '-' }}
@if ($maxRows <= 0)
Tidak ada pasangan Credit / Debit.
@else
@for ($i = 0; $i < $maxRows; $i++) @php $credit = $creditLines->get($i); $debit = $debitLines->get($i); $poNo = data_get($debit, 'ebeln') ?: data_get($credit, 'ebeln') ?: '-'; $amount = data_get($debit, 'ksl'); if ($amount === null) { $amount = abs(data_get($credit, 'ksl', 0)); } $curr = data_get($debit, 'rkcur') ?: data_get($credit, 'rkcur') ?: '-'; @endphp {{-- PO --}} {{-- Account Name Kredit -> Debit --}} {{-- Text Debit --}} {{-- Amount --}} {{-- Currency --}} @endfor
PO Account Name Text Amount Curr
@if ($poNo && $poNo !== '-') @else - @endif
{{ data_get($credit, 'racct_name', '-') }}
{{ data_get($debit, 'racct_name', '-') }}
{{ data_get($debit, 'sgtxt', '-') }} {{ $fmtAmount($amount) }} {{ $curr }}
Total Amount {{ $fmtAmount($doc['total_debit'] ?? 0) }} {{ $mainCurr }}
@endif
@endforeach
@endif
{{-- Modal Detail PO --}} @if ($canSeeMonitoringPo) {{-- Monitoring PO Purchasing: hanya tampil untuk role admpur --}} @php $waitApprovalPr = $dashboardPurchasing['wait_approval_pr'] ?? []; $outstandingPrCode = $dashboardPurchasing['outstanding_pr_code'] ?? []; $outstandingPrNon = $dashboardPurchasing['outstanding_pr_non'] ?? []; $waitApprovalPoPurch = $dashboardPurchasing['wait_approval_po_purch'] ?? []; $waitApprovalPoDir = $dashboardPurchasing['wait_approval_po_dir'] ?? []; $outstandingPo = $dashboardPurchasing['outstanding_po'] ?? []; $bsartList = ['ZR15', 'ZR16', 'ZR17']; $headerClass = 'text-center align-middle text-uppercase text-secondary text-xs font-weight-bolder opacity-7'; $cellClass = 'text-center align-middle'; @endphp
Monitoring PO Purchasing
@foreach ($bsartList as $bsart) @php $prWait = $waitApprovalPr[$bsart] ?? ['jum' => 0, 'days' => 0]; $prCode = $outstandingPrCode[$bsart] ?? ['jum' => 0, 'days' => 0]; $prNon = $outstandingPrNon[$bsart] ?? ['jum' => 0, 'days' => 0]; $poPurch = $waitApprovalPoPurch[$bsart] ?? ['po' => 0, 'line' => 0]; $poDir = $waitApprovalPoDir[$bsart] ?? ['po' => 0, 'line' => 0]; $poOs = $outstandingPo[$bsart] ?? ['po' => 0, 'line' => 0]; @endphp @endforeach @php $totalWaitPr = collect($waitApprovalPr)->sum('jum'); $totalWaitPrDays = collect($waitApprovalPr)->sum('days'); $totalPrCode = collect($outstandingPrCode)->sum('jum'); $totalPrCodeDays = collect($outstandingPrCode)->sum('days'); $totalPrNon = collect($outstandingPrNon)->sum('jum'); $totalPrNonDays = collect($outstandingPrNon)->sum('days'); $totalPoPurchPo = collect($waitApprovalPoPurch)->sum('po'); $totalPoPurchLine = collect($waitApprovalPoPurch)->sum('line'); $totalPoDirPo = collect($waitApprovalPoDir)->sum('po'); $totalPoDirLine = collect($waitApprovalPoDir)->sum('line'); $totalPoOsPo = collect($outstandingPo)->sum('po'); $totalPoOsLine = collect($outstandingPo)->sum('line'); @endphp
Document Type Wait Approval PR Outstanding PR Wait Approval PO Outstanding PO
Jumlah With Code Non Code Purch Director PO / Line
{{ $bsart }}
{{ $prWait['jum'] }}
{{ $prWait['days'] }} Hari
{{ $prCode['jum'] }}
{{ $prCode['days'] }} Hari
{{ $prNon['jum'] }}
{{ $prNon['days'] }} Hari
{{ $poPurch['po'] }}
{{ $poPurch['line'] }} Line
{{ $poDir['po'] }}
{{ $poDir['line'] }} Line
{{ $poOs['po'] }} PO
{{ $poOs['line'] }} Line
TOTAL
{{ $totalWaitPr }}
{{ $totalWaitPrDays }} Hari
{{ $totalPrCode }}
{{ $totalPrCodeDays }} Hari
{{ $totalPrNon }}
{{ $totalPrNonDays }} Hari
{{ $totalPoPurchPo }}
{{ $totalPoPurchLine }} Line
{{ $totalPoDirPo }}
{{ $totalPoDirLine }} Line
{{ $totalPoOsPo }} PO
{{ $totalPoOsLine }} Line
@endif @if ($canSeeFullDashboard) {{-- MODAL SYNC --}} {{-- MODAL FILTER BULAN --}} @endif
@endsection @push('js') @if ($canSeeFullDashboard) @endif @endpush