diff --git a/resources/views/pages/pdfs/deliver_order.blade.php b/resources/views/pages/pdfs/deliver_order.blade.php index 715244c7..e957c0f0 100644 --- a/resources/views/pages/pdfs/deliver_order.blade.php +++ b/resources/views/pages/pdfs/deliver_order.blade.php @@ -84,17 +84,22 @@ @php $subtotal = "0"; - $voucherDiscount = $voucher_redemption ? bcmul((string)$voucher_redemption->value, "-1", 2) : "0"; - $displayedSubtotal = 0; + $voucherDiscount = $voucher_redemption ? bcmul((string)$voucher_redemption->value, "-1", 5) : "0"; + $displayedSubtotal = "0"; + $exactTotal = "0"; @endphp @foreach ($po_order_transaction->transactionDetails as $key => $transaction_detail) @php $exactUnitPrice = bcdiv($transaction_detail->price, $transaction->currency_rate, 5); $itemTotal = bcmul($exactUnitPrice, $transaction_detail->quantity, 5); - $displayedItemTotal = bcmul($exactUnitPrice, $transaction_detail->quantity, 2); + + // Round half to even for displayed item total + $displayedItemTotal = round(bcmul($exactUnitPrice, $transaction_detail->quantity, 2), 2, PHP_ROUND_HALF_EVEN); + $displayedSubtotal = bcadd($displayedSubtotal, $displayedItemTotal, 2); - $subtotal = bcadd($subtotal, $displayedItemTotal, 2); + $subtotal = bcadd($subtotal, $itemTotal, 5); + $exactTotal = bcadd($exactTotal, $displayedItemTotal, 5); @endphp {{ $key + 1 }} @@ -112,7 +117,7 @@ @php - $subtotalWithDiscount = bcsub($subtotal, $voucherDiscount, 5); // Use bcsub to subtract + $subtotalWithDiscount = bcsub($subtotal, $voucherDiscount, 5); @endphp @@ -141,10 +146,17 @@ @endif @php - $displayedTotal = bcadd(bcadd(bcadd($displayedSubtotal, $transaction->service_charge, 2), $transaction->tax, 2), $voucherDiscount, 2); + // Calculate the totals with 5 decimal places $expectedTotal = bcadd(bcadd(bcadd($subtotal, $transaction->service_charge, 5), $transaction->tax, 5), $voucherDiscount, 5); - $discrepancy = bcsub($displayedTotal, $expectedTotal, 5); - $total = bcadd(bcadd(bcadd($subtotal, $transaction->service_charge, 5), $transaction->tax, 5), $voucherDiscount, 5); // Keep precision + + // Calculate the displayed totals with 2 decimal places + $displayedTotal = bcadd(bcadd(bcadd($displayedSubtotal, $transaction->service_charge, 2), $transaction->tax, 2), $voucherDiscount, 2); + + // Calculate the discrepancy + $discrepancy = bcsub($expectedTotal, $displayedTotal, 5); + + // Calculate the final total + $total = bcadd($expectedTotal, $discrepancy, 5); @endphp diff --git a/resources/views/pages/pdfs/invoice.blade.php b/resources/views/pages/pdfs/invoice.blade.php index db6c42c5..40706ce0 100644 --- a/resources/views/pages/pdfs/invoice.blade.php +++ b/resources/views/pages/pdfs/invoice.blade.php @@ -73,17 +73,22 @@ @php $subtotal = "0"; - $voucherDiscount = $voucher_redemption ? bcmul((string)$voucher_redemption->value, "-1", 2) : "0"; - $displayedSubtotal = 0; + $voucherDiscount = $voucher_redemption ? bcmul((string)$voucher_redemption->value, "-1", 5) : "0"; + $displayedSubtotal = "0"; + $exactTotal = "0"; @endphp @foreach ($po_order_transaction->transactionDetails as $key => $transaction_detail) @php - $exactUnitPrice = bcdiv($transaction_detail->price, $transaction->currency_rate, 7); + $exactUnitPrice = bcdiv($transaction_detail->price, $transaction->currency_rate, 5); $itemTotal = bcmul($exactUnitPrice, $transaction_detail->quantity, 5); - $displayedItemTotal = bcmul($exactUnitPrice, $transaction_detail->quantity, 2); + + // Round half to even for displayed item total + $displayedItemTotal = round(bcmul($exactUnitPrice, $transaction_detail->quantity, 2), 2, PHP_ROUND_HALF_EVEN); + $displayedSubtotal = bcadd($displayedSubtotal, $displayedItemTotal, 2); $subtotal = bcadd($subtotal, $itemTotal, 5); + $exactTotal = bcadd($exactTotal, $displayedItemTotal, 5); @endphp {{ $key + 1 }} @@ -130,10 +135,17 @@ @endif @php - $displayedTotal = bcadd(bcadd(bcadd($subtotal, $transaction->service_charge, 5), $transaction->tax, 5), $voucherDiscount, 5); + // Calculate the totals with 5 decimal places $expectedTotal = bcadd(bcadd(bcadd($subtotal, $transaction->service_charge, 5), $transaction->tax, 5), $voucherDiscount, 5); - $discrepancy = bcsub($displayedTotal, $expectedTotal, 5); - $total = bcadd(bcadd(bcadd($subtotal, $transaction->service_charge, 5), $transaction->tax, 5), $voucherDiscount, 5); + + // Calculate the displayed totals with 2 decimal places + $displayedTotal = bcadd(bcadd(bcadd($displayedSubtotal, $transaction->service_charge, 2), $transaction->tax, 2), $voucherDiscount, 2); + + // Calculate the discrepancy + $discrepancy = bcsub($expectedTotal, $displayedTotal, 5); + + // Calculate the final total + $total = bcadd($expectedTotal, $discrepancy, 5); @endphp diff --git a/resources/views/pages/pdfs/purchase_order.blade.php b/resources/views/pages/pdfs/purchase_order.blade.php index e0c9582f..3e79691a 100644 --- a/resources/views/pages/pdfs/purchase_order.blade.php +++ b/resources/views/pages/pdfs/purchase_order.blade.php @@ -91,15 +91,22 @@ @php $subtotal = "0"; - $displayedSubtotal = 0; + $voucherDiscount = $voucher_redemption ? bcmul((string)$voucher_redemption->value, "-1", 5) : "0"; + $displayedSubtotal = "0"; + $exactTotal = "0"; @endphp @foreach ($po_order_transaction->transactionDetails as $key => $transaction_detail) @php $exactUnitPrice = bcdiv($transaction_detail->price, $transaction->currency_rate, 5); $itemTotal = bcmul($exactUnitPrice, $transaction_detail->quantity, 5); - $displayedItemTotal = bcmul($exactUnitPrice, $transaction_detail->quantity, 2); + + // Round half to even for displayed item total + $displayedItemTotal = round(bcmul($exactUnitPrice, $transaction_detail->quantity, 2), 2, PHP_ROUND_HALF_EVEN); + $displayedSubtotal = bcadd($displayedSubtotal, $displayedItemTotal, 2); + $subtotal = bcadd($subtotal, $itemTotal, 5); + $exactTotal = bcadd($exactTotal, $displayedItemTotal, 5); @endphp {{ $key + 1 }} @@ -117,13 +124,7 @@ @php - $voucherDiscount = $voucher_redemption ? bcmul((string)$voucher_redemption->value, "-1", 2) : "0"; - $subtotalWithDiscount = bcsub($subtotal, $voucherDiscount, 5); // Use bcsub to subtract - $displayedTotal = bcadd(bcadd(bcadd($displayedSubtotal, $transaction->service_charge, 2), $transaction->tax, 2), $voucherDiscount, 2); - $expectedTotal = bcadd(bcadd(bcadd($subtotal, $transaction->service_charge, 5), $transaction->tax, 5), $voucherDiscount, 5); - $discrepancy = bcsub($displayedTotal, $expectedTotal, 5); - $total = bcadd(bcadd(bcadd($subtotal, $transaction->service_charge, 5), $transaction->tax, 5), $voucherDiscount, 5); // Keep precision - $subtotal = bcadd($subtotal, $displayedItemTotal, 2); + $subtotalWithDiscount = bcsub($subtotal, $voucherDiscount, 5); @endphp @@ -151,7 +152,19 @@ {{ number_format($transaction->tax, 2) }} @endif + @php + // Calculate the totals with 5 decimal places + $expectedTotal = bcadd(bcadd(bcadd($subtotal, $transaction->service_charge, 5), $transaction->tax, 5), $voucherDiscount, 5); + // Calculate the displayed totals with 2 decimal places + $displayedTotal = bcadd(bcadd(bcadd($displayedSubtotal, $transaction->service_charge, 2), $transaction->tax, 2), $voucherDiscount, 2); + + // Calculate the discrepancy + $discrepancy = bcsub($expectedTotal, $displayedTotal, 5); + + // Calculate the final total + $total = bcadd($expectedTotal, $discrepancy, 5); + @endphp Adjustment