@extends('admin.layouts.app') @section('title', 'Party Ledger') @section('page_title', 'Party Ledger') @section('content')
Party Ledger Report
Party Ledger @if($selectedCustomer) - {{ $selectedCustomer->name }} @else (All Customers) @endif
@php $balance = 0; $totalSales = 0; $totalSalesReturn = 0; $totalDiscount = 0; $totalTDS = 0; $totalVDS = 0; $totalNetReceivable = 0; $totalPaymentReceived = 0; $totalDue = 0; @endphp @forelse($ledgers as $entry) @php $sale = $entry->reference_type == 'Sale' && isset($sales[$entry->reference_id]) ? $sales[$entry->reference_id] : null; $saleReturn = $entry->reference_type == 'SaleReturn' && isset($saleReturns[$entry->reference_id]) ? $saleReturns[$entry->reference_id] : null; $salesAmount = 0; $salesReturnAmount = 0; $paymentAmount = 0; $discount = 0; $tds = 0; $vds = 0; // Balance = +Sales - Discount - TDS - VDS - Sales Return - Payment Received if($entry->reference_type == 'Sale') { $debit = (float)$entry->debit; if($debit > 0 && $sale) { // Original sale entry: debit = total, but show subtotal in Sales column $salesAmount = (float)$sale->subtotal; // Discount/TDS/VDS show only on voucher rows, not on sale row $discount = 0; $tds = 0; $vds = 0; $balance += $salesAmount; $totalSales += $salesAmount; } elseif($sale) { // payDue payment entry (debit = 0, credit = received) $paymentAmount = (float)$entry->credit; $balance -= $paymentAmount; $totalPaymentReceived += $paymentAmount; } else { $salesAmount = $debit; $balance += $salesAmount; $totalSales += $salesAmount; } } elseif($entry->reference_type == 'SaleReturn') { $salesReturnAmount = (float)($entry->credit ?: $entry->debit); $balance -= $salesReturnAmount; $totalSalesReturn += $salesReturnAmount; } else { $paymentAmount = (float)$entry->credit; $balance -= $paymentAmount; $totalPaymentReceived += $paymentAmount; // Get discount/TDS/VDS from voucher model (not regex) $voucher = $vouchers[$entry->reference_id] ?? null; if($voucher) { $discount = (float)($voucher->discount ?? 0); $tds = (float)($voucher->tds ?? 0); $vds = (float)($voucher->vds ?? 0); } // Subtract discount/TDS/VDS for all vouchers $balance -= $discount + $tds + $vds; } $shipmentNumbers = null; if($sale) { $itemsShipments = $sale->items ? $sale->items->pluck('shipment_number')->filter()->unique()->values()->toArray() : []; $saleShipment = $sale->shipment_number; $allShipments = array_filter(array_merge($itemsShipments, $saleShipment ? [$saleShipment] : [])); $shipmentNumbers = implode(', ', $allShipments) ?: null; } elseif($saleReturn) { $shipmentNumbers = $saleReturn->shipment_number ?? $entry->shipment_number; } else { $shipmentNumbers = $entry->shipment_number; } $paymentMethod = '-'; if($entry->reference_type == 'Voucher' && $voucher) { if(preg_match('/\(([^)]+)\)/', $voucher->description ?? '', $m)) { $paymentMethod = $m[1]; } } else { $desc = $entry->description ?? ''; if(preg_match('/Method:\s*([^,]+)/', $desc, $methodMatch)) { $paymentMethod = trim($methodMatch[1]); } elseif(preg_match_all('/\(([^)]+)\)/', $desc, $methodMatches)) { $last = end($methodMatches[1]); if(!preg_match('/^(Disc|TDS|VDS)/', $last)) { $paymentMethod = $last; } } } $totalDiscount += $discount; $totalTDS += $tds; $totalVDS += $vds; $netReceivable = $entry->reference_type == 'Sale' && (float)$entry->debit > 0 ? $salesAmount - $discount - $tds - $vds : 0; $totalNetReceivable += $netReceivable; $due = $netReceivable - $salesReturnAmount - $paymentAmount; $totalDue += $due; @endphp @empty @endforelse
Date Shipment No Invoice No Customer Branch Sales Discount TDS VDS Sales Return Payment Received Balance Payment Method
{{ date('d-m-Y', strtotime($entry->date)) }} {{ $entry->shipment_number ?? $shipmentNumbers ?? '-' }} {{ $entry->invoice_no ?: $entry->reference_id }} {{ $entry->customer->name ?? 'N/A' }} {{ $entry->branch->name ?? '-' }} {{ number_format($salesAmount, 2) }} {{ number_format($discount, 2) }} {{ number_format($tds, 2) }} {{ number_format($vds, 2) }} {{ number_format($salesReturnAmount, 2) }} {{ number_format($paymentAmount, 2) }} {{ number_format($balance, 2) }} {{ $paymentMethod }}
No records found
Total: {{ number_format($totalSales, 2) }} {{ number_format($totalDiscount, 2) }} {{ number_format($totalTDS, 2) }} {{ number_format($totalVDS, 2) }} {{ number_format($totalSalesReturn, 2) }} {{ number_format($totalPaymentReceived, 2) }}
@endsection