/**
  * Соберем все года, за которые у выбранных пользователей есть
  * индивидуальные планы
  */
 public function actionSelectYearsByPersonsPlans()
 {
     $bean = self::getStatefullBean();
     $ids = explode(":", $bean->getItem("id"));
     $bean->add("id", new CArrayList($ids));
     $persons = new CArrayList();
     foreach ($ids as $id) {
         $person = CStaffManager::getPerson($id);
         if (!is_null($person)) {
             $persons->add($person->getId(), $person);
         }
     }
     $years = new CArrayList();
     /**
      * @var $person CPerson
      */
     foreach ($persons->getItems() as $person) {
         foreach ($person->getIndPlansByYears()->getItems() as $year_id => $data) {
             $year = CTaxonomyManager::getYear($year_id);
             if (!is_null($year)) {
                 $years->add($year->getId(), $year->getValue());
             }
         }
     }
     if ($years->getCount() == 0) {
         $this->setData("message", "Год не выбран, продолжение невозможно");
         $this->renderView("_flow/dialog.ok.tpl", "", "");
         return true;
     }
     $this->setData("items", $years);
     $this->renderView("_flow/pickList.tpl", get_class($this), "SelectLoadTypesByPersonsPlans");
 }
Exemplo n.º 2
0
 /**
  * Учебный год
  *
  * @return CTerm
  */
 public function getYear()
 {
     if (is_null($this->_year)) {
         $this->_year = CTaxonomyManager::getYear($this->getRecord()->getItemValue("year_id"));
     }
     return $this->_year;
 }
Exemplo n.º 3
0
 /**
  * Текущий год
  *
  * @static
  * @return CTerm
  */
 public static function getCurrentYear()
 {
     if (is_null(self::$_currentYear)) {
         /**
                     foreach (CActiveRecordProvider::getAllFromTable(TABLE_SETTINGS)->getItems() as $setting) {
            self::$_currentYear = CTaxonomyManager::getYear($setting->getItemValue("year_id"));
                     }
         */
         self::$_currentYear = CTaxonomyManager::getYear(CSettingsManager::getSettingValue("current_year"));
     }
     return self::$_currentYear;
 }
 public function getYears()
 {
     $person = CStaffManager::getPerson($this->_bean->getItem("id"));
     $plans = $person->getIndPlansByYears();
     $years = array();
     foreach ($plans->getItems() as $year => $plan) {
         $year = CTaxonomyManager::getYear($year);
         if (!is_null($year)) {
             $years[$year->getId()] = $year->getValue();
         }
     }
     return $years;
 }
 public function actionIndex()
 {
     $persons = new CArrayList();
     if (CRequest::getInt("year") == 0) {
         $year = CUtils::getCurrentYear();
     } else {
         $year = CTaxonomyManager::getYear(CRequest::getInt("year"));
     }
     foreach (CStaffManager::getAllPersons()->getItems() as $person) {
         if ($person->getPublications($year)->getCount() > 0) {
             $persons->add($person->id, $person);
         }
     }
     $this->addActionsMenuItem(array(array("title" => "Назад", "link" => "index.php", "icon" => "actions/edit-undo.png")));
     $this->setData("year", $year);
     $this->setData("persons", $persons);
     $this->renderView("_rating_publications/person/index.tpl");
 }
 public function actionImport()
 {
     $thisYear = new CArrayList();
     // импортируем показатели должностей
     $index = new CRatingIndex();
     $index->title = "Должность";
     $index->manager_class = "CTaxonomyManager";
     $index->manager_method = "getPosts()";
     $index->person_method = "getPost()";
     $index->year_id = CUtils::getCurrentYear()->getId();
     $index->isMultivalue = 0;
     $index->save();
     $thisYear->add($index->getId(), $index);
     foreach (CActiveRecordProvider::getAllFromTable("spr_dolzhnost")->getItems() as $item) {
         $post = CTaxonomyManager::getPostById($item->getItemValue("id"));
         if (!is_null($post)) {
             $value = new CRatingIndexValue();
             $value->index_id = $index->id;
             $value->fromTaxonomy = 1;
             $value->title = $post->getId();
             $value->value = $item->getItemValue("rate");
             $value->save();
         }
     }
     // показатели размножаем на все года
     foreach (CTaxonomyManager::getYearsList() as $key => $value) {
         $year = CTaxonomyManager::getYear($key);
         if ($year->getId() !== $index->year_id) {
             $newIndex = new CRatingIndex();
             $newIndex->title = $index->title;
             $newIndex->manager_class = $index->manager_class;
             $newIndex->manager_method = $index->manager_method;
             $newIndex->person_method = $index->person_method;
             $newIndex->year_id = $year->getId();
             $newIndex->isMultivalue = $index->isMultivalue;
             $newIndex->save();
             foreach ($index->getIndexValues()->getItems() as $value) {
                 $newValue = new CRatingIndexValue();
                 $newValue->index_id = $newIndex->getId();
                 $newValue->fromTaxonomy = $value->fromTaxonomy;
                 $newValue->title = $value->title;
                 $newValue->value = $value->value;
                 $newValue->save();
             }
         }
     }
     // звания
     $index = new CRatingIndex();
     $index->title = "Звание";
     $index->manager_class = "CTaxonomyManager";
     $index->manager_method = "getTitles()";
     $index->year_id = CUtils::getCurrentYear()->getId();
     $index->isMultivalue = 0;
     $index->person_method = "getTitle()";
     $index->save();
     $thisYear->add($index->getId(), $index);
     foreach (CActiveRecordProvider::getAllFromTable("spr_zvanie")->getItems() as $item) {
         $post = CTaxonomyManager::getTitle($item->getItemValue("id"));
         if (!is_null($post)) {
             $value = new CRatingIndexValue();
             $value->index_id = $index->id;
             $value->fromTaxonomy = 1;
             $value->title = $post->getId();
             $value->value = $item->getItemValue("rate");
             $value->save();
         }
     }
     // показатели размножаем на все года
     foreach (CTaxonomyManager::getYearsList() as $key => $value) {
         $year = CTaxonomyManager::getYear($key);
         if ($year->getId() !== $index->year_id) {
             $newIndex = new CRatingIndex();
             $newIndex->title = $index->title;
             $newIndex->manager_class = $index->manager_class;
             $newIndex->manager_method = $index->manager_method;
             $newIndex->year_id = $year->getId();
             $newIndex->isMultivalue = $index->isMultivalue;
             $newIndex->person_method = $index->person_method;
             $newIndex->save();
             foreach ($index->getIndexValues()->getItems() as $value) {
                 $newValue = new CRatingIndexValue();
                 $newValue->index_id = $newIndex->getId();
                 $newValue->fromTaxonomy = $value->fromTaxonomy;
                 $newValue->title = $value->title;
                 $newValue->value = $value->value;
                 $newValue->save();
             }
         }
     }
     // научно-методическая работа
     $taxonomy = new CTaxonomy();
     $taxonomy->name = "Виды научно-методической и учебной работы";
     $taxonomy->alias = "scientificWork";
     $taxonomy->save();
     $index = new CRatingIndex();
     $index->title = "Научно-методическая и учебная работа";
     $index->manager_class = "CTaxonomyManager";
     $index->manager_method = 'getTaxonomy("scientificWork")->getTerms()';
     $index->year_id = CUtils::getCurrentYear()->getId();
     $index->isMultivalue = 1;
     $index->save();
     $thisYear->add($index->getId(), $index);
     foreach (CActiveRecordProvider::getAllFromTable("spr_nauch_met_uch_rab")->getItems() as $item) {
         $term = new CTerm();
         $term->taxonomy_id = $taxonomy->getId();
         $term->name = $item->getItemValue("name");
         $term->save();
         $value = new CRatingIndexValue();
         $value->index_id = $index->id;
         $value->fromTaxonomy = 1;
         $value->title = $term->getId();
         $value->value = $item->getItemValue("rate");
         $value->save();
     }
     // показатели размножаем на все года
     foreach (CTaxonomyManager::getYearsList() as $key => $value) {
         $year = CTaxonomyManager::getYear($key);
         if ($year->getId() !== $index->year_id) {
             $newIndex = new CRatingIndex();
             $newIndex->title = $index->title;
             $newIndex->manager_class = $index->manager_class;
             $newIndex->manager_method = $index->manager_method;
             $newIndex->year_id = $year->getId();
             $newIndex->isMultivalue = $index->isMultivalue;
             $newIndex->save();
             foreach ($index->getIndexValues()->getItems() as $value) {
                 $newValue = new CRatingIndexValue();
                 $newValue->index_id = $newIndex->getId();
                 $newValue->fromTaxonomy = $value->fromTaxonomy;
                 $newValue->title = $value->title;
                 $newValue->value = $value->value;
                 $newValue->save();
             }
         }
     }
     // вычеты
     $taxonomy = new CTaxonomy();
     $taxonomy->name = "Виды вычетов";
     $taxonomy->alias = "takeouts";
     $taxonomy->save();
     $index = new CRatingIndex();
     $index->title = "Вычеты";
     $index->manager_class = "CTaxonomyManager";
     $index->manager_method = 'getTaxonomy("takeouts")->getTerms()';
     $index->year_id = CUtils::getCurrentYear()->getId();
     $index->isMultivalue = 1;
     $index->save();
     $thisYear->add($index->getId(), $index);
     foreach (CActiveRecordProvider::getAllFromTable("spr_vichet")->getItems() as $item) {
         $term = new CTerm();
         $term->taxonomy_id = $taxonomy->getId();
         $term->name = $item->getItemValue("name");
         $term->save();
         $value = new CRatingIndexValue();
         $value->index_id = $index->id;
         $value->fromTaxonomy = 1;
         $value->title = $term->getId();
         $value->value = $item->getItemValue("rate");
         $value->save();
     }
     // показатели размножаем на все года
     foreach (CTaxonomyManager::getYearsList() as $key => $value) {
         $year = CTaxonomyManager::getYear($key);
         if ($year->getId() !== $index->year_id) {
             $newIndex = new CRatingIndex();
             $newIndex->title = $index->title;
             $newIndex->manager_class = $index->manager_class;
             $newIndex->manager_method = $index->manager_method;
             $newIndex->year_id = $year->getId();
             $newIndex->isMultivalue = $index->isMultivalue;
             $newIndex->save();
             foreach ($index->getIndexValues()->getItems() as $value) {
                 $newValue = new CRatingIndexValue();
                 $newValue->index_id = $newIndex->getId();
                 $newValue->fromTaxonomy = $value->fromTaxonomy;
                 $newValue->title = $value->title;
                 $newValue->value = $value->value;
                 $newValue->save();
             }
         }
     }
 }
 public function actionGetDataForChart()
 {
     $data = array();
     if (array_key_exists("data", $_POST)) {
         $data = $_POST["data"];
     }
     // определяем, в каких годах искать
     $years = new CArrayList();
     if (array_key_exists("years", $data)) {
         foreach ($data['years'] as $item) {
             $year = CTaxonomyManager::getYear($item);
             if (!is_null($year)) {
                 $years->add($year->getId(), $year);
             }
         }
     } else {
         $years->add(CUtils::getCurrentYear()->getId(), CUtils::getCurrentYear());
     }
     // по каким показателям показывать
     $indexes = new CArrayList();
     if (array_key_exists("indexes", $data)) {
         foreach ($data["indexes"] as $item) {
             foreach (CRatingManager::getRatingIndexesByName($item)->getItems() as $index) {
                 if ($years->hasElement($index->year_id)) {
                     $indexes->add($index->getId(), $index);
                 }
             }
         }
     } else {
         foreach ($years->getItems() as $year) {
             foreach (CRatingManager::getRatingIndexesByYear($year)->getItems() as $index) {
                 $indexes->add($index->getId(), $index);
             }
         }
     }
     // по каким людям показывать
     $persons = new CArrayList();
     if (array_key_exists("persons", $data)) {
         foreach ($data["persons"] as $item) {
             $person = CStaffManager::getPerson($item);
             if (!is_null($person)) {
                 $persons->add($person->getId(), $person);
             }
         }
     } else {
         // показывать по всем, у кого показатели есть в указанных годах
         foreach (CStaffManager::getAllPersons()->getItems() as $person) {
             foreach ($years->getItems() as $year) {
                 foreach ($person->getRatingIndexesByYear($year)->getItems() as $index) {
                     if ($indexes->hasElement($index->getId())) {
                         $persons->add($person->getId(), $person);
                     }
                 }
             }
         }
     }
     $res = array();
     // начинаем собирать инфу по людям
     // подписи к осям
     $axis = array();
     $i = 0;
     foreach ($persons->getItems() as $person) {
         $i++;
         $axis[] = $person->getName();
         //$axis[] = $i;
     }
     // все показатели, которые есть у выбранных людей (id всех показателей)
     // за все годы
     $resIndexes = array();
     foreach ($persons->getItems() as $person) {
         foreach ($years->getItems() as $year) {
             foreach ($person->getRatingIndexesByYear($year)->getItems() as $index) {
                 if ($indexes->hasElement($index->getId())) {
                     $resIndexes[$index->title] = $index->title;
                 }
             }
         }
     }
     $indicators = array();
     // данные по годам
     // данные должны возвращаться в том же порядке, в котором у нас идут люди
     foreach ($resIndexes as $key => $value) {
         foreach ($years->getItems() as $year) {
             $data = array();
             // собираем данные по каждому человеку
             foreach ($persons->getItems() as $person) {
                 $indexValue = 0;
                 foreach ($person->getRatingIndexesByYear($year)->getItems() as $index) {
                     if ($index->title == $key) {
                         $indexValue = $index->getIndexValue();
                     }
                 }
                 $data[] = $indexValue;
             }
             $indicator = array("name" => $value . " (" . $year->name . ")", "data" => $data, "stack" => $year->name);
             $indicators[] = $indicator;
         }
     }
     $res["axis"] = $axis;
     $res["series"] = $indicators;
     echo json_encode($res);
 }
 public function actionStudentGroupsByYearJSON()
 {
     // сильно замучиваться не буду, ибо уже надоедать начало
     $res = array();
     foreach (CStaffManager::getStudentGroupsByYear(CTaxonomyManager::getYear(CRequest::getInt("id")))->getItems() as $group) {
         $res[] = $group->toArrayForJSON();
     }
     echo json_encode($res);
 }
 public function actionFillIndexes()
 {
     $form = new CPersonRatingAutofillForm();
     $form->setAttributes(CRequest::getArray($form::getClassName()));
     $year = CTaxonomyManager::getYear($form->year_id);
     // берем показатели указанного года
     foreach (CRatingManager::getRatingIndexesByYear($year)->getItems() as $index) {
         foreach ($form->persons as $personId) {
             $person = CStaffManager::getPerson($personId);
             if (!is_null($person)) {
                 // удаляем старые показатели
                 foreach (CActiveRecordProvider::getWithCondition(TABLE_PERSON_RATINGS, "person_id = " . $person->getId() . " and year_id = " . $year->getId())->getItems() as $item) {
                     $item->remove();
                 }
                 // если поле не многозначное, то способ вычисления лежит в показателе
                 if (!$index->isMultivalue()) {
                     if ($index->person_method != "") {
                         $v = null;
                         eval('$v = $person->' . $index->person_method . ';');
                         if (!is_null($v)) {
                             if (strtoupper(get_class($v)) == "CTERM") {
                                 if ($index->getIndexValues()->hasElement($v->getId())) {
                                     $personValue = new CPersonRatingIndex();
                                     $personValue->person_id = $person->getId();
                                     $personValue->year_id = $year->getId();
                                     $personValue->index_id = $index->getIndexValues()->getItem($v->getId())->getId();
                                     $personValue->save();
                                 }
                             }
                         }
                     }
                 } else {
                     /**
                      * Это многозначный показатель, вычисляется отдельно каждое значение
                      */
                     foreach ($index->getIndexValues()->getItems() as $indexValue) {
                         if ($indexValue->evaluate_code != "") {
                             if ($indexValue->evaluate_method == "1") {
                                 // это sql-запрос
                                 $query = $indexValue->evaluate_code;
                                 $query = str_replace("%person%", $person->getId(), $query);
                                 $query = str_replace("%year%", $year->getId(), $query);
                                 $res = mysql_query($query);
                                 if (mysql_errno() == 0) {
                                     while ($row = mysql_fetch_assoc($res)) {
                                         if (array_key_exists("res", $row)) {
                                             if ($row['res'] == "1") {
                                                 $personValue = new CPersonRatingIndex();
                                                 $personValue->person_id = $person->getId();
                                                 $personValue->year_id = $year->getId();
                                                 $personValue->index_id = $indexValue->getId();
                                                 $personValue->save();
                                             }
                                         }
                                         break;
                                     }
                                 }
                             } elseif ($indexValue->evaluate_method == "2") {
                                 // это php код
                                 $v = null;
                                 $code = $indexValue->evaluate_code;
                                 $code = str_replace("%person%", $person->getId(), $code);
                                 $code = str_replace("%year%", $year->getId(), $code);
                                 eval('$v = ' . $code . ';');
                                 if ($v === true) {
                                     $personValue = new CPersonRatingIndex();
                                     $personValue->person_id = $person->getId();
                                     $personValue->year_id = $year->getId();
                                     $personValue->index_id = $indexValue->getId();
                                     $personValue->save();
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     $this->redirect("persons.php?action=index");
 }