/**
  * @param User                $user
  * @param FormRequestAbstract $request
  *
  * @return object
  */
 public function userPrimaryAddress(User $user, FormRequestAbstract $request)
 {
     $country = Country::find($request->get('primary_address_country_id'));
     $state = State::find($request->get('primary_address_state_id'));
     $substate = SubState::find($request->get('primary_address_substate_id'));
     $locator = $country;
     $locator = is_null($state) ? $locator : $state;
     $locator = is_null($substate) ? $locator : $substate;
     if (is_null($user->flaggedAddress('primary'))) {
         return $user->addAddress(['flag' => 'primary', 'street' => $request->get('primary_address_street'), 'street_extra' => $request->get('primary_address_street_extra'), 'city' => $request->get('primary_address_city'), 'zip' => $request->get('primary_address_zip')], $locator);
     }
     return $user->updateAddress(['flag' => 'primary', 'street' => $request->get('primary_address_street'), 'street_extra' => $request->get('primary_address_street_extra'), 'city' => $request->get('primary_address_city'), 'zip' => $request->get('primary_address_zip')], $locator);
 }
 /**
  * Transform the User entity
  *
  * @param User $model
  *
  * @return array
  */
 public function transform(User $model)
 {
     $primary_address = $model->flaggedAddress('primary');
     $birth_date = $model->birth_date_carbon;
     if (!is_null($birth_date)) {
         $birth_date = $birth_date->format(trans('global.date_format'));
     }
     // NOTE :: key order is important !
     $data = ['id' => (int) $model->id, 'civility' => trans('global.' . $model->civility), 'last_name' => $model->last_name, 'first_name' => $model->first_name, 'email' => $model->email, 'birth_date' => $birth_date];
     /*
      * Roles list
      */
     $roles = [];
     foreach ($model->roles as $role) {
         $roles[] = trans($role->display_name);
     }
     sort($roles);
     $data['roles'] = implode(',' . PHP_EOL, $roles);
     /*
      * Environments list
      */
     $environments = [];
     if (cms_is_superadmin()) {
         foreach ($model->environments as $environment) {
             $environments[] = trans($environment->name);
         }
         sort($environments);
         $data['environments'] = implode(',' . PHP_EOL, $environments);
     }
     /*
      * Primary address
      */
     if (!is_null($primary_address)) {
         switch ($primary_address->locator_type) {
             case 'CVEPDB\\Addresses\\Domain\\Addresses\\Countries\\Country':
                 $data['addresses'] = $primary_address->street . (!is_null($primary_address->street_extra) ? ' ' . $primary_address->street_extra : '') . ' ' . $primary_address->city . ' ' . $primary_address->zip . ' ' . (!is_null($primary_address->locator) ? $primary_address->locator->name : '');
                 break;
             case 'CVEPDB\\Addresses\\Domain\\Addresses\\States\\State':
                 $data['addresses'] = $primary_address->street . ' ' . $primary_address->street_extra . ' ' . $primary_address->city . ' ' . $primary_address->zip . ' ' . (!is_null($primary_address->locator) ? $primary_address->locator->name : '') . ' ' . (!is_null($primary_address->locator) ? $primary_address->locator->country->name : '');
                 break;
             case 'CVEPDB\\Addresses\\Domain\\Addresses\\SubStates\\SubState':
                 $data['addresses'] = $primary_address->street . ' ' . $primary_address->street_extra . ' ' . $primary_address->city . ' ' . $primary_address->zip . ' ' . (!is_null($primary_address->locator) ? $primary_address->locator->state->name : '') . ' ' . (!is_null($primary_address->locator) ? $primary_address->locator->name : '') . ' ' . (!is_null($primary_address->locator) ? $primary_address->locator->state->country->name : '');
                 break;
         }
     }
     return $data;
 }
 /**
  * @param User $user
  *
  * @return array
  */
 public function transform(User $user)
 {
     $primary_address = $user->flaggedAddress('primary');
     $data = ['id' => (int) $user->id, 'full_name' => $user->full_name, 'email' => $user->email, 'deleted_at' => $user->deleted_at];
     return $data;
 }