/**
  * Create service
  *
  * @param ServiceLocatorInterface $serviceLocator
  *
  * @return mixed
  */
 public function createService(ServiceLocatorInterface $serviceLocator)
 {
     $auth = $serviceLocator->get('AuthenticationService');
     $user = $auth->getUser();
     $settings = $user->getSettings('Orders');
     $invoiceAddress = $settings->getInvoiceAddress();
     if (!$invoiceAddress->getCompany()) {
         $invoiceAddress = false;
         $org = $user->getOrganization();
         if ($org->isEmployee()) {
             $orgUser = $org->isHiringOrganization() ? $org->getParent()->getUser() : $org->getUser();
             $invoiceAddress = $orgUser->getSettings('Orders')->getInvoiceAddress();
             if (!$invoiceAddress->getCompany()) {
                 $invoiceAddress = false;
             }
         }
     }
     $entity = new InvoiceAddress();
     if ($invoiceAddress) {
         $entityHydrator = new EntityHydrator();
         $settingsHydrator = new SettingsEntityHydrator();
         $data = $settingsHydrator->extract($invoiceAddress);
         $entity = $entityHydrator->hydrate($data, $entity);
     }
     return $entity;
 }
 public function getHydrator()
 {
     if (!$this->hydrator) {
         $hydrator = new SettingsEntityHydrator();
         $hydrator->addStrategy('disableElements', new DisableElementsStrategy());
         $this->setHydrator($hydrator);
     }
     return $this->hydrator;
 }