diff --git a/app/Classes/Modules/Bookings/ControllersLogic/ApprovePurchaseOrderLogic.php b/app/Classes/Modules/Bookings/ControllersLogic/ApprovePurchaseOrderLogic.php index f7d1d775..f790feca 100644 --- a/app/Classes/Modules/Bookings/ControllersLogic/ApprovePurchaseOrderLogic.php +++ b/app/Classes/Modules/Bookings/ControllersLogic/ApprovePurchaseOrderLogic.php @@ -4,15 +4,7 @@ namespace App\Classes\Modules\Bookings\ControllersLogic; use App\Classes\General\Abstracts\AbstractControllerLogic; -use App\Classes\Modules\Bookings\Services\FetchesBooking; -use App\Classes\Modules\Documents\Services\ApprovesDocument; -use App\Classes\Modules\Documents\Services\FetchesDocument; -use App\Classes\Modules\Documents\Services\RejectsDocument; -use App\Classes\Modules\Transactions\Processors\CreateInvoiceTransactionProcessor; -use App\Classes\Modules\Transactions\Services\FetchesTransaction; -use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus; -use App\Classes\ValueObjects\Constants\ApprovalStatus; -use App\Classes\ValueObjects\Constants\TransactionType; +use App\Classes\Modules\Bookings\Processors\ApprovePurchaseOrderProcessor; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -29,26 +21,16 @@ class ApprovePurchaseOrderLogic extends AbstractControllerLogic ]; } - /** @var FetchesBooking */ - private $fetchesBooking; - - /** @var UpdatesTransactionStatus */ - private $updatesTransactionStatus; - - /** @var CreateInvoiceTransactionProcessor */ - private $createInvoiceTransactionProcessor; + /** @var ApprovePurchaseOrderProcessor */ + private $approvePurchaseOrderProcessor; /** * ApprovePurchaseOrderLogic constructor. - * @param FetchesBooking $fetchesBooking - * @param UpdatesTransactionStatus $updatesTransactionStatus - * @param CreateInvoiceTransactionProcessor $createInvoiceTransactionProcessor + * @param ApprovePurchaseOrderProcessor $approvePurchaseOrderProcessor */ - public function __construct(FetchesBooking $fetchesBooking, UpdatesTransactionStatus $updatesTransactionStatus, CreateInvoiceTransactionProcessor $createInvoiceTransactionProcessor) + public function __construct(ApprovePurchaseOrderProcessor $approvePurchaseOrderProcessor) { - $this->fetchesBooking = $fetchesBooking; - $this->updatesTransactionStatus = $updatesTransactionStatus; - $this->createInvoiceTransactionProcessor = $createInvoiceTransactionProcessor; + $this->approvePurchaseOrderProcessor = $approvePurchaseOrderProcessor; } /** @@ -58,18 +40,7 @@ class ApprovePurchaseOrderLogic extends AbstractControllerLogic */ public function logic(Request $request) : JsonResponse { - - $booking = $this->fetchesBooking->execute(['id' => $request->route('id')]); - - $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); - + $this->approvePurchaseOrderProcessor->execute($request->route('id')); return $this->response([]); } - -} \ No newline at end of file +} diff --git a/app/Classes/Modules/Bookings/Processors/ApprovePurchaseOrderProcessor.php b/app/Classes/Modules/Bookings/Processors/ApprovePurchaseOrderProcessor.php new file mode 100644 index 00000000..1a1a0341 --- /dev/null +++ b/app/Classes/Modules/Bookings/Processors/ApprovePurchaseOrderProcessor.php @@ -0,0 +1,55 @@ +fetchesBooking = $fetchesBooking; + $this->updatesTransactionStatus = $updatesTransactionStatus; + $this->createInvoiceTransactionProcessor = $createInvoiceTransactionProcessor; + } + + /** + * @param int $bookingId + * @return void + * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \App\Classes\Exceptions\JobResourceNotFoundException + */ + public function execute(int $bookingId) { + + $booking = $this->fetchesBooking->execute(['id' => $bookingId]); + + $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); + } +} diff --git a/app/Classes/Modules/Questionnaires/ControllersLogic/FetchAdminWFPendingApprovalPOLogic.php b/app/Classes/Modules/Questionnaires/ControllersLogic/FetchAdminWFPendingApprovalPOLogic.php index 64ecac70..94d4f07a 100644 --- a/app/Classes/Modules/Questionnaires/ControllersLogic/FetchAdminWFPendingApprovalPOLogic.php +++ b/app/Classes/Modules/Questionnaires/ControllersLogic/FetchAdminWFPendingApprovalPOLogic.php @@ -79,10 +79,7 @@ class FetchAdminWFPendingApprovalPOLogic extends AbstractControllerLogic // ->whereHas('transactions', fn ($query) => $query->where('type', TransactionType::PURCHASE_ORDER)->where('status', '<', ApprovalStatus::APPROVED)) // ->first(); - // $booking1 = $this->fetchesBooking->execute(['purchase_order_approval' => true, 'status_in' => [2], 'order_by_id_desc' => true, 'with_transactions' => true]); - // Log::info('booking1 '.json_encode($booking1)); - - $booking = $this->fetchesBooking->execute(['purchase_order_approval' => true, 'status_in' => [2], 'id_not_in' => $excludedBookingIds, 'order_by_id_desc' => true]); + $booking = $this->fetchesBooking->execute(['purchase_order_approval' => true, 'status_in' => [2], 'id_not_in' => $excludedBookingIds, 'with_transactions' => true, 'order_by_id_desc' => true]); if(!$booking){ return responseJson(null, 'No booking found', 404); diff --git a/app/Classes/Modules/Questionnaires/ControllersLogic/FetchAdminWFPendingFillPOLogic.php b/app/Classes/Modules/Questionnaires/ControllersLogic/FetchAdminWFPendingFillPOLogic.php index 00e5b1f6..7687a2ff 100644 --- a/app/Classes/Modules/Questionnaires/ControllersLogic/FetchAdminWFPendingFillPOLogic.php +++ b/app/Classes/Modules/Questionnaires/ControllersLogic/FetchAdminWFPendingFillPOLogic.php @@ -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\BookingResource; use App\Models\KeyValuePair; use Carbon\Carbon; use App\Models\Booking; @@ -76,7 +76,7 @@ class FetchAdminWFPendingFillPOLogic extends AbstractControllerLogic // ->whereDoesntHave('transactions', fn ($query) => $query->where('type', TransactionType::PURCHASE_ORDER)) // ->first(); - $booking = $this->fetchesBooking->execute(['pending_purchase_order' => true, 'has_payment_status_in' => [2, 3], 'id_not_in' => $excludedBookingIds, 'order_by_id_desc' => true]); + $booking = $this->fetchesBooking->execute(['pending_purchase_order' => true, 'has_payment_status_in' => [2, 3], 'id_not_in' => $excludedBookingIds, 'with_transactions' => true, 'order_by_id_desc' => true]); if(!$booking){ return responseJson(null, 'No booking found', 404); @@ -90,7 +90,7 @@ class FetchAdminWFPendingFillPOLogic extends AbstractControllerLogic // ]); // return $booking ? responseJson(new BookingResource($booking)) : responseJson(null, 'No booking found', 404); - return $this->resourceResponse(new BookingBaseResource($booking)); + return $this->resourceResponse(new BookingResource($booking)); } } diff --git a/app/Classes/Modules/Questionnaires/Processors/SaveAnswerActionV1AdminWFProcessor.php b/app/Classes/Modules/Questionnaires/Processors/SaveAnswerActionV1AdminWFProcessor.php new file mode 100644 index 00000000..0e1ead49 --- /dev/null +++ b/app/Classes/Modules/Questionnaires/Processors/SaveAnswerActionV1AdminWFProcessor.php @@ -0,0 +1,31 @@ +approvePurchaseOrderProcessor = $approvePurchaseOrderProcessor; + } + + /** + * @return + */ + public function execute($questionMetadata, $answerInText){ + if($answerInText === "approve_po_approved"){ + $this->approvePurchaseOrderProcessor->execute($questionMetadata['id']); + } + } +} diff --git a/app/Classes/Modules/Questionnaires/Processors/SaveAnswerV1AdminWFProcessor.php b/app/Classes/Modules/Questionnaires/Processors/SaveAnswerV1AdminWFProcessor.php index 2b91e60c..1a92a56c 100644 --- a/app/Classes/Modules/Questionnaires/Processors/SaveAnswerV1AdminWFProcessor.php +++ b/app/Classes/Modules/Questionnaires/Processors/SaveAnswerV1AdminWFProcessor.php @@ -4,28 +4,27 @@ namespace App\Classes\Modules\Questionnaires\Processors; use App\Models\QAUserAnswerSelected; -use App\Classes\Modules\Questionnaires\Services\FetchesUserAnswerSelected; +use App\Classes\Modules\Questionnaires\Processors\SaveAnswerActionV1AdminWFProcessor; use App\Classes\Modules\Documents\Processors\UploadDocumentProcessor; use App\Classes\ValueObjects\Constants\QAType; - class SaveAnswerV1AdminWFProcessor { - /** @var FetchesUserAnswerSelected */ - private $fetchesUserAnswerSelected; - /** @var UploadDocumentProcessor */ private $uploadDocumentForProcessor; + /** @var SaveAnswerActionV1AdminWFProcessor */ + private $saveAnswerActionProcessor; + /** * SaveAnswerV1AdminWFProcessor constructor. - * @param FetchesUserAnswerSelected $fetchesUserAnswerSelected * @param UploadDocumentProcessor $uploadDocumentForProcessor + * @param SaveAnswerActionV1AdminWFProcessor $saveAnswerActionProcessor */ - public function __construct(FetchesUserAnswerSelected $fetchesUserAnswerSelected, UploadDocumentProcessor $uploadDocumentForProcessor) + public function __construct(UploadDocumentProcessor $uploadDocumentForProcessor, SaveAnswerActionV1AdminWFProcessor $saveAnswerActionProcessor) { - $this->fetchesUserAnswerSelected = $fetchesUserAnswerSelected; $this->uploadDocumentForProcessor = $uploadDocumentForProcessor; + $this->saveAnswerActionProcessor = $saveAnswerActionProcessor; } /** @@ -80,6 +79,8 @@ class SaveAnswerV1AdminWFProcessor } $answer->save(); + $this->saveAnswerActionProcessor->execute($questionMetadata, $answerInText); + return $answer; } }