@php /* |---------------------------------------------------------------------- | TALLY-STYLE PROFIT & LOSS REPORT | Left = Expenses | Right = Incomes |---------------------------------------------------------------------- */ function renderSide(array $groups, string $fromDate, string $toDate): string { $ledgerBase = route('account-ledger-report.index'); $html = ''; static $grpId = 1000; // Offset to avoid clash with other potential counters foreach ($groups as $grp) { if (!is_array($grp) || !isset($grp['group_name'])) continue; $html .= ''; $html .= '' . e($grp['group_name']) . ''; $html .= '' . number_format($grp['amount'], 2) . ''; $html .= ''; foreach ($grp as $L3 => $aGrp) { if (!is_array($aGrp) || !isset($aGrp['a_group_name'])) continue; if (round(abs($aGrp['amount'] ?? 0), 2) == 0) continue; $ledgers = array_filter($aGrp, fn($v) => is_array($v) && isset($v['ledger_account']) && round(abs($v['amount'] ?? 0), 2) != 0 ); $grpId++; $hasChildren = count($ledgers) > 0; $chevron = $hasChildren ? '' : ''; $rowClass = $hasChildren ? 'bs-toggle bs-collapsed' : ''; $html .= ''; $html .= '' . $chevron . e($aGrp['a_group_name']) . ''; $html .= '' . number_format($aGrp['amount'], 2) . ''; $html .= ''; foreach ($ledgers as $ledger) { $ledId = $ledger['ledger_id'] ?? null; $ledName = $ledger['ledger_account']; $ledAmt = $ledger['amount']; $link = $ledId ? $ledgerBase . '?ledger_id=' . $ledId . '&from_date=' . urlencode($fromDate) . '&to_date=' . urlencode($toDate) : '#'; $html .= ''; $html .= '' . '' . e($ledName) . ''; $html .= '' . number_format($ledAmt, 2) . ''; $html .= ''; } } } return $html; } @endphp
Profit & Loss A/c
For the period: {{ date('d-M-Y', strtotime($from_date)) }} to {{ date('d-M-Y', strtotime($to_date)) }}
{{-- ============ LEFT SIDE: Expenses ============ --}}
Expenses
{{-- TRADING: Opening Stock --}} {{-- TRADING: Direct Expenses --}} {!! renderSide($data['tradingExpenses'], $from_date, $to_date) !!} {{-- P&L: Indirect Expenses --}} {!! renderSide($data['pAndLExpenses'], $from_date, $to_date) !!} {{-- P&L: Net Profit --}} @if($data['netProfit'] > 0) @endif
Opening Stock {{ number_format($data['openingStock'], 2) }}
Net Profit {{ number_format($data['netProfit'], 2) }}
Total {{ number_format($data['finalExpTotal'], 2) }}
{{-- ============ RIGHT SIDE: Incomes ============ --}}
Incomes
{{-- TRADING: Closing Stock --}} {{-- TRADING: Direct Incomes (Sales etc) --}} {!! renderSide($data['tradingIncome'], $from_date, $to_date) !!} {{-- P&L: Indirect Incomes --}} {!! renderSide($data['pAndLIncome'], $from_date, $to_date) !!} {{-- P&L: Net Loss --}} @if($data['netLoss'] > 0) @endif
Closing Stock {{ number_format($data['closingStock'], 2) }}
Net Loss {{ number_format($data['netLoss'], 2) }}
Total {{ number_format($data['finalIncTotal'], 2) }}