diff --git a/resources/views/pages/pdfs/deliver_order.blade.php b/resources/views/pages/pdfs/deliver_order.blade.php index ba30bc68..b58fd066 100644 --- a/resources/views/pages/pdfs/deliver_order.blade.php +++ b/resources/views/pages/pdfs/deliver_order.blade.php @@ -69,6 +69,7 @@

+ @@ -81,34 +82,37 @@ @php - $subtotal = 0; - $voucher_redemption = isset($voucher_redemption) ? $voucher_redemption : null; - $voucherDiscount = $voucher_redemption ? $voucher_redemption->value * -1 : 0; - $currencyRate = $transaction->currency_rate; + $subtotal = calculateSubtotal($po_order_transaction, $transaction->currency_rate); + $voucherDiscount = getVoucherDiscount($voucher_redemption); + $displayedSubtotal = 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); + $displayedSubtotal = bcadd($displayedSubtotal, $displayedItemTotal, 2); + @endphp @endforeach + @php + $voucherDiscount = getVoucherDiscount($voucher_redemption); + $subtotalWithDiscount = bcsub($subtotal, $voucherDiscount, 5); // Use bcsub to subtract + @endphp @@ -117,27 +121,17 @@ - + + @if($voucher_redemption) - + @endif - - - - - + @if($transaction->tax > 0) @@ -145,13 +139,21 @@ @endif + @php + $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 + @endphp + + + + + @@ -165,4 +167,28 @@
No
{{ $key + 1 }} {{ $transaction_detail->product_code }} {{ $transaction_detail->product_name }} {{ $transaction_detail->quantity }} - @php - $unitPrice = $transaction_detail->price / $currencyRate; - @endphp - {{ number_format($unitPrice, 2) }} + {{ number_format($exactUnitPrice, 2) }} - @php - $itemTotal = $unitPrice * $transaction_detail->quantity; - $subtotal += $itemTotal; - @endphp {{ number_format($itemTotal, 2) }}
Subtotal
Service Charges - {{ number_format($transaction->service_charge, 2) }} - {{ number_format($transaction->service_charge, 2) }}
Voucher ({{ $voucher_redemption->voucher->code }})-{{ $voucherDiscount }}-{{ number_format($voucherDiscount, 2) }}
Adjustment - @php - $adjustment = $transaction->amount - $subtotal; - @endphp - {{ number_format($adjustment, 2) }} -
{{ number_format($transaction->tax, 2) }}
Adjustment{{ roundUp($discrepancy,2) }}
Total - @php - $total = $subtotal + $transaction->service_charge + $transaction->tax + $voucherDiscount; - @endphp {{ number_format($total, 2) }}
+ @php + function calculateSubtotal($po_order_transaction, $currencyRate) { + $subtotal = "0"; + foreach ($po_order_transaction->transactionDetails as $transaction_detail) { + $unitPrice = bcdiv((string)$transaction_detail->price, (string)$currencyRate, 5); + $itemTotal = bcmul($unitPrice, (string)$transaction_detail->quantity, 5); + $subtotal = bcadd($subtotal, $itemTotal, 5); + } + return $subtotal; + } + + function getVoucherDiscount($voucher_redemption) { + return $voucher_redemption ? bcmul((string)$voucher_redemption->value, "-1", 2) : "0"; + } + function roundUp($number, $decimals) { + $factor = pow(10, $decimals); + if ($number > 0) { + return ceil($number * $factor) / $factor; + } else { + return floor($number * $factor) / $factor; + } + } + + @endphp @endsection diff --git a/resources/views/pages/pdfs/invoice.blade.php b/resources/views/pages/pdfs/invoice.blade.php index b35fe67e..066fb971 100644 --- a/resources/views/pages/pdfs/invoice.blade.php +++ b/resources/views/pages/pdfs/invoice.blade.php @@ -134,11 +134,6 @@ $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 -// $displayedTotal = -// ((float) number_format($subtotal, 2)) + -// ((float) number_format($transaction->service_charge, 2)) + -// ((float) number_format($voucherDiscount, 2)) + -// ((float) number_format($transaction->tax, 2)); @endphp diff --git a/resources/views/pages/pdfs/purchase_order.blade.php b/resources/views/pages/pdfs/purchase_order.blade.php index 79841363..220b0ae5 100644 --- a/resources/views/pages/pdfs/purchase_order.blade.php +++ b/resources/views/pages/pdfs/purchase_order.blade.php @@ -77,6 +77,7 @@
+ @@ -89,34 +90,37 @@ @php - $subtotal = 0; - $voucher_redemption = isset($voucher_redemption) ? $voucher_redemption : null; - $voucherDiscount = $voucher_redemption ? $voucher_redemption->value * -1 : 0; - $currencyRate = $transaction->currency_rate; + $subtotal = calculateSubtotal($po_order_transaction, $transaction->currency_rate); + $voucherDiscount = getVoucherDiscount($voucher_redemption); + $displayedSubtotal = 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); + $displayedSubtotal = bcadd($displayedSubtotal, $displayedItemTotal, 2); + @endphp @endforeach + @php + $voucherDiscount = getVoucherDiscount($voucher_redemption); + $subtotalWithDiscount = bcsub($subtotal, $voucherDiscount, 5); // Use bcsub to subtract + @endphp @@ -125,27 +129,17 @@ - + + @if($voucher_redemption) - + @endif - - - - - + @if($transaction->tax > 0) @@ -153,13 +147,21 @@ @endif + @php + $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 + @endphp + + + + + @@ -173,4 +175,28 @@
No
{{ $key + 1 }} {{ $transaction_detail->product_code }} {{ $transaction_detail->product_name }} {{ $transaction_detail->quantity }} - @php - $unitPrice = $transaction_detail->price / $currencyRate; - @endphp - {{ number_format($unitPrice, 2) }} + {{ number_format($exactUnitPrice, 2) }} - @php - $itemTotal = $unitPrice * $transaction_detail->quantity; - $subtotal += $itemTotal; - @endphp {{ number_format($itemTotal, 2) }}
Subtotal
Service Charges - {{ number_format($transaction->service_charge, 2) }} - {{ number_format($transaction->service_charge, 2) }}
Voucher ({{ $voucher_redemption->voucher->code }})-{{ $voucherDiscount }}-{{ number_format($voucherDiscount, 2) }}
Adjustment - @php - $adjustment = $transaction->amount - $subtotal; - @endphp - {{ number_format($adjustment, 2) }} -
{{ number_format($transaction->tax, 2) }}
Adjustment{{ roundUp($discrepancy,2) }}
Total - @php - $total = $subtotal + $transaction->service_charge + $transaction->tax + $voucherDiscount; - @endphp {{ number_format($total, 2) }}
+ @php + function calculateSubtotal($po_order_transaction, $currencyRate) { + $subtotal = "0"; + foreach ($po_order_transaction->transactionDetails as $transaction_detail) { + $unitPrice = bcdiv((string)$transaction_detail->price, (string)$currencyRate, 5); + $itemTotal = bcmul($unitPrice, (string)$transaction_detail->quantity, 5); + $subtotal = bcadd($subtotal, $itemTotal, 5); + } + return $subtotal; + } + + function getVoucherDiscount($voucher_redemption) { + return $voucher_redemption ? bcmul((string)$voucher_redemption->value, "-1", 2) : "0"; + } + function roundUp($number, $decimals) { + $factor = pow(10, $decimals); + if ($number > 0) { + return ceil($number * $factor) / $factor; + } else { + return floor($number * $factor) / $factor; + } + } + + @endphp @endsection