/**
  * @param array $data
  * @return IEntity|void
  * @throws EntityAlreadyExistsException
  * @throws NotFoundEntityException
  */
 public function updateCompanyService(array $data)
 {
     $this_var = $this;
     $validator_factory = $this->validator_factory;
     $repository = $this->repository;
     $marketplace_factory = $this->marketplace_factory;
     $company_service = $this->tx_manager->transaction(function () use(&$company_service, $this_var, $marketplace_factory, $data, $validator_factory, $repository) {
         $validator = $validator_factory->buildValidatorForCompanyService($data);
         if ($validator->fails()) {
             return $this_var->validationError($validator->messages());
         }
         $id = intval($data['id']);
         $company_service = $repository->getById($id);
         if (!$company_service) {
             throw new NotFoundEntityException('CompanyService', sprintf("id %s", $id));
         }
         $company_service->setName($data['name']);
         if ($company_service->isDraft()) {
             $live_service_id = isset($data['live_service_id']) ? $data['live_service_id'] : 0;
             $published = isset($data['published']) ? $data['published'] : 0;
             $company_service->setPublished($published);
             $company_service->setLiveServiceId($live_service_id);
         }
         $query = new QueryObject($company_service);
         $query->addAndCondition(QueryCriteria::equal('Name', $company_service->getName()));
         $query->addAndCondition(QueryCriteria::equal('Company.ID', $company_service->getCompany()->getIdentifier()));
         $query->addAndCondition(QueryCriteria::notId('ID', $id));
         $res = $repository->getBy($query);
         if ($res) {
             throw new EntityAlreadyExistsException('CompanyService', sprintf('name %s', $company_service->getName()));
         }
         $this_var->update($company_service, $data);
         $clearCollections = new ReflectionMethod(get_class($this_var), 'clearCollections');
         $clearCollections->setAccessible(true);
         $clearCollections->invoke($this_var, $company_service);
         $updateCollections = new ReflectionMethod(get_class($this_var), 'updateCollections');
         $updateCollections->setAccessible(true);
         $updateCollections->invoke($this_var, $company_service, $data);
         return $company_service;
     });
     return $company_service;
 }
 /**
  * @param array $data
  * @return IEntity|void
  * @throws EntityAlreadyExistsException
  * @throws NotFoundEntityException
  */
 public function updateCompanyService(array $data)
 {
     $this_var = $this;
     $validator_factory = $this->validator_factory;
     $repository = $this->repository;
     $marketplace_factory = $this->marketplace_factory;
     $company_service = $this->tx_manager->transaction(function () use(&$company_service, $this_var, $marketplace_factory, $data, $validator_factory, $repository) {
         $validator = $validator_factory->buildValidatorForCompanyService($data);
         if ($validator->fails()) {
             return $this_var->validationError($validator->messages());
         }
         $id = intval($data['id']);
         $company_service = $repository->getById($id);
         if (!$company_service) {
             throw new NotFoundEntityException('CompanyService', sprintf("id %s", $id));
         }
         $company_service->setName($data['name']);
         if ($company_service->isDraft()) {
             $live_service_id = isset($data['live_service_id']) ? $data['live_service_id'] : 0;
             $published = isset($data['published']) ? $data['published'] : 0;
             $company_service->setPublished($published);
             $company_service->setLiveServiceId($live_service_id);
         }
         $query = new QueryObject($company_service);
         $query->addAndCondition(QueryCriteria::equal('Name', $company_service->getName()));
         $query->addAndCondition(QueryCriteria::equal('Company.ID', $company_service->getCompany()->getIdentifier()));
         $query->addAndCondition(QueryCriteria::notId('ID', $id));
         $res = $repository->getBy($query);
         if ($res) {
             throw new EntityAlreadyExistsException('CompanyService', sprintf('name %s', $company_service->getName()));
         }
         $this_var->update($company_service, $data);
         $clearCollections = new ReflectionMethod(get_class($this_var), 'clearCollections');
         $clearCollections->setAccessible(true);
         $clearCollections->invoke($this_var, $company_service);
         $updateCollections = new ReflectionMethod(get_class($this_var), 'updateCollections');
         $updateCollections->setAccessible(true);
         $updateCollections->invoke($this_var, $company_service, $data);
         // send notification to admins
         $username = Member::currentUser()->getName();
         $email_subject = "Update on " . $company_service->getName();
         $email_body = $company_service->getName() . " was just updated by " . $username . ".\n                          Please go <a href='https://openstack.org/marketplaceadmin/'>here</a> to review the data.\n                          <br><br>Thank you,<br>Marketplace Admin";
         $email = EmailFactory::getInstance()->buildEmail('*****@*****.**', MARKETPLACE_ADMIN_UPDATE_EMAIL_TO, $email_subject, $email_body);
         $email->send();
         return $company_service;
     });
     return $company_service;
 }