public static function addTariffPrivate($em, \Renovate\MainBundle\Entity\User $user, $parameters) { $em->getConnection()->beginTransaction(); try { $tariffParent = $em->getRepository("RenovateMainBundle:Tariff")->find($parameters->id); $tariff = new Tariff(); $tariff->setParentid($tariffParent->getId()); $tariff->setUserid($user->getId()); $tariff->setUser($user); $name = $parameters->edited == true ? $tariffParent->getName() . '+' : $tariffParent->getName(); $tariff->setName($name); $tariff->setActive(FALSE); $tariff->setDiscount($tariffParent->getDiscount()); $tariff->setSquaring($parameters->squaring); $tariff->setPayment(0); $tariff->setCreated(new \DateTime()); $em->persist($tariff); $em->flush(); $role = $em->getRepository("RenovateMainBundle:Role")->find($parameters->clientRole->id); $price = $tariff->calculatePrice($em, $role, $parameters->services); $tariffPrice = new TariffPrice(); $tariffPrice->setTariffid($tariff->getId()); $tariffPrice->setTariff($tariff); $tariffPrice->setRoleid($role->getId()); $tariffPrice->setRole($role); $tariffPrice->setValue($price); $em->persist($tariffPrice); $em->flush(); $tariff->setPayment($price * $tariff->getSquaring()); $em->persist($tariff); $em->flush(); $tariff->createTariffServices($em, $parameters); $em->getConnection()->commit(); return $tariff; } catch (Exception $e) { $em->getConnection()->rollback(); throw $e; } }