Admin Workflow - Fix new unclear workflow requirement

This commit is contained in:
Dillon Ngo
2025-02-28 15:51:29 +08:00
parent 3b0f81c842
commit 623fc45442
9 changed files with 324 additions and 112 deletions
@@ -6,12 +6,14 @@ namespace App\Classes\Modules\Questionnaires\Processors;
use App\Classes\Modules\Bookings\Processors\ApprovePurchaseOrderProcessor;
use App\Classes\Modules\Bookings\Processors\UploadPurchaseOrderProcessor;
use App\Classes\Modules\Bookings\Processors\CreateBookingPaymentProcessor;
use App\Classes\Modules\Bookings\Processors\UpdateBookingAmountProcessor;
use App\Classes\Modules\Transactions\Processors\CreatePaymentProofDocumentProcessor;
use App\Classes\Modules\Transactions\Services\FetchesTransaction;
use App\Classes\Modules\Bookings\Services\FetchesBookingQuotation;
use App\Classes\Modules\Currencies\DataTransferObjects\CurrencyConversionObject;
use App\Classes\ValueObjects\Constants\PaymentMethodType;
use App\Models\QAAnswerOptions;
use Illuminate\Support\Facades\Log;
class SaveAnswerActionV1AdminWFProcessor
{
@@ -33,6 +35,9 @@ class SaveAnswerActionV1AdminWFProcessor
/** @var CreateBookingPaymentProcessor */
private $createBookingPaymentProcessor;
/** @var UpdateBookingAmountProcessor */
private $updateBookingAmountProcessor;
/**
* SaveAnswerActionV1AdminWFProcessor constructor.
* @param ApprovePurchaseOrderProcessor $approvePurchaseOrderProcessor
@@ -41,8 +46,9 @@ class SaveAnswerActionV1AdminWFProcessor
* @param FetchesTransaction $fetchesTransaction
* @param FetchesBookingQuotation $fetchBookingQuotation
* @param CreateBookingPaymentProcessor $createBookingPaymentProcessor
* @param UpdateBookingAmountProcessor $updateBookingAmountProcessor
*/
public function __construct(ApprovePurchaseOrderProcessor $approvePurchaseOrderProcessor, UploadPurchaseOrderProcessor $uploadPurchaseOrderProcessor, CreatePaymentProofDocumentProcessor $createPaymentProofDocumentProcessor, FetchesTransaction $fetchesTransaction, FetchesBookingQuotation $fetchBookingQuotation, CreateBookingPaymentProcessor $createBookingPaymentProcessor)
public function __construct(ApprovePurchaseOrderProcessor $approvePurchaseOrderProcessor, UploadPurchaseOrderProcessor $uploadPurchaseOrderProcessor, CreatePaymentProofDocumentProcessor $createPaymentProofDocumentProcessor, FetchesTransaction $fetchesTransaction, FetchesBookingQuotation $fetchBookingQuotation, CreateBookingPaymentProcessor $createBookingPaymentProcessor, UpdateBookingAmountProcessor $updateBookingAmountProcessor)
{
$this->approvePurchaseOrderProcessor = $approvePurchaseOrderProcessor;
$this->uploadPurchaseOrderProcessor = $uploadPurchaseOrderProcessor;
@@ -50,6 +56,7 @@ class SaveAnswerActionV1AdminWFProcessor
$this->fetchesTransaction = $fetchesTransaction;
$this->fetchBookingQuotation = $fetchBookingQuotation;
$this->createBookingPaymentProcessor = $createBookingPaymentProcessor;
$this->updateBookingAmountProcessor = $updateBookingAmountProcessor;
}
/**
@@ -60,7 +67,7 @@ class SaveAnswerActionV1AdminWFProcessor
if($currentQuestion['question_number'] === 'approve_po' && $answerOption && $answerOption->value === "approve_po_approved"){
$this->approvePurchaseOrderProcessor->execute($booking);
}
else if($currentQuestion['question_number'] === '1688_submit')
else if($currentQuestion['question_number'] === '1688_submit' || $currentQuestion['question_number'] === '1688_underpaid_documents_submission' || $currentQuestion['question_number'] === '1688_overpaid_documents_submission')
{
if($filesUpload){
if ($booking && isset($filesUpload['filesA']) && isset($filesUpload['filesB']))
@@ -82,18 +89,22 @@ class SaveAnswerActionV1AdminWFProcessor
else if($currentQuestion['question_number'] === '1688_underpaid_order_1')
{
$wallet = $booking->company->wallets()->first();
$processed = $questionMetadata['amount_processed'];
$amount = $questionMetadata['amount'];
if ($processed < $amount) {
$differenceUnder = $amount - $processed;
$conversionObject = new CurrencyConversionObject(floatval(str_replace(',', '', $differenceUnder)), $booking->convertible_currency_id, $booking->service_id, $booking->fix_currency_id === 1 ? 0:1, PaymentMethodType::PAYMENT_METHODS['wallet']);
$amountProcessed = $questionMetadata['amount_processed'];
$amountPaid = $questionMetadata['paid_amount'];
if ($amountProcessed > $amountPaid) {
$differenceUnderInCNY = $amountProcessed - $amountPaid;
$conversionObject = new CurrencyConversionObject(floatval(str_replace(',', '', $differenceUnderInCNY)), $booking->convertible_currency_id, $booking->service_id, $booking->fix_currency_id === 1 ? 0:1, PaymentMethodType::PAYMENT_METHODS['wallet']);
$configurations = $this->fetchBookingQuotation->execute($booking->company, $conversionObject);
$underpay = $configurations->getTotal();
$amountUnderpay = $configurations->getTotal();
if($wallet->amount > $underpay){
if($amountUnderpay != $differenceUnderInCNY){
$this->updateBookingAmountProcessor->execute($booking, $amountProcessed);
}
if($wallet->amount > $amountUnderpay){
$company = $booking->company()->first();
$employee = $company->employees()->first();
$transaction = $this->createBookingPaymentProcessor->execute($booking, (string) $differenceUnder, 'wallet', "", "", $employee->email);
$transaction = $this->createBookingPaymentProcessor->execute($booking, (string) $differenceUnderInCNY, 'wallet', "", "", $employee->email, false);
}
}