Merge branch 'dillon/74-admin-workflow-2-20250228' into vapor/development

This commit is contained in:
Dillon Ngo
2025-03-03 15:31:45 +08:00
11 changed files with 42 additions and 35 deletions
@@ -106,6 +106,7 @@ class CreateBookingPaymentProcessor
* @param string|null $voucherCode
* @param string|null $bankCode
* @param string $email
* @param bool $checkSysRecordedOutstanding
* @return Transaction
* @throws MalformedRequestException
*/
@@ -7,7 +7,7 @@ use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Questionnaires\Standards\Rules\CanFetchQuestion;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\Modules\Bookings\Services\FetchesBooking;
use App\Http\Resources\BookingBaseResource;
use App\Http\Resources\BookingAdminWorkflowResource;
use App\Models\Booking;
use App\Models\KeyValuePair;
use Carbon\Carbon;
@@ -75,13 +75,16 @@ class FetchAdminWF1688BookingLogic extends AbstractControllerLogic
$booking = Booking::where('service_id', $serviceId)
->where('status', ApprovalStatus::APPROVED)
->whereNotIn('id', $excludedBookingIds)
->whereHas('bills', function ($query) {
$query->whereHas('groupTransaction', function ($query) {
$query->whereHas('group', function ($query) {
$query->whereDoesntHave('billGroup')->whereIn('issuer', [2]);
});
});
->whereHas('transactions', function ($query) {
$query->payments()->whereIn('status', [ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]);
})
// ->whereHas('bills', function ($query) {
// $query->whereHas('groupTransaction', function ($query) {
// $query->whereHas('group', function ($query) {
// $query->whereDoesntHave('billGroup')->whereIn('issuer', [2]);
// });
// });
// })
->where('created_at', '>=', $timeAgo)
->latest()
->first();
@@ -103,9 +106,9 @@ class FetchAdminWF1688BookingLogic extends AbstractControllerLogic
// ]);
// return responseJson([
// 'booking' => new BookingBaseResource($booking)
// 'booking' => new BookingAdminWorkflowResource($booking)
// ]);
return $this->resourceResponse(new BookingBaseResource($booking));
return $this->resourceResponse(new BookingAdminWorkflowResource($booking));
}
}
@@ -7,7 +7,7 @@ use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Questionnaires\Standards\Rules\CanFetchQuestion;
use App\Classes\ValueObjects\Constants\BookingAttributeNames;
use App\Classes\Modules\Bookings\Services\FetchesBooking;
use App\Http\Resources\BookingBaseResource;
use App\Http\Resources\BookingAdminWorkflowResource;
use App\Http\Resources\BookingResource;
use App\Models\Booking;
use ErrorException;
@@ -76,7 +76,7 @@ class FetchAdminWFModelAttributesLogic extends AbstractControllerLogic
// 'total_amount' =>$transaction->currency->short_code . ' ' . number_format((float)$transaction->amount, 2, '.', '')
// ]);
return $this->resourceResponse(new BookingBaseResource($booking));
return $this->resourceResponse(new BookingAdminWorkflowResource($booking));
}
}
@@ -8,7 +8,7 @@ use App\Classes\Modules\Questionnaires\Standards\Rules\CanFetchQuestion;
use App\Classes\Modules\Bookings\Services\FetchesBooking;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\TransactionType;
use App\Http\Resources\BookingBaseResource;
use App\Http\Resources\BookingAdminWorkflowResource;
use App\Http\Resources\BookingResource;
use App\Models\KeyValuePair;
use Carbon\Carbon;
@@ -87,13 +87,13 @@ class FetchAdminWFPendingApprovalPOLogic extends AbstractControllerLogic
markedProcessing($booking, 'approve_po_admin_workflow_processing');
// $result = new BookingBaseResource($booking);
// $result = new BookingAdminWorkflowResource($booking);
// return responseJson([
// 'booking' => $result,
// ]);
// return $booking ? responseJson(new BookingBaseResource($booking)) : responseJson(null, 'No booking found', 404);
// return $booking ? responseJson(new BookingAdminWorkflowResource($booking)) : responseJson(null, 'No booking found', 404);
return $this->resourceResponse(new BookingBaseResource($booking));
return $this->resourceResponse(new BookingAdminWorkflowResource($booking));
}
}
@@ -8,7 +8,7 @@ use App\Classes\Modules\Questionnaires\Standards\Rules\CanFetchQuestion;
use App\Classes\Modules\Bookings\Services\FetchesBooking;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\TransactionType;
use App\Http\Resources\BookingBaseResource;
use App\Http\Resources\BookingAdminWorkflowResource;
use App\Models\KeyValuePair;
use Carbon\Carbon;
use App\Models\Booking;
@@ -84,13 +84,13 @@ class FetchAdminWFPendingFillPOLogic extends AbstractControllerLogic
markedProcessing($booking, 'fill_po_admin_workflow_processing');
// $result = new BookingBaseResource($booking);
// $result = new BookingAdminWorkflowResource($booking);
// return responseJson([
// 'booking' => $result,
// ]);
// return $booking ? responseJson(new BookingResource($booking)) : responseJson(null, 'No booking found', 404);
return $this->resourceResponse(new BookingBaseResource($booking));
return $this->resourceResponse(new BookingAdminWorkflowResource($booking));
}
}
@@ -13,7 +13,7 @@ use App\Classes\ValueObjects\Constants\BookingAttributeNames;
use Illuminate\Http\Resources\Json\JsonResource;
use Carbon\Carbon;
class BookingBaseResource extends JsonResource
class BookingAdminWorkflowResource extends JsonResource
{
/**
* Transform the resource into an array.
@@ -30,7 +30,7 @@ class BookingBaseResource extends JsonResource
'bank' => new BankResource($this->bank),
'service' => new ServiceTypeResource($this->service),
'marking' => $this->marking,
// 'amount' => $this->fix_amount,
'amount' => $this->fix_amount,
// 'floating_amount' => floatval((App()->make(CalculatesBookingFloatingAmount::class))->execute($this->resource, $this->fix_currency_id)),
'paid_amount' => floatval((App()->make(CalculatesBookingPayableAmount::class))->execute($this->resource, $this->fix_currency_id)) - floatval((App()->make(CalculatesBookingRefundAmount::class))->execute($this->resource, $this->fix_currency_id)),
// 'outstanding_amount' => floatval((App()->make(CalculatesBookingOutstanding::class))->execute($this->resource)),
+5 -5
View File
@@ -128,7 +128,7 @@ class QAWorkFlowSeeder extends Seeder
[
'question_number' => '1688_order_verify',
'question_title' => 'Order Amount (CNY)',
'question_description' => 'Please key in the order amount',
'question_description' => 'Please confirm whether the order amount on 1688 matches the total order amount',
'question_' => 'Order Amount',
'question_type' => QAType::FLOAT_MONEY,
'next_nested_question' => '1688_order_verification',
@@ -296,7 +296,7 @@ class QAWorkFlowSeeder extends Seeder
[
'question_number' => '1688_underpaid_order_2',
'question_title' => 'Underpaid Order',
'question_description' => 'Insufficient wallet balance. Refund request to be sent',
'question_description' => 'Insufficient wallet balance. Refund request sent.',
'question_type' => QAType::MULTIPLE_CHOICES,
'is_start' => false,
'is_end' => false,
@@ -316,16 +316,16 @@ class QAWorkFlowSeeder extends Seeder
// ['display_text' => 'Done', 'value' => '1688_issue_submit', 'next_question_number' => '1688_issue_submit'],
// ],
// 'group' => '1688',
// ],
// ],
[
'question_number' => '1688_overpaid_order',
'question_title' => 'Overpaid Order',
'question_description' => 'Exceeded amount to be refunded to customers wallet',
'question_description' => 'A refund request has been sent for the excess amount',
'question_type' => QAType::MULTIPLE_CHOICES,
'is_start' => false,
'is_end' => false,
'answer_options' => [
['display_text' => 'Next', 'value' => '1688_overpaid_proceed_order', 'next_question_number' => '1688_overpaid_proceed_order'],
['display_text' => 'Proceed', 'value' => '1688_overpaid_proceed_order', 'next_question_number' => '1688_overpaid_proceed_order'],
],
'group' => '1688',
],
@@ -4,11 +4,11 @@
<div class="row m-l-15 m-r-5 p-t-10 b-a align-items-center pointer shadow bg-white rounded b-white">
<div class="col-12">
<div class="row m-b-10">
<div class="col-2">{{ item.id }} <br> {{ item.created_at_with_time }} <br> {{ item.source_email }}</div>
<div class="col-2 text-break">{{ item.id }} <br> {{ item.created_at_with_time }} <br> {{ item.source_email }}</div>
<div class="col-1">{{ item.questionnaire.version }} <br> {{ item.questionnaire.description }}</div>
<div class="col-2">{{ item.question_title }} <br> Time(s): {{ item.time }} </div>
<div class="col-2 text-break">{{ item.question_title }} <br> Time(s): {{ item.time }} </div>
<div class="col-1">{{ parsedAnswer === 'go_back' ? '' : item.answer }}</div>
<div class="col-2">{{ parsedAnswer }}</div>
<div class="col-2 text-break">{{ parsedAnswer }}</div>
<div class="col-1" style="display: flex; flex-wrap: nowrap; gap: 5px;" v-if="item.documentsList != null && item.documentsList.length > 1" >
<div
v-for="document in item.documentsList"
@@ -9,7 +9,7 @@
<div class="col-2">{{ item.question_title }}</div>
<div class="col-1">{{ item.answer }}</div>
<div class="col-1">{{ item.answer_value }}</div>
<div class="col-2">{{ item.source_email }}</div>
<div class="col-2 text-break">{{ item.source_email }}</div>
<div class="col-1">{{ item.time }}</div>
<div class="col-1">{{ item.created_at_with_time }}</div>
<div class="col parentContainer position-static">
@@ -5,9 +5,9 @@
<div class="col-12">
<div class="row m-b-10">
<div class="col-1">{{ item.id }}</div>
<div class="col-2">{{ item.question_title }}</div>
<div class="col-1">{{ parsedAnswer === 'go_back' ? '' : item.answer }}</div>
<div class="col-2">{{ parsedAnswer }}</div>
<div class="col-2 text-break">{{ item.question_title }}</div>
<div class="col-1 text-break">{{ parsedAnswer === 'go_back' ? '' : item.answer }}</div>
<div class="col-2 text-break">{{ parsedAnswer }}</div>
<div class="col-1" style="display: flex; flex-wrap: nowrap; gap: 5px;" v-if="item.documentsList != null && item.documentsList.length > 1" >
<div
@@ -333,12 +333,15 @@
<div class="row justify-content-center align-items-center text-center">
<h6 class="font-heading all-caps bold">Total Paid: </h6>
<h6>
<!-- <span v-if="question.answer && question.question_number === '1688_order_verification'" class="bold m-r-5"
:class="[{'text-danger' : (Math.round((parseFloat(question.answer.answer) + Number.EPSILON) * 1000) / 1000).toFixed(3) !== (Math.round((externalApiResponse.data.paid_amount + Number.EPSILON) * 1000) / 1000).toFixed(3)},
{'text-success' : (Math.round((parseFloat(question.answer.answer) + Number.EPSILON) * 1000) / 1000).toFixed(3) === (Math.round((externalApiResponse.data.paid_amount + Number.EPSILON) * 1000) / 1000).toFixed(3)}]">{{(Math.round(( parseFloat(question.answer.answer) + Number.EPSILON) * 1000) / 1000).toFixed(3)}}/</span> -->
<span class="text-primary bold m-l-5">{{(Math.round((externalApiResponse.data.paid_amount + Number.EPSILON) * 1000) / 1000).toFixed(3)}} {{externalApiResponse.data.fixed_currency.short_code}}</span>
</h6>
</div>
<div class="row justify-content-center align-items-center text-center">
<h6 class="font-heading all-caps bold">Total (Booking): </h6>
<h6>
<span class="text-primary bold m-l-5">{{(Math.round((externalApiResponse.data.amount + Number.EPSILON) * 1000) / 1000).toFixed(3)}} {{externalApiResponse.data.fixed_currency.short_code}}</span>
</h6>
</div>
</div>
</div>
</div>