/**
  * @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;
 }