mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/exchange-2.0.git
synced 2026-08-19 04:23:55 +00:00
207 lines
8.1 KiB
PHP
207 lines
8.1 KiB
PHP
<table class="line-table" style="overflow: wrap" autosize="1">
|
|
<!-- Table Header -->
|
|
<thead>
|
|
<tr>
|
|
<th width="5%">No</th>
|
|
<th class="stock-code" width="10%">Stock Code</th>
|
|
<th class="description">Description</th>
|
|
<th width="10%">Quantity</th>
|
|
<th width="15%">Unit Price (RM)</th>
|
|
<th width="10%">Total Amount<br>(RM)</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@php
|
|
$subtotal = "0";
|
|
$voucherDiscount = $voucher_redemption ? bcmul((string)$voucher_redemption->value, "-1", 2) : "0";
|
|
$displayedSubtotal = 0;
|
|
$currency_id = $transaction->owner->fix_currency_id;
|
|
@endphp
|
|
|
|
<?php
|
|
|
|
use App\Classes\Modules\Bookings\Services\CalculatesBookingRefundAmount;
|
|
use App\Classes\Modules\Bookings\Services\CalculatesBookingRefundServiceCharge;
|
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
|
use App\Classes\ValueObjects\Constants\TransactionType;
|
|
|
|
$booking = $po_order_transaction->owner ?? $booking;
|
|
$paymentSum = $booking->transactions()
|
|
->where('type', TransactionType::PAYMENT)
|
|
->where('status', ApprovalStatus::COMPLETED)
|
|
->get()
|
|
->sum(function ($transaction) {
|
|
return round($transaction->amount, 2);
|
|
});
|
|
|
|
$totalPayment = 0;
|
|
$average_currency_rate = $transaction->currency_rate;
|
|
|
|
$paymentSumRefund = 0;
|
|
if ($paymentSum){
|
|
$average_currency_rate = $booking->transactions()
|
|
->where('type', TransactionType::PAYMENT)
|
|
->where('status', ApprovalStatus::COMPLETED)
|
|
->get()
|
|
->sum(function ($transaction) {
|
|
return $transaction->currency_rate;
|
|
}) / $booking->transactions()
|
|
->where('type', TransactionType::PAYMENT)
|
|
->where('status', ApprovalStatus::COMPLETED)
|
|
->count();
|
|
|
|
$refundedAmount = (App()->make(CalculatesBookingRefundAmount::class))->execute($booking, 1);
|
|
$refundedServiceCharge = (App()->make(CalculatesBookingRefundServiceCharge::class))->execute($booking, 1);
|
|
|
|
$totalPayment = $paymentSum - $refundedAmount - $refundedServiceCharge;
|
|
}
|
|
else{
|
|
$paymentSumRefund = $booking->transactions()
|
|
->where('type', TransactionType::PAYMENT)
|
|
->where('status', ApprovalStatus::REFUNDED)
|
|
->get()
|
|
->sum(function ($transaction) {
|
|
return round($transaction->amount, 2);
|
|
});
|
|
}
|
|
?>
|
|
|
|
@if (!empty($po_order_transaction) && $po_order_transaction->transactionDetails)
|
|
@foreach ($po_order_transaction->transactionDetails as $key => $transaction_detail)
|
|
@php
|
|
$exactUnitPrice = ($currency_id) === 1 ? $transaction_detail->price : bcdiv($transaction_detail->price, $average_currency_rate, 7);
|
|
$displayUnitPrice = round($exactUnitPrice, 2);
|
|
$itemTotal = bcmul($exactUnitPrice, $transaction_detail->quantity, 5);
|
|
$displayedItemTotal = round(bcmul($displayUnitPrice, $transaction_detail->quantity, 7), 2);
|
|
$displayedSubtotal = bcadd($displayedSubtotal, $displayedItemTotal, 2);
|
|
$subtotal = bcadd($subtotal, $itemTotal, 5);
|
|
@endphp
|
|
<tr>
|
|
<td width="5%" class="center top">{{ $key + 1 }}</td>
|
|
<td class="stock-code top" width="10%">{{ $transaction_detail->product_code }}</td>
|
|
<td class="description">{{ $transaction_detail->product_name }}</td>
|
|
<td width="10%" class="center top">{{ $transaction_detail->quantity }}</td>
|
|
<td width="15%" class="center top">
|
|
{{ number_format($displayUnitPrice, 2) }}
|
|
</td>
|
|
<td width="20%" class="right top">
|
|
{{ number_format($displayedItemTotal, 2) }}
|
|
</td>
|
|
</tr>
|
|
@endforeach
|
|
@else
|
|
@if ($paymentSumRefund)
|
|
<tr>
|
|
<td width="5%" class="center top"></td>
|
|
<td class="stock-code top" width="10%"></td>
|
|
<td class="description">CANCEL FULL ORDER</td>
|
|
<td width="10%" class="center top"></td>
|
|
<td width="15%" class="center top"></td>
|
|
<td width="20%" class="right top"></td>
|
|
</tr>
|
|
@endif
|
|
@endif
|
|
</tbody>
|
|
<tfoot>
|
|
@php
|
|
$subtotalWithDiscount = bcsub($subtotal, $voucherDiscount, 5);
|
|
if (!$totalPayment) {
|
|
$serviceCharge = $transaction->service_charge;
|
|
}
|
|
else {
|
|
$serviceCharge = $booking->transactions()
|
|
->where('type', TransactionType::PAYMENT)
|
|
->where('status', ApprovalStatus::COMPLETED)
|
|
->get()
|
|
->sum(function ($transaction) {
|
|
return $transaction->service_charge;
|
|
});
|
|
}
|
|
if ($paymentSumRefund && $displayedSubtotal === 0){
|
|
$subtotal = bcsub($paymentSumRefund, $serviceCharge, 5);
|
|
$displayedSubtotal = bcsub($paymentSumRefund, $serviceCharge, 2);
|
|
}
|
|
@endphp
|
|
<tr class="subtotal">
|
|
<td colspan="4"></td>
|
|
<td class="right middle">Subtotal</td>
|
|
<td class="right middle">{{ number_format($displayedSubtotal, 2) }}</td>
|
|
</tr>
|
|
<tr class="billingcharges">
|
|
<td colspan="4"></td>
|
|
<td class="right">Service Charges</td>
|
|
<td class="right">{{ number_format($serviceCharge, 2) }}</td>
|
|
</tr>
|
|
@if($totalPayment && $refundedServiceCharge)
|
|
<tr class="billingcharges">
|
|
<td colspan="4"></td>
|
|
<td class="right">Refunded Service Charges</td>
|
|
<?php
|
|
// if has payment, calculate and deduct the refund
|
|
if ($totalPayment) {
|
|
$serviceCharge = $serviceCharge - $refundedServiceCharge;
|
|
}
|
|
?>
|
|
<td class="right">-{{ number_format($refundedServiceCharge, 2) }}</td>
|
|
</tr>
|
|
@endif
|
|
@if($voucher_redemption)
|
|
<tr class="voucher">
|
|
<td colspan="4"></td>
|
|
<td class="right middle">Voucher ({{ $voucher_redemption->voucher->code }})</td>
|
|
<td class="right middle">{{ number_format($voucherDiscount, 2) }}</td>
|
|
</tr>
|
|
@endif
|
|
|
|
@if($transaction->tax > 0)
|
|
<tr class="billingcharges">
|
|
<td colspan="4"></td>
|
|
<td class="right">Tax</td>
|
|
<td class="right">{{ number_format($transaction->tax, 2) }}</td>
|
|
</tr>
|
|
@endif
|
|
@php
|
|
$displayedSubtotal = is_numeric($displayedSubtotal) ? sprintf('%F', $displayedSubtotal) : '0';
|
|
$serviceCharge = is_numeric($serviceCharge) ? sprintf('%F', $serviceCharge) : '0';
|
|
$tax = is_numeric($transaction->tax) ? sprintf('%F', $transaction->tax) : '0';
|
|
$voucherDiscount = is_numeric($voucherDiscount) ? sprintf('%F', $voucherDiscount) : '0';
|
|
|
|
$displayedTotal = bcadd(
|
|
bcadd(
|
|
bcadd($displayedSubtotal, $serviceCharge, 5),
|
|
$tax,
|
|
5
|
|
),
|
|
$voucherDiscount,
|
|
5
|
|
);
|
|
|
|
$expectedTotal = bcadd(bcadd(bcadd($subtotal, $serviceCharge, 5), $transaction->tax, 5), $voucherDiscount, 5);
|
|
$discrepancy = bcsub($expectedTotal, $displayedTotal, 5);
|
|
$total = bcadd(bcadd(bcadd($subtotal, $serviceCharge, 5), $transaction->tax, 5), $voucherDiscount, 5);
|
|
|
|
if ($totalPayment) {
|
|
$expectedTotal = $totalPayment;
|
|
$discrepancy = bcsub($expectedTotal, $displayedTotal, 5);
|
|
$total = $totalPayment;
|
|
}
|
|
|
|
if($paymentSumRefund){
|
|
$total = $paymentSumRefund;
|
|
}
|
|
@endphp
|
|
<tr>
|
|
<td colspan="4"></td>
|
|
<td class="right middle">Adjustment</td>
|
|
<td class="right middle">{{number_format($discrepancy, 5)}}</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="4"></td>
|
|
<td class="right middle">Total</td>
|
|
<td class="total right middle">
|
|
{{ number_format($total, 2) }}
|
|
</td>
|
|
</tr>
|
|
</tfoot>
|
|
</table>
|