/** * @param Invoice $invoice * * @return Invoice * * @throws InvalidTransitionException */ public function create(Invoice $invoice) { if ($invoice->isRecurring()) { $invoice->setStatus(Graph::STATUS_RECURRING); $firstInvoice = clone $invoice; $firstInvoice->setRecurring(false); $firstInvoice->setRecurringInfo(null); $this->entityManager->persist($invoice); $this->entityManager->flush(); $invoice = $firstInvoice; } // Set the invoice status as new and save, before we transition to the correct status $invoice->setStatus(Graph::STATUS_NEW); $this->entityManager->persist($invoice); $this->entityManager->flush(); $this->applyTransition($invoice, Graph::TRANSITION_NEW); $this->dispatcher->dispatch(InvoiceEvents::INVOICE_PRE_CREATE, new InvoiceEvent($invoice)); $this->entityManager->persist($invoice); $this->entityManager->flush(); $this->dispatcher->dispatch(InvoiceEvents::INVOICE_POST_CREATE, new InvoiceEvent($invoice)); return $invoice; }