Ejemplo n.º 1
-1
 /**
  * Обработка изменений полей врача перед сохранением для изменения рейтинга и шкалы заполненности профайла
  * @param Doctor $doctor
  * @param PreUpdateEventArgs $args
  */
 public function changeDoctor(Doctor $doctor, PreUpdateEventArgs $args)
 {
     # изменение рейтинговых полей
     foreach ($this->ratingFields as $field => $bonus) {
         # если рейтинговое поле изменилось
         if ($args->hasChangedField($field)) {
             $new = $args->getNewValue($field);
             $old = $args->getOldValue($field);
             # если поле заполнили - добавляем баллы в рейтинг. Если очистили - снимаем.
             if (empty($old) && !empty($new)) {
                 $doctor->addRating($bonus);
             } elseif (empty($new) && !empty($old) && !is_array($old)) {
                 $doctor->subRating($bonus);
             }
         }
     }
     $filledBonus = intval(100 / count($this->filledFields));
     // = 5
     # изменение полей, влияющих на заполненность профайла
     foreach ($this->filledFields as $field) {
         if ($args->hasChangedField($field)) {
             $new = $args->getNewValue($field);
             $old = $args->getOldValue($field);
             # если поле заполнили - заполняем шкалу профиля, иначе снимаем
             if (empty($old) && !empty($new)) {
                 $doctor->addFilled($filledBonus);
             } elseif (empty($new) && !empty($old) && !is_array($old)) {
                 $doctor->subFilled($filledBonus);
             }
         }
     }
 }