public function actionDeleteRabotnikaKomissii()
 {
     \Yii::$app->response->format = Response::FORMAT_JSON;
     $id = $_REQUEST['id'];
     $deleting_rabotnik = RabotnikAttestacionnojKomissii::findOne($id);
     $polzovatel = Polzovatel::find()->where(['fiz_lico' => $deleting_rabotnik->fiz_lico])->one();
     $countOthers = RabotnikAttestacionnojKomissii::find()->where(['fiz_lico' => $deleting_rabotnik->fiz_lico])->andWhere(['!=', 'id', $deleting_rabotnik->id])->count();
     if ($countOthers == 0) {
         $polzovatel->deleteRol(Rol::SOTRUDNIK_ATTESTACIONNOJ_KOMISSII);
     }
     $countOthersPredsedatel = RabotnikAttestacionnojKomissii::find()->where(['fiz_lico' => $deleting_rabotnik->fiz_lico])->andWhere(['!=', 'id', $deleting_rabotnik->id])->andWhere(['predsedatel' => true])->count();
     if ($countOthersPredsedatel == 0) {
         $polzovatel->deleteRol(Rol::RUKOVODITEL_ATTESTACIONNOJ_KOMISSII);
     }
     $raspredelenieZayavlenij = RaspredelenieZayavlenijNaAttestaciyu::find()->where(['rabotnik_attestacionnoj_komissii' => $deleting_rabotnik->id])->one();
     $result = new JsResponse();
     if ($raspredelenieZayavlenij) {
         $result->type = JsResponse::ERROR;
         $result->msg = 'На данного работника задано распределение заявлений';
     } else {
         $transaction = \Yii::$app->db->beginTransaction();
         try {
             if ($deleting_rabotnik) {
                 $deleting_rabotnik->delete();
             }
             $polzovatel->save();
             $transaction->commit();
             $result->msg = JsResponse::MSG_OPERATION_SUCCESS;
         } catch (Exception $e) {
             $transaction->rollBack();
             $result->type = JsResponse::ERROR;
             $result->msg = $e->getMessage();
             // JsResponse::MSG_OPERATION_ERROR.' Запись не удалена.';
         }
     }
     return $result;
 }
 public function actionGetZayavleniya($period, $komissiya, $allUnfinished)
 {
     $allUnfinished = $allUnfinished == 'true' ? true : false;
     \Yii::$app->response->format = Response::FORMAT_JSON;
     $sql = 'SELECT zna.*,
               string_agg(rzna.rabotnik_attestacionnoj_komissii::character varying,\',\') as raspredelenie,
               sum(ol.listy_kolichestvo) as listy_kolichestvo,
               sum(ol.zapolnennye_list_kolichestvo) as zapolnennye_list_kolichestvo
             FROM zayavlenie_na_attestaciyu as zna
               LEFT JOIN raspredelenie_zayavlenij_na_attestaciyu as rzna on zna.id = rzna.zayavlenie_na_attestaciyu
               LEFT JOIN rabotnik_attestacionnoj_komissii as rak on rzna.rabotnik_attestacionnoj_komissii = rak.id
               left join
               (
                 select
                   rabotnik_komissii,
                   zayavlenie_na_attestaciyu,
                   count(1) as listy_kolichestvo,
                   sum(case when status = \'zapolneno\' then 1 else 0 end) zapolnennye_list_kolichestvo
                 from otsenochnyj_list_zayavleniya
                 GROUP BY rabotnik_komissii,zayavlenie_na_attestaciyu
               ) as ol on rak.fiz_lico = ol.rabotnik_komissii and zna.id = ol.zayavlenie_na_attestaciyu
             WHERE ' . ($allUnfinished ? '' : 'zna.vremya_provedeniya = :period AND') . ' zna.status = \'podpisano_otdelom_attestacii\'
                   AND zna.rabota_dolzhnost in
                          (
                            SELECT dak.dolzhnost FROM rabotnik_attestacionnoj_komissii as rak
                              INNER JOIN dolzhnost_attestacionnoj_komissii as dak on rak.attestacionnaya_komissiya = dak.attestacionnaya_komissiya
                            WHERE rak.attestacionnaya_komissiya = :komissiya
                          )
                  ' . ($allUnfinished ? ' AND coalesce(listy_kolichestvo,10) > coalesce(zapolnennye_list_kolichestvo,1)' : '') . '
             GROUP BY zna.id';
     //return [$sql,$period,$komissiya,$allUnfinished];
     $zayvleniya = [];
     $q = \Yii::$app->db->createCommand($sql)->bindValue(':komissiya', $komissiya);
     if (!$allUnfinished) {
         $q->bindValue(':period', $period);
     }
     $q = $q->queryAll();
     foreach ($q as $item) {
         $zayavlenie = new Zayavlenie();
         $zayavlenie->id = $item['id'];
         $zayavlenie->familiya = $item['familiya'];
         $zayavlenie->imya = $item['imya'];
         $zayavlenie->otchestvo = $item['otchestvo'];
         $zayavlenie->raspredelenie = $item['raspredelenie'] != null ? array_map('intval', explode(',', $item['raspredelenie'])) : [];
         $zayavlenie->raspredelenieCopy = $zayavlenie->raspredelenie;
         $statuses = RaspredelenieZayavlenijNaAttestaciyu::find()->joinWith('rabotnikAttestacionnojKomissiiRel')->where(['raspredelenie_zayavlenij_na_attestaciyu.zayavlenie_na_attestaciyu' => $item['id']])->asArray()->all();
         foreach ($statuses as $status) {
             $zayavlenie->statuses[$status['rabotnikAttestacionnojKomissiiRel']['fiz_lico']] = $status;
         }
         $sql = 'select alz.id, alz.rabotnik_komissii, alz.zayavlenie_na_attestaciyu,
                        sum(solz.bally) as bally, alz.nazvanie
                 from otsenochnyj_list_zayavleniya as alz
                 inner join struktura_otsenochnogo_lista_zayvaleniya as solz on alz.id = solz.otsenochnyj_list_zayavleniya
                 where solz.uroven = 1
                       and alz.zayavlenie_na_attestaciyu = :zayavlenie
                 GROUP BY alz.id, alz.zayavlenie_na_attestaciyu, alz.rabotnik_komissii';
         $otsenki = [];
         $ostenkiData = \Yii::$app->db->createCommand($sql)->bindValue(':zayavlenie', $item['id'])->queryAll();
         foreach ($ostenkiData as $item) {
             $otsenki[$item['rabotnik_komissii']][] = $item;
         }
         $zayavlenie->otsenki = $otsenki;
         //                OtsenochnyjListZayavleniya::find()
         //                ->joinWith('strukturaOtsenochnogoListaZayvaleniyaRel')
         //                ->select([
         //                    'otsenochnyj_list_zayavleniya.id',
         //                    'otsenochnyj_list_zayavleniya.zayavlenie_na_attestaciyu',
         //                    'sum(struktura_otsenochnogo_lista_zayvaleniya.bally) as bally'
         //                ])
         //                ->where(['otsenochnyj_list_zayavleniya.zayavlenie_na_attestaciyu'=>$item['id']])
         //                ->andWhere(['struktura_otsenochnogo_lista_zayvaleniya.uroven'=>1])
         //                ->groupBy([
         //                    'otsenochnyj_list_zayavleniya.zayavlenie_na_attestaciyu',
         //                    'otsenochnyj_list_zayavleniya.id'
         //                ])
         //                ->all();
         $zayvleniya[] = $zayavlenie;
     }
     return $zayvleniya;
 }
 public function actionOtsenki()
 {
     \Yii::$app->response->format = Response::FORMAT_JSON;
     $response = new JsResponse();
     $error = '';
     $fizLico = ApiGlobals::getFizLicoPolzovatelyaId();
     $zayavlenieId = $_REQUEST['zayavlenie_id'];
     $ajax = $_REQUEST['ajax'];
     $rabotnik = RabotnikAttestacionnojKomissii::find()->where(['fiz_lico' => $fizLico])->one();
     /**
      * @var ZayavlenieNaAttestaciyu $zayavlenie
      */
     $zayavlenie = ZayavlenieNaAttestaciyu::find()->joinWith('portfolioFajlRel')->joinWith('varIspytanie3FajlRel')->joinWith('prezentatsiyaFajlRel')->joinWith('otraslevoeSoglashenieZayavleniyaRel')->where(['zayavlenie_na_attestaciyu.id' => $zayavlenieId])->one();
     $raspredelenie = RaspredelenieZayavlenijNaAttestaciyu::find()->joinWith('rabotnikAttestacionnojKomissiiRel')->where(['rabotnik_attestacionnoj_komissii.fiz_lico' => $fizLico])->andWhere(['zayavlenie_na_attestaciyu' => $zayavlenieId])->exists();
     $r = RaspredelenieZayavlenijNaAttestaciyu::find()->joinWith('rabotnikAttestacionnojKomissiiRel')->where(['rabotnik_attestacionnoj_komissii.fiz_lico' => $fizLico])->andWhere(['zayavlenie_na_attestaciyu' => $zayavlenieId])->all();
     $first = function ($array) {
         if (count($array) > 0) {
             return $array[0];
         } else {
             return false;
         }
     };
     if ($raspredelenie) {
         $transaction = \Yii::$app->db->beginTransaction();
         try {
             $postoyannieIspyetaniya = [PostoyannoeIspytanie::getPortfolioId()];
             $variativnoeIspytanie = [];
             if ($zayavlenie->na_kategoriyu == KategoriyaPedRabotnika::VYSSHAYA_KATEGORIYA) {
                 if (count($zayavlenie->otraslevoeSoglashenieZayavleniyaRel) == 0) {
                     $variativnoeIspytanie[] = $zayavlenie->var_ispytanie_3;
                     $postoyannieIspyetaniya[] = PostoyannoeIspytanie::getSpdId();
                 }
             }
             $otsenochnieListy = OtsenochnyjList::find()->joinWith('ispytanieOtsenochnogoListaRel')->where(['in', 'ispytanie_otsenochnogo_lista.postoyannoe_ispytanie', $postoyannieIspyetaniya])->orWhere(['in', 'ispytanie_otsenochnogo_lista.var_ispytanie_3', $variativnoeIspytanie])->all();
             foreach ($otsenochnieListy as $list) {
                 /**
                  * @var OtsenochnyjList $list
                  */
                 if (!OtsenochnyjListZayavleniya::find()->where(['otsenochnij_list' => $list->id])->andWhere(['rabotnik_komissii' => $fizLico])->andWhere(['zayavlenie_na_attestaciyu' => $zayavlenieId])->exists()) {
                     $new_ol_zayvaleniya = new OtsenochnyjListZayavleniya();
                     $new_ol_zayvaleniya->otsenochnijList = $list->id;
                     $new_ol_zayvaleniya->rabotnikKomissii = $fizLico;
                     $new_ol_zayvaleniya->zayavlenieNaAttestaciyu = $zayavlenieId;
                     $ispytanie = $first($list->ispytanieOtsenochnogoListaRel);
                     if ($ispytanie && $ispytanie->postoyannoeIspytanie) {
                         $new_ol_zayvaleniya->postoyannoeIspytanie = $ispytanie->postoyannoeIspytanie;
                     }
                     if ($ispytanie && $ispytanie->var_ispytanie_3) {
                         $new_ol_zayvaleniya->var_ispytanie_3 = $ispytanie->var_ispytanie_3;
                     }
                     $new_ol_zayvaleniya->nazvanie = $list->nazvanie;
                     $new_ol_zayvaleniya->minBallPervayaKategoriya = $list->minBallPervayaKategoriya;
                     $new_ol_zayvaleniya->minBallVisshayaKategoriya = $list->minBallVisshayaKategoriya;
                     $new_ol_zayvaleniya->save();
                     $sql = '
                       INSERT INTO struktura_otsenochnogo_lista_zayvaleniya
                       (otsenochnyj_list_zayavleniya,nazvanie,max_bally, nomer, uroven, struktura_otsenochnogo_lista, roditel)
                       select :ol, sol.nazvanie, sol.bally,
                           case when sol.roditel is not null
                             then sol_roditel.nomer||\'.\'||sol.nomer
                             else cast(sol.nomer as varchar)
                           end as nomer,
                           case when sol.roditel is not null
                             then 2
                             else 1
                           end as uroven,
                           sol.id, sol.roditel
                       from otsenochnyj_list as ol
                       inner join struktura_otsenochnogo_lista as sol on ol.id = sol.otsenochnyj_list
                       left join struktura_otsenochnogo_lista as sol_roditel on sol.roditel = sol_roditel.id
                       inner join ispytanie_otsenochnogo_lista as iol on ol.id = iol.otsenochnyj_list
                       where ol.id = ' . $list->id . ' and ' . ($ispytanie->var_ispytanie_3 ? 'iol.var_ispytanie_3=:isp' : 'iol.postoyannoe_ispytanie=:isp') . '
                       order by nomer
                     ';
                     \Yii::$app->db->createCommand($sql)->bindValue(':ol', $new_ol_zayvaleniya->id)->bindValue(':isp', $ispytanie->var_ispytanie_3 ? $ispytanie->var_ispytanie_3 : $ispytanie->postoyannoeIspytanie)->execute();
                 }
             }
             $transaction->commit();
         } catch (Exception $e) {
             $transaction->rollBack();
             $error = 'Оценочный лист не сформирован' . $e->getMessage();
         }
     } else {
         $error = 'Недоступное действие для данного пользователя';
     }
     $listy = OtsenochnyjListZayavleniya::find()->joinWith(['strukturaOtsenochnogoListaZayvaleniyaRel' => function ($query) {
         /**
          * @var ActiveQuery $query
          */
         $query->orderBy(new Expression('cast(struktura_otsenochnogo_lista_zayvaleniya.nomer as FLOAT)'));
     }])->where(['otsenochnyj_list_zayavleniya.rabotnik_komissii' => $fizLico])->andWhere(['otsenochnyj_list_zayavleniya.zayavlenie_na_attestaciyu' => $zayavlenieId])->orderBy(new Expression('otsenochnyj_list_zayavleniya.id'))->all();
     $result = [];
     foreach ($listy as $list) {
         /**
          * @var OtsenochnyjListZayavleniya $list
          */
         if ($list->postoyannoeIspytanie == PostoyannoeIspytanie::getPortfolioId()) {
             //$result[] =$list->status;
             $portfolio = PostoyannoeIspytanie::find()->where(['id' => PostoyannoeIspytanie::getPortfolioId()])->one();
             $result[] = new \app\models\sotrudnik_att_komissii\OtsenochnyjList(['ispytanie_name' => $portfolio->nazvanie, 'file_name' => $zayavlenie->portfolioFajlRel ? $zayavlenie->portfolioFajlRel->vneshnee_imya_fajla : '', 'file_link' => $zayavlenie->portfolioFajlRel ? $zayavlenie->portfolioFajlRel->getUri() : '', 'list' => $list, 'struktura' => $list->strukturaOtsenochnogoListaZayvaleniyaRel]);
         } else {
             if ($list->postoyannoeIspytanie == PostoyannoeIspytanie::getSpdId()) {
                 //$result[] =$list->status;
                 $spd = PostoyannoeIspytanie::find()->where(['id' => PostoyannoeIspytanie::getSpdId()])->one();
                 $result[] = new \app\models\sotrudnik_att_komissii\OtsenochnyjList(['ispytanie_name' => $spd->nazvanie, 'file_name' => $zayavlenie->prezentatsiyaFajlRel ? $zayavlenie->prezentatsiyaFajlRel->vneshnee_imya_fajla : '', 'file_link' => $zayavlenie->prezentatsiyaFajlRel ? $zayavlenie->prezentatsiyaFajlRel->getUri() : '', 'list' => $list, 'struktura' => $list->strukturaOtsenochnogoListaZayvaleniyaRel]);
             } else {
                 if ($list->varIspytanie_3) {
                     //$result[] =$list->status;
                     $varIspytanie3 = AttestacionnoeVariativnoeIspytanie_3::find()->where(['id' => $list->varIspytanie_3])->one();
                     $result[] = new \app\models\sotrudnik_att_komissii\OtsenochnyjList(['ispytanie_name' => $varIspytanie3->nazvanie, 'file_name' => $zayavlenie->varIspytanie3FajlRel ? $zayavlenie->varIspytanie3FajlRel->vneshnee_imya_fajla : '', 'file_link' => $zayavlenie->varIspytanie3FajlRel ? $zayavlenie->varIspytanie3FajlRel->getUri() : '', 'list' => $list, 'struktura' => $list->strukturaOtsenochnogoListaZayvaleniyaRel]);
                 }
             }
         }
     }
     if ($error) {
         $response->type = JsResponse::ERROR;
         $response->msg = $error;
     } else {
         $response->data = $result;
     }
     return $response;
 }