/** * @param Application\Model\ServicePackModel $service * @return Application\Model\ServicePackModel */ public function create(Model\ModelAbstract $service) { if (strlen((string) $service->getId())) { throw new AppEx\InvalidArgumentException("A new service pack can not have an Id already set"); } $service->published = ServicePackModel::STATUS_NOT_PUBLISHED; $tariffService = TariffPlanService::getInstance(); if ($tariff = $service->getTariffPlanLifeCycle()) { $tariff->setName(uniqid('', true)); $tariff->setId(null); try { $tariffService->create($tariff); $service->setTariffPlanLifeCycleId($tariff->getId()); } catch (\Exception $e) { throw $e; } } if ($tariff = $service->getTariffPlanServices()) { $tariff->setName(uniqid('', true)); $tariff->setId(null); try { $tariffService->create($tariff); $service->setTariffPlanServicesId($tariff->getId()); } catch (\Exception $e) { try { TariffPlanService::getInstance()->delete($service->getTariffPlanLifeCycleId(), TariffPlanService::TYPE_LIFECYCLE); } catch (\Exception $e2) { \App::log()->warn($e2); } throw $e; } } $lcService = LifeCycleService::getInstance(); if ($lc = $service->getLifeCycle()) { $lc->setName(uniqid('', true)); $lc->setId(null); try { $lcService->create($lc); $service->setLifeCycleId($lc->getId()); } catch (\Exception $e) { try { TariffPlanService::getInstance()->delete($service->getTariffPlanLifeCycleId(), TariffPlanService::TYPE_LIFECYCLE); } catch (\Exception $e2) { \App::log()->warn($e2); } try { TariffPlanService::getInstance()->delete($service->getTariffPlanServicesId(), TariffPlanService::TYPE_SERVICES); } catch (\Exception $e2) { \App::log()->warn($e2); } throw $e; } } $restricService = RestrictionService::getInstance(); if ($re = $service->getRestrictions()) { $re->setName(uniqid('', true)); $re->setId(null); try { $restricService->create($re); $service->setRestrictionsId($re->getId()); } catch (\Exception $e) { try { TariffPlanService::getInstance()->delete($service->getTariffPlanLifeCycleId(), TariffPlanService::TYPE_LIFECYCLE); } catch (\Exception $e2) { \App::log()->warn($e2); } try { TariffPlanService::getInstance()->delete($service->getTariffPlanServicesId(), TariffPlanService::TYPE_SERVICES); } catch (\Exception $e2) { \App::log()->warn($e2); } try { LifeCycleService::getInstance()->delete($service->getLifeCycleId()); } catch (\Exception $e2) { \App::log()->warn($e2); } throw $e; } } try { $result = parent::create($service); } catch (Exception $e) { try { TariffPlanService::getInstance()->delete($service->getTariffPlanLifeCycleId(), TariffPlanService::TYPE_LIFECYCLE); } catch (\Exception $e2) { \App::log()->warn($e2); } try { TariffPlanService::getInstance()->delete($service->getTariffPlanServicesId(), TariffPlanService::TYPE_SERVICES); } catch (\Exception $e2) { \App::log()->warn($e2); } try { LifeCycleService::getInstance()->delete($service->getLifeCycleId()); } catch (\Exception $e2) { \App::log()->warn($e2); } try { RestrictionService::getInstance()->delete($service->getRestrictionsId()); } catch (\Exception $e2) { \App::log()->warn($e2); } throw $e; } try { $steeringListService = SteeringListService::getInstance(); $steeringListService->applySteering($re, $result->getId()); } catch (Exception $ex) { try { TariffPlanService::getInstance()->delete($service->getTariffPlanLifeCycleId(), TariffPlanService::TYPE_LIFECYCLE); } catch (\Exception $e2) { \App::log()->warn($e2); } try { TariffPlanService::getInstance()->delete($service->getTariffPlanServicesId(), TariffPlanService::TYPE_SERVICES); } catch (\Exception $e2) { \App::log()->warn($e2); } try { LifeCycleService::getInstance()->delete($service->getLifeCycleId()); } catch (\Exception $e2) { \App::log()->warn($e2); } try { RestrictionService::getInstance()->delete($service->getRestrictionsId()); } catch (\Exception $e2) { \App::log()->warn($e2); } try { parent::delete($result->getId()); } catch (\Exception $e2) { \App::log()->warn($e2); } throw $e; } return $result; }