public function createSale($agreement, $amount, $feeAmount, $netAmount, $details) { $transaction = new Transaction(); $transaction->setTransactionKey(uniqid()); $transaction->setStatus(Transaction::STATUS_PAID); $transaction->setTotalPrice($netAmount); $transaction->setTax(abs($feeAmount)); $transaction->setPaymentMethod($agreement->getPaymentMethod()); $transaction->setPaymentDetails($details); $transaction->setActor($agreement->getContract()->getActor()); $agreement->addTransaction($transaction); $productPurchase = new ProductPurchase(); $productPurchase->setPlan($agreement->getPlan()); //this relation exist in productPurchase-transaction-agreement-plan $productPurchase->setQuantity(1); $productPurchase->setBasePrice($amount); $productPurchase->setTotalPrice($amount); $productPurchase->setTransaction($transaction); $productPurchase->setCreated(new \DateTime('now')); $productPurchase->setReturned(false); $this->manager->persist($productPurchase); $transaction->addItem($productPurchase); $this->manager->persist($transaction); $this->manager->flush(); $this->createInvoice(null, $transaction); }