updatesTransactionStatus = $updatesTransactionStatus; $this->createsTransaction = $createsTransaction; $this->createsTransactionDetail = $createsTransactionDetail; $this->updatesTransaction = $updatesTransaction; $this->deletesTransactionDetails = $deletesTransactionDetails; } /** * @param Booking $booking * @param TransactionObject $object * @return Transaction|\Illuminate\Database\Eloquent\Model * @throws \App\Classes\Exceptions\MalformedRequestException */ public function execute(Booking $booking, TransactionObject $object){ /** @var Transaction $transaction */ $transaction = $booking->transactions()->where('type', TransactionType::PURCHASE_ORDER)->first(); !$transaction ? $transaction = $this->createsTransaction->execute($booking, $object) : $transaction = $this->updatesTransaction->execute($transaction, $object); $this->updatesTransactionStatus->execute($transaction, (float) number_format($object->getAmount(), 2, '.', '') === (float) number_format((float)$booking->fix_amount, 2, '.', '') ? ApprovalStatus::PENDING_VERIFICATION : ApprovalStatus::PENDING_SUBMISSION); $this->deletesTransactionDetails->execute($transaction); foreach ($object->getDetails() as $product){ $this->createsTransactionDetail->execute($transaction, $product); } return $transaction; } }