mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/exchange-2.0.git
synced 2026-08-22 14:04:01 +00:00
54 lines
1.9 KiB
PHP
54 lines
1.9 KiB
PHP
<?php
|
|
|
|
namespace App\Classes\Modules\Bookings\Processors;
|
|
|
|
|
|
use App\Classes\Modules\Bookings\Services\FetchesBooking;
|
|
use App\Classes\Modules\Transactions\Processors\CreateInvoiceTransactionProcessor;
|
|
use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus;
|
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
|
use App\Classes\ValueObjects\Constants\TransactionType;
|
|
use App\Models\Booking;
|
|
|
|
class ApprovePurchaseOrderProcessor
|
|
{
|
|
|
|
/** @var FetchesBooking */
|
|
private $fetchesBooking;
|
|
|
|
/** @var UpdatesTransactionStatus */
|
|
private $updatesTransactionStatus;
|
|
|
|
/** @var CreateInvoiceTransactionProcessor */
|
|
private $createInvoiceTransactionProcessor;
|
|
|
|
/**
|
|
* ApprovePurchaseOrderProcessor constructor.
|
|
* @param FetchesBooking $fetchesBooking
|
|
* @param UpdatesTransactionStatus $updatesTransactionStatus
|
|
* @param CreateInvoiceTransactionProcessor $createInvoiceTransactionProcessor
|
|
*/
|
|
public function __construct(FetchesBooking $fetchesBooking, UpdatesTransactionStatus $updatesTransactionStatus, CreateInvoiceTransactionProcessor $createInvoiceTransactionProcessor)
|
|
{
|
|
$this->fetchesBooking = $fetchesBooking;
|
|
$this->updatesTransactionStatus = $updatesTransactionStatus;
|
|
$this->createInvoiceTransactionProcessor = $createInvoiceTransactionProcessor;
|
|
}
|
|
|
|
/**
|
|
* @param Booking $booking
|
|
* @return void
|
|
* @throws \App\Classes\Exceptions\MalformedRequestException
|
|
*/
|
|
public function execute(Booking $booking) {
|
|
|
|
$purchaseOrder = $booking->transactions()->where('type', TransactionType::PURCHASE_ORDER)->first();
|
|
|
|
$booking->transactions()->where('type', TransactionType::PURCHASE_ORDER)->where('id', '!=', $purchaseOrder->id)->delete();
|
|
|
|
$this->updatesTransactionStatus->execute($purchaseOrder, ApprovalStatus::APPROVED);
|
|
|
|
$this->createInvoiceTransactionProcessor->execute($booking);
|
|
}
|
|
}
|