{{ __('Settlement Details') }}

@if ($settlement->status === 'draft') @can('sales-settlement-edit') @endcan @can('sales-settlement-post') @endcan @can('sales-settlement-delete') @endcan @endif @if ($settlement->status === 'posted') @can('sales-settlement-revert') {{-- Currently Do Not Needed Hide It
@csrf
--}} @endcan @endif
@push('header') @endpush @php $netSale = (float) $settlement->items->sum('total_sales_value'); $creditSalesAmount = (float) ($settlement->credit_sales_amount ?? 0); $chequeSalesAmount = (float) ($settlement->cheque_sales_amount ?? 0); $bankSalesAmount = (float) ($settlement->bank_transfer_amount ?? 0); $cashSalesAmount = (float) ($settlement->cash_sales_amount ?? 0); $cashDenominations = $settlement->cashDenominations->first(); $cashDenominationTotal = (float) ($cashDenominations?->total_amount ?? 0.0); $coins = (float) ($cashDenominations?->denom_coins ?? 0.0); // Correct Coins logic if needed, previously it was qty=amount for coins // Recovery Breakdown $recoveryCash = (float) $settlement->recoveries->where('payment_method', 'cash')->sum('amount'); $recoveryBank = (float) $settlement->recoveries->where('payment_method', 'bank_transfer')->sum('amount'); $recoveryTotal = (float) ($settlement->credit_recoveries ?? 0); $totalSale = $netSale + $recoveryTotal; // Expenses & Taxes // Note: Advance tax is already stored as an expense row (account_code 1161), // so $totalExpenses already includes it. Do NOT add advanceTaxTotal separately. $totalExpenses = (float) ($settlement->expenses->sum('amount') ?? 0); $advanceTaxTotal = (float) ($settlement->advanceTaxes->sum('tax_amount') ?? 0); $totalDeductions = $totalExpenses; // Expected Cash Calculation (Professional Accounting) // Cheques are cash-equivalent submissions; recalculate cash sales without deducting cheques $netSaleItems = (float) $settlement->items->sum('total_sales_value'); $chequesTotal = (float) $settlement->cheques->sum('amount'); $theoreticalCashSales = $netSaleItems - $creditSalesAmount - $bankSalesAmount; $expectedCashGross = $theoreticalCashSales + $recoveryCash; $expectedCashNet = $expectedCashGross - $totalDeductions; // Actual Physical Cash Collected $actualPhysicalCash = $cashDenominationTotal > 0 ? $cashDenominationTotal : (float) $settlement->cash_collected; $bankSlipsTotal = (float) $settlement->bankSlips->sum('amount'); // Total submitted = Physical Cash + Cheques (cash-equivalent) + Bank Slips $shortExcess = ($actualPhysicalCash + $chequesTotal + $bankSlipsTotal) - $expectedCashNet; // Profit Analysis $totalCOGS = (float) ($settlement->items->sum('total_cogs') ?? 0); $grossProfit = $netSale - $totalCOGS; $grossMargin = $netSale > 0 ? ($grossProfit / $netSale) * 100 : 0; $netProfit = $grossProfit - $totalExpenses; $netMargin = $netSale > 0 ? ($netProfit / $netSale) * 100 : 0; $valueTotals = [ 'bf_in_qty' => 0, 'bf_in_value' => 0, 'issued_qty' => 0, 'issued_value' => 0, 'sold_qty' => 0, 'sold_value' => 0, 'returned_qty' => 0, 'returned_value' => 0, 'shortage_qty' => 0, 'shortage_value' => 0, ]; foreach ($settlement->items as $item) { $priceFallback = (float) ($item->unit_selling_price > 0 ? $item->unit_selling_price : $item->unit_cost); if ($item->batches->count() > 0) { foreach ($item->batches as $batch) { $price = (float) ($batch->selling_price ?? $priceFallback); $issuedQty = (float) $batch->quantity_issued; $soldQty = (float) $batch->quantity_sold; $returnedQty = (float) $batch->quantity_returned; $shortageQty = (float) $batch->quantity_shortage; $valueTotals['issued_qty'] += $issuedQty; $valueTotals['issued_value'] += $issuedQty * $price; $valueTotals['sold_qty'] += $soldQty; $valueTotals['sold_value'] += $soldQty * $price; $valueTotals['returned_qty'] += $returnedQty; $valueTotals['returned_value'] += $returnedQty * $price; $valueTotals['shortage_qty'] += $shortageQty; $valueTotals['shortage_value'] += $shortageQty * $price; } } else { $issuedQty = (float) $item->quantity_issued; $soldQty = (float) $item->quantity_sold; $returnedQty = (float) $item->quantity_returned; $shortageQty = (float) $item->quantity_shortage; $valueTotals['issued_qty'] += $issuedQty; $valueTotals['issued_value'] += $issuedQty * $priceFallback; $valueTotals['sold_qty'] += $soldQty; $valueTotals['sold_value'] += $soldQty * $priceFallback; $valueTotals['returned_qty'] += $returnedQty; $valueTotals['returned_value'] += $returnedQty * $priceFallback; $valueTotals['shortage_qty'] += $shortageQty; $valueTotals['shortage_value'] += $shortageQty * $priceFallback; } } $totalAvailableQty = $valueTotals['bf_in_qty'] + $valueTotals['issued_qty']; $totalAvailableValue = $valueTotals['bf_in_value'] + $valueTotals['issued_value']; $bfOutQty = $totalAvailableQty - $valueTotals['sold_qty'] - $valueTotals['returned_qty'] - $valueTotals['shortage_qty']; $bfOutValue = $totalAvailableValue - $valueTotals['sold_value'] - $valueTotals['returned_value'] - $valueTotals['shortage_value']; @endphp
{{-- Report Header --}}
Moon Traders
Sales Settlement ({{ strtoupper($settlement->status) }})
Settlement #: {{ $settlement->settlement_number }} Date/Time: {{ \Carbon\Carbon::parse($settlement->settlement_date)->format('d-M-Y') }} {{ $settlement->created_at ? $settlement->created_at->format('h:i A') : '' }} Created By: {{ $settlement->creator->name ?? '-' }}
Salesman: {{ $settlement->employee->name }} Vehicle: {{ $settlement->vehicle->registration_number }} Warehouse: {{ $settlement->warehouse->warehouse_name }}
Goods Issue: {{ $settlement->goodsIssue->issue_number }} GI Date/Time: {{ $settlement->goodsIssue->issue_date ? \Carbon\Carbon::parse($settlement->goodsIssue->issue_date)->format('d-M-Y') : '' }} {{ $settlement->goodsIssue->created_at ? $settlement->goodsIssue->created_at->format('h:i A') : '' }}
GI Issued By: {{ $settlement->goodsIssue->creator->name ?? $settlement->goodsIssue->issuedBy->name ?? '-' }}
{{-- Product Table --}} @foreach ($settlement->items as $index => $item) @endforeach
Sr# SKU B/F (In) Qty Issued Batch (TP) Sold Return Short B/F (Out) Sales Value
{{ $index + 1 }}
{{ $item->product->product_name }}
@php $bfIn = $bfMap[$item->product_id] ?? 0; @endphp {{ number_format($bfIn, 2) }} {{ number_format($item->quantity_issued, 2) }} @if($item->batches->count() > 0)
@foreach($item->batches as $b) {{ number_format($b->quantity_issued, 0) }} × {{ number_format($b->selling_price, 2) }} @if($b->is_promotional) (Promo) @endif = {{ number_format($b->quantity_issued * $b->selling_price, 2) }} ({{ $b->batch_code ?? 'N/A' }})
@endforeach
@else No batch data @endif
{{ number_format($item->quantity_sold, 2) }} {{ number_format($item->quantity_returned, 2) }} {{ number_format($item->quantity_shortage, 2) }} @php $bfOut = $bfIn + $item->quantity_issued - $item->quantity_sold - $item->quantity_returned - $item->quantity_shortage; @endphp {{ number_format($bfOut, 2) }} {{ number_format($item->total_sales_value, 2) }}
Totals: {{ number_format($settlement->items->sum('quantity_issued'), 2) }} {{ number_format($settlement->total_quantity_sold, 2) }} {{ number_format($settlement->total_quantity_returned, 2) }} {{ number_format($settlement->total_quantity_shortage, 2) }} - {{ number_format($settlement->items->sum('total_sales_value'), 2) }}
Value Breakdown: {{ number_format($valueTotals['issued_value'], 2) }} {{ number_format($valueTotals['sold_value'], 2) }} {{ number_format($valueTotals['returned_value'], 2) }} {{ number_format($valueTotals['shortage_value'], 2) }} {{ number_format($bfOutValue, 2) }} {{ number_format($valueTotals['sold_value'], 2) }}
{{-- Full Width Financial Tables --}}
@php $csCount = $settlement->creditSales->count(); $recCount = $settlement->recoveries->count(); $maxRows = max($csCount, $recCount); @endphp {{-- Sales & Collection Details Group --}}

Sales & Collection Details

{{-- Credit Sales --}}

Credit Sales Breakdown

{{-- --}} @if($maxRows > 0) @for($i = 0; $i < $maxRows; $i++) @php $creditSale = $settlement->creditSales->get($i); @endphp {{-- @endfor @else @endif
# Customer Name Address PB Sale NB Notes
{{ $i + 1 }} {{ $creditSale?->customer->customer_name ?? '-' }} {{ $creditSale?->customer->address ?? '-' }} {{ $creditSale ? number_format($creditSale->previous_balance, 2) : '-' }} {{ $creditSale ? number_format($creditSale->sale_amount, 2) : '-' }} {{ $creditSale ? number_format($creditSale->new_balance, 2) : '-' }} {!! $creditSale?->notes ?? '-' !!} --}}
No credit sales recorded
Total: {{ number_format($settlement->creditSales->sum('sale_amount'), 2) }}
{{-- Recoveries --}}

Recoveries Breakdown (Cash + Online Bank Trafer From Customer)

{{-- --}} @if($maxRows > 0) @for($i = 0; $i < $maxRows; $i++) @php $recovery = $settlement->recoveries->get($i); @endphp {{-- --}} @endfor @else @endif
# CN Address PB Amt Method NB Notes
{{ $i + 1 }} {{ $recovery?->customer->customer_name ?? '-' }} {{ $recovery?->customer->address ?? '-' }} {{ $recovery ? number_format($recovery->previous_balance, 2) : '-' }} {{ $recovery ? number_format($recovery->amount, 2) : '-' }} @if($recovery) {{ $recovery->payment_method === 'cash' ? 'Cash' : 'Bank' }} @else - @endif {{ $recovery ? number_format($recovery->new_balance, 2) : '-' }} {!! $recovery?->notes ?? '-' !!}
No recoveries recorded
Total: {{ number_format($settlement->recoveries->sum('amount'), 2) }}
@php $chequeCount = $settlement->cheques->count(); $bankCount = $settlement->bankTransfers->count(); $maxRows2 = max($chequeCount, $bankCount); @endphp
{{-- Cheque Payments --}}

Cheque Payments

@if($maxRows2 > 0) @for($i = 0; $i < $maxRows2; $i++) @php $cheque = $settlement->cheques->get($i); @endphp @endfor @else @endif
# Date Chq # CN Bank Dep Bank Amount
{{ $i + 1 }} {{ $cheque && $cheque->cheque_date ? \Carbon\Carbon::parse($cheque->cheque_date)->format('d-M-y') : '-' }} {{ $cheque->cheque_number ?? '-' }} {{ $cheque->customer->customer_name ?? '-' }} {{ $cheque->bank_name ?? '-' }} {{ $cheque->bankAccount->account_name ?? '-' }} {{ $cheque ? number_format($cheque->amount, 2) : '-' }}
No cheques recorded
Total: {{ number_format($settlement->cheques->sum('amount'), 2) }}
{{-- Bank Transfers --}}

Bank Transfers / Online From Customer

@if($maxRows2 > 0) @for($i = 0; $i < $maxRows2; $i++) @php $transfer = $settlement->bankTransfers->get($i); @endphp @endfor @else @endif
# Date CN Bank Ref # Amount
{{ $i + 1 }} {{ $transfer && $transfer->transfer_date ? \Carbon\Carbon::parse($transfer->transfer_date)->format('d-M-y') : '-' }} {{ $transfer->customer->customer_name ?? '-' }} {{ $transfer->bankAccount->account_name ?? '-' }} {{ $transfer->reference_number ?? '-' }} {{ $transfer ? number_format($transfer->amount, 2) : '-' }}
No bank transfers recorded
Total: {{ number_format($settlement->bankTransfers->sum('amount'), 2) }}
{{-- Expense Details Group --}}

Expense Details

{{-- Row 1: AMR Powder | AMR Liquid --}} @php $amrPowderCount = $settlement->amrPowders->count(); $amrLiquidCount = $settlement->amrLiquids->count(); $maxRowsAmr = max($amrPowderCount, $amrLiquidCount, 1); @endphp
{{-- AMR Powder --}}

AMR Powder (5252)

@for($i = 0; $i < $maxRowsAmr; $i++) @php $powder = $settlement->amrPowders->get($i); @endphp @endfor
# SKU Qty Amount
{{ $i + 1 }} {{ $powder?->product->product_name ?? '-' }} {{ $powder ? number_format($powder->quantity, 2) : '-' }} {{ $powder ? number_format($powder->amount, 2) : '-' }}
Total: {{ number_format($settlement->amrPowders->sum('amount'), 2) }}
{{-- AMR Liquid --}}

AMR Liquid (5262)

@for($i = 0; $i < $maxRowsAmr; $i++) @php $liquid = $settlement->amrLiquids->get($i); @endphp @endfor
# SKU Qty Amount
{{ $i + 1 }} {{ $liquid?->product->product_name ?? '-' }} {{ $liquid ? number_format($liquid->quantity, 2) : '-' }} {{ $liquid ? number_format($liquid->amount, 2) : '-' }}
Total: {{ number_format($settlement->amrLiquids->sum('amount'), 2) }}
{{-- Row 2: Advance Tax | Percentage Expense --}} @php $advTaxCount = $settlement->advanceTaxes->count(); $pctExpCount = $settlement->percentageExpenses->count(); $maxRowsTax = max($advTaxCount, $pctExpCount, 1); @endphp
{{-- Advance Tax --}}

Advance Tax Benifits To NTN Customer (1161)

@for($i = 0; $i < $maxRowsTax; $i++) @php $tax = $settlement->advanceTaxes->get($i); @endphp @endfor
# Customer Inv # Tax
{{ $i + 1 }} {{ $tax ? $tax->customer->customer_name . ' (' . $tax->customer->customer_code . ')' : '-' }} {{ $tax?->invoice_number ?? '-' }} {{ $tax ? number_format($tax->tax_amount, 2) : '-' }}
Total: {{ number_format($settlement->advanceTaxes->sum('tax_amount'), 2) }}
{{-- Percentage Expense --}}

Percentage Expense (5223)

@for($i = 0; $i < $maxRowsTax; $i++) @php $pctExp = $settlement->percentageExpenses->get($i); @endphp @endfor
# Customer Inv # Amount
{{ $i + 1 }} {{ $pctExp ? $pctExp->customer->customer_name . ' (' . $pctExp->customer->customer_code . ')' : '-' }} {{ $pctExp?->invoice_number ?? '-' }} {{ $pctExp ? number_format($pctExp->amount, 2) : '-' }}
Total: {{ number_format($settlement->percentageExpenses->sum('amount'), 2) }}
{{-- Other Expenses --}} @php // Dynamically resolve predefined expense account IDs from account codes $predefinedExpenseCodes = ['5272', '5252', '5262', '5292', '1161', '5282', '5223', '5221']; $predefinedAccountsMap = \App\Models\ChartOfAccount::whereIn('account_code', $predefinedExpenseCodes) ->pluck('id', 'account_code') ->toArray(); // Define predefined expense accounts in order (matching create/edit page) $predefinedExpenses = [ ['id' => $predefinedAccountsMap['5272'] ?? null, 'label' => 'Toll Tax', 'code' => '5272'], ['id' => $predefinedAccountsMap['5252'] ?? null, 'label' => 'AMR Powder', 'code' => '5252'], ['id' => $predefinedAccountsMap['5262'] ?? null, 'label' => 'AMR Liquid', 'code' => '5262'], ['id' => $predefinedAccountsMap['5292'] ?? null, 'label' => 'Scheme Discount Expense', 'code' => '5292'], ['id' => $predefinedAccountsMap['1161'] ?? null, 'label' => 'Advance Tax', 'code' => '1161'], ['id' => $predefinedAccountsMap['5282'] ?? null, 'label' => 'Food/Salesman/Loader Charges', 'code' => '5282'], ['id' => $predefinedAccountsMap['5223'] ?? null, 'label' => 'Percentage Expense', 'code' => '5223'], ['id' => $predefinedAccountsMap['5221'] ?? null, 'label' => 'Miscellaneous Expenses', 'code' => '5221'], ]; $predefinedIds = collect($predefinedExpenses)->pluck('id')->filter()->toArray(); // Codes that have detailed breakdowns shown in tables above $detailedBreakdownCodes = ['5252', '5262', '1161', '5223']; // Get saved expense amounts indexed by account ID $savedExpenseAmounts = $settlement->expenses->keyBy('expense_account_id'); // Get any additional expenses not in predefined list $additionalExpenses = $settlement->expenses->filter(function ($expense) use ($predefinedIds) { return !in_array($expense->expense_account_id, $predefinedIds); }); // Prepare Group Expenses Rows $groupExpenseRows = []; foreach ($predefinedExpenses as $predef) { $savedExpense = $savedExpenseAmounts->get($predef['id']); $amount = $savedExpense ? $savedExpense->amount : 0; $groupExpenseRows[] = [ 'label' => $predef['label'], 'code' => $predef['code'], 'amount' => $amount, 'is_predefined' => true, 'id' => $predef['id'] ]; } foreach ($additionalExpenses as $expense) { $groupExpenseRows[] = [ 'label' => $expense->expenseAccount->account_name ?? 'Unknown', 'code' => $expense->expenseAccount->account_code ?? '-', 'amount' => $expense->amount, 'is_predefined' => false ]; } // Prepare Cash Detail Rows $cashDetailRows = []; $denominations = [ ['label' => '5000', 'qty' => $cashDenominations?->denom_5000 ?? 0, 'value' => 5000], ['label' => '1000', 'qty' => $cashDenominations?->denom_1000 ?? 0, 'value' => 1000], ['label' => '500', 'qty' => $cashDenominations?->denom_500 ?? 0, 'value' => 500], ['label' => '100', 'qty' => $cashDenominations?->denom_100 ?? 0, 'value' => 100], ['label' => '50', 'qty' => $cashDenominations?->denom_50 ?? 0, 'value' => 50], ['label' => '20', 'qty' => $cashDenominations?->denom_20 ?? 0, 'value' => 20], ['label' => '10', 'qty' => $cashDenominations?->denom_10 ?? 0, 'value' => 10], ]; $calculatedCash = 0; foreach ($denominations as $d) { $rowVal = $d['qty'] * $d['value']; $calculatedCash += $rowVal; $cashDetailRows[] = [ 'label' => $d['label'], 'qty' => $d['qty'], 'value' => $rowVal, 'is_coin' => false ]; } // Add Coins $cashDetailRows[] = [ 'label' => 'Coins/Loose', 'qty' => '-', 'value' => $coins, 'is_coin' => true ]; $calculatedCash += $coins; // Max Rows for Equal Height $maxRowsExp = max(count($groupExpenseRows), count($cashDetailRows)); @endphp
{{-- End of Expense Details Group --}} {{-- Other Expenses & Cash Detail Row --}} {{-- Group 1: Expenses & Collections Detail --}}

Expenses & Cash/Bank Deposits Detail

{{-- 1. Group Expenses --}}

Group Expenses

@for($i = 0; $i < $maxRowsExp; $i++) @php $expRow = $groupExpenseRows[$i] ?? null; @endphp @if($expRow) @else @endif @endfor
# Expense Account COA Code Amount
{{ $i + 1 }}{{ $expRow['label'] }} @if(isset($expRow['is_predefined']) && $expRow['is_predefined'] && in_array($expRow['code'], $detailedBreakdownCodes)) {{ $expRow['code'] }} @else {{ $expRow['code'] }} @endif {{ number_format($expRow['amount'], 2) }}      
Total: {{ number_format($settlement->expenses->sum('amount'), 2) }}
{{-- 2. Cash Detail --}}

Cash Detail

@for($i = 0; $i < $maxRowsExp; $i++) @php $cashRow = $cashDetailRows[$i] ?? null; @endphp @if($cashRow) @else @endif @endfor
# Note Qty Value
{{ $i + 1 }}{{ $cashRow['label'] }} {{ $cashRow['qty'] }} {{ number_format($cashRow['value'], isset($cashRow['is_coin']) && $cashRow['is_coin'] ? 2 : 0) }}      
Total Physical Cash: {{ number_format($calculatedCash, 2) }}
{{-- 3. Bank Slips / Deposits --}}

Bank Slips / Deposits to Bank From Salesman

@php $slipCount = 0; @endphp @foreach($settlement->bankSlips as $index => $slip) @php $slipCount++; @endphp @endforeach {{-- Filler rows for height symmetry --}} @for($i = $slipCount + 1; $i <= $maxRowsExp; $i++) @endfor
# Bank Date Amount
{{ $index + 1 }} {{ $slip->bankAccount->account_name ?? '-' }} {{ $slip->deposit_date ? \Carbon\Carbon::parse($slip->deposit_date)->format('d-M-y') : '-' }} {{ number_format($slip->amount, 2) }}
       
Total Bank Slips: {{ number_format($settlement->bankSlips->sum('amount'), 2) }}
{{-- Financial Summary --}} {{-- Financial Summary --}} {{-- Financial Summary Grid --}} {{-- Group 2: Sales & Collection Summary --}}

Sales & Collection Summary

{{-- 1. Sales Summary --}}

Sales Summary

# Description Amount
1 Credit Sale Amount (Σ Credit sales entered on-credit invoices) {{ number_format($settlement->credit_sales_amount, 2) }}
2 Cheque Sale Amount (Σ Cheque payments collected from customers) {{ number_format($settlement->cheque_sales_amount, 2) }}
3 Bank Transfer Amount (Σ Direct bank / online transfers received) {{ number_format($settlement->bank_transfer_amount, 2) }}
4 Cash Sale Amount (Net Sale − Credit − Bank Transfers) {{ number_format($settlement->cash_sales_amount, 2) }}
5 Bank Slips / Deposits (Σ Cash deposited directly to bank by salesman) {{ number_format($settlement->bankSlips->sum('amount'), 2) }}
6 Net Sale (Sold Items Value) (Credit + Cheque + Bank + Cash) {{ number_format($netSale, 2) }}
7 Return Value (Σ Returned items × unit price) {{ number_format($settlement->sales_return_amount, 2) }}
8 Shortage Value (Σ Shortage items × unit price) {{ number_format($settlement->shortage_amount, 2) }}
9 Recovery (Cash) (Σ Previous credit balances recovered in cash) {{ number_format($recoveryCash, 2) }}
10 Recovery (Bank/Online) (Σ Previous credit balances recovered via bank) {{ number_format($recoveryBank, 2) }}
11 Total Sale Amount (= Row 6, total invoiced value) {{ number_format($netSale, 2) }}
12 Expected Cash (Sales + Cash Recoveries) (Row 4 + Row 9) {{ number_format($expectedCashGross, 2) }}
13 Less: Expenses (Σ Expenses paid by salesman from cash) {{ number_format($totalExpenses, 2) }}
14 Expected Cash (After Expenses) (Row 12 − Row 13) {{ number_format($expectedCashNet, 2) }}
15 Physical Cash Submitted (Denominations) (Σ Cash notes + coins) {{ number_format($calculatedCash, 2) }}
16 Short/Excess ((Cash + Cheques + Bank Slips) − Row 14) {{ number_format($shortExcess, 2) }}
 
{{-- 2. Profit Analysis --}}

Profit Analysis

{{-- Filler rows to match Sales Summary Height --}} @for($i = 8; $i <= 16; $i++) @endfor
# Description Amount
1 Net Sales Revenue (Sold Items) {{ number_format($netSale, 2) }}
2 Less: Cost of Goods Sold (COGS) {{ number_format($totalCOGS, 2) }}
3 Gross Profit (Sales - COGS) {{ number_format($grossProfit, 2) }}
4 Gross Margin % {{ number_format($grossMargin, 2) }}%
5 Less: Operating Expenses {{ number_format($totalExpenses, 2) }}
6 Net Profit (After Expenses) {{ number_format($netProfit, 2) }}
7 Net Margin % {{ number_format($netMargin, 2) }}%
     
 
{{-- Credit Report Section --}}
 
@php $employeeId = $settlement->employee_id; $settlementDate = $settlement->settlement_date; $customerAccounts = \App\Models\CustomerEmployeeAccount::with('customer') ->where('employee_id', $employeeId) ->where('status', 'active') ->get(); $settlementCredits = $settlement->creditSales->groupBy('customer_id'); $settlementRecoveries = $settlement->recoveries->groupBy('customer_id'); $isPosted = $settlement->status === 'posted'; $accountIds = $customerAccounts->pluck('id'); $balanceMap = \App\Models\CustomerEmployeeAccountTransaction::query() ->whereIn('customer_employee_account_id', $accountIds) ->whereDate('transaction_date', '<=', $settlementDate) ->groupBy('customer_employee_account_id') ->selectRaw('customer_employee_account_id, SUM(debit - credit) as balance') ->pluck('balance', 'customer_employee_account_id'); $creditReportData = $customerAccounts->map(function ($account) use ($settlement, $settlementDate, $settlementCredits, $settlementRecoveries, $isPosted, $balanceMap) { $customerId = $account->customer_id; $myCredits = $settlementCredits->get($customerId); $myRecoveries = $settlementRecoveries->get($customerId); $creditAmount = $myCredits ? $myCredits->sum('sale_amount') : 0; $recoveryAmount = $myRecoveries ? $myRecoveries->sum('amount') : 0; $hasActivity = ($creditAmount > 0 || $recoveryAmount > 0); if ($isPosted) { $closingBalance = (float) ($balanceMap[$account->id] ?? 0); $openingBalance = $closingBalance - $creditAmount + $recoveryAmount; } else { $openingBalance = (float) ($balanceMap[$account->id] ?? 0); $closingBalance = $openingBalance + $creditAmount - $recoveryAmount; } return (object) [ 'customer_name' => $account->customer->customer_name, 'customer_code' => $account->customer->customer_code, 'address' => $account->customer->address, 'date' => $settlementDate, 'opening_balance' => $openingBalance, 'credit_amount' => $creditAmount, 'recovery_amount' => $recoveryAmount, 'balance' => $closingBalance, 'has_activity' => $hasActivity || abs($closingBalance) > 1 ]; })->filter(function ($row) { return $row->has_activity; })->sortBy('customer_name'); $totalCreditGiven = $creditReportData->sum('credit_amount'); $totalRecoveryReceived = $creditReportData->sum('recovery_amount'); $totalClosingBalance = $creditReportData->sum('balance'); @endphp

Credit Report: {{ $settlement->employee->name ?? 'Salesman' }} ({{ \Carbon\Carbon::parse($settlementDate)->format('d-M-Y') }})

@forelse($creditReportData as $index => $row) @empty @endforelse
# Party Name Code Opening Balance Credit Amount Recovery Amount Closing Balance
{{ $loop->iteration }} {{ $row->customer_name }}{{ $row->address ? ' (' . $row->address . ')' : '' }} {{ $row->customer_code }} {{ number_format($row->opening_balance, 2) }} {{ $row->credit_amount > 0 ? number_format($row->credit_amount, 2) : '-' }} {{ $row->recovery_amount > 0 ? number_format($row->recovery_amount, 2) : '-' }} {{ number_format($row->balance, 2) }}
No active creditors found for this date.
Total (This Settlement): {{ number_format($totalCreditGiven, 2) }} {{ number_format($totalRecoveryReceived, 2) }} {{ number_format($totalClosingBalance, 2) }}
@if ($settlement->notes)

Notes

{{ $settlement->notes }}

@endif @if ($settlement->posted_at)
Posted on {{ $settlement->posted_at->format('d M Y, h:i A') }} @if ($settlement->journalEntry) | Journal Entry: {{ $settlement->journalEntry->entry_number }} @endif
@endif {{-- Final Signature Area --}}

Prepared By

Checked By

Authorized Signature

@if ($settlement->status === 'draft') @can('sales-settlement-post')

Once posted, this settlement will update ledger balances and inventory records.

Settlement #: {{ $settlement->settlement_number }}

Date: {{ $settlement->settlement_date?->format('d-M-Y') ?? '-' }}

Salesman: {{ $settlement->employee?->name ?? '-' }}

Total Sales: {{ number_format((float) ($settlement->total_sales_amount ?? 0), 2) }}

Do you want to continue?

@endcan @can('sales-settlement-delete')

This will permanently remove this draft sales settlement and all its draft line data.

Settlement #: {{ $settlement->settlement_number }}

Date: {{ $settlement->settlement_date?->format('d-M-Y') ?? '-' }}

Salesman: {{ $settlement->employee?->name ?? '-' }}

Status: {{ strtoupper($settlement->status) }}

This action cannot be undone.

@endcan @endif @if ($settlement->status === 'posted') @can('sales-settlement-revert') @endcan @endif