Example #1
0
 /**
  * Создание организации
  * @param array $data
  * @param Organization $parent
  * @return Organization|null
  */
 protected function createOrganization(array $data, Organization $parent = null)
 {
     $organization = new Organization();
     // если есть родительская организация, берем статус из нее
     if ($parent === null) {
         $organization->status()->associate($this->misc['statuses']->get(mb_convert_case(array_get($data, 'Stan'), MB_CASE_TITLE)));
     } else {
         $organization->status()->associate($parent->status);
     }
     $organization->opf()->associate($this->misc['opfs']->get(mb_convert_case(array_get($data, 'Opf'), MB_CASE_TITLE)));
     // если передан тип значит это подорганизация, иначе это главная организация и она - юр лицо
     $organization->type()->associate(array_get($data, 'type', $this->misc['types']['Юридична особа']));
     $organization->fullName = array_get($data, 'Name', '');
     $organization->shortName = array_get($data, 'ShortName', '');
     $organization->edrpou = array_get($data, 'Kod', '');
     $organization->address = array_get($data, 'Address', '');
     if (!empty($organization->address)) {
         // почтовый индекс
         if (preg_match('~^(\\d+),~u', $organization->address, $matches)) {
             $organization->postCode = $matches[1];
         }
         // вытягиваем город из адреса
         if (preg_match('~,\\s*(?:м.|місто)\\s*(\\w+)\\s*,~ui', $organization->address, $matches)) {
             $organization->city()->associate($this->misc['cities'][mb_convert_case($matches[1], MB_CASE_TITLE)]);
         }
     }
     if (!$organization->save()) {
         return null;
     }
     // создаем под организации
     if (isset($data['Pidrozdil'])) {
         if (is_array($data['Pidrozdil'])) {
             foreach ($data['Pidrozdil'] as $subOrg) {
                 $subOrgData = $this->parseSubOrganization($subOrg);
                 $organization->organizations()->save($this->createOrganization($subOrgData, $organization));
             }
         } else {
             $subOrgData = $this->parseSubOrganization($data['Pidrozdil']);
             $organization->organizations()->save($this->createOrganization($subOrgData, $organization));
         }
     }
     // если указан руководитель, добавляем его в БД
     if (isset($data['Kerivnik'])) {
         // поднимаем первые буквы в вверхний регист, остальные в нижний
         $chief = implode(' ', array_map(function ($item) {
             $parts = explode('-', $item);
             if (count($parts) == 1) {
                 return mb_convert_case($item, MB_CASE_TITLE);
             } else {
                 return implode('-', array_map(function ($it) {
                     return mb_convert_case($it, MB_CASE_TITLE);
                 }, $parts));
             }
         }, explode(' ', mb_strtolower($data['Kerivnik']))));
         $organization->chief = $chief;
         $organization->save();
     }
     return $organization;
 }