updatePerfexCRMObject = $updatePerfexCRMObject; $this->transaction = $transaction; $this->shouldCreateInvoice = $shouldCreateInvoice; } public function handle() { //To use invoice as a reference to decide whether more tasks should be created $this->updatePerfexCRMObject->setInvoiceId($this->getInvoiceIdOrCreateInvoice()); $result = (App()->make(UpdatePerfexCRMProcessor::class))->execute($this->updatePerfexCRMObject); if($this->transaction != null && $this->shouldCreateInvoice){ $updatePerfexCRMInvoiceObject = new UpdatePerfexCRMInvoiceObject( $this->updatePerfexCRMObject->getContactEmail(), $this->updatePerfexCRMObject->getProjectName(), $result->projectId, $this->transaction, true ); UpdatePerfexCRMInvoice::dispatch($updatePerfexCRMInvoiceObject); } } private function getInvoiceIdOrCreateInvoice(){ if($this->transaction != null){ $fetchPerfexCRMInvoiceObject = new FetchPerfexCRMInvoiceObject( $this->updatePerfexCRMObject->getContactEmail(), $this->transaction ); $invoiceId = (App()->make(FetchPerfexCRMInvoiceProcessor::class))->execute($fetchPerfexCRMInvoiceObject); return $invoiceId; } return 0; } }