Exemplo n.º 1
0
 public function actionImportarcsv()
 {
     $model = new DisciplinaPeriodo(['scenario' => 'csv']);
     $erros = array();
     $erroFatal = '';
     $COD_CURSO = null;
     $NOME_DOCENTE = null;
     $COD_DISCIPLINA = null;
     $COD_TURMA = null;
     $NOME_UNIDADE = null;
     $NOME_DISCIPLINA = null;
     $ANO = null;
     $CH_TOTAL = null;
     $CREDITOS = null;
     $PERIODO = null;
     $DT_INICIO_PERIODO = null;
     $DT_FIM_PERIODO = null;
     $VAGAS_OFERECIDAS = null;
     $NOME_CURSO_DIPLOMA = null;
     if ($model->load(Yii::$app->request->post())) {
         $model->file = UploadedFile::getInstance($model, 'file');
         $uploadExists = 0;
         if ($model->file) {
             $imagepath = 'uploads/disciplinas-periodo/';
             $model->file_import = $imagepath . rand(10, 1000) . '-' . str_replace('', '-', $model->file->name);
             $bulkInsertArray = array();
             $bulkInsertArray2 = array();
             $uploadExists = 1;
         }
         if ($uploadExists) {
             $model->file->saveAs($model->file_import);
             $handle = fopen($model->file_import, 'r');
             if ($handle) {
                 $loop = 0;
                 while (($data = fgetcsv($handle, 0, ";")) != FALSE) {
                     $loop++;
                     //Encontra os índices das colunas
                     if ($loop == 1) {
                         foreach ($data as $key => $value) {
                             switch ($value) {
                                 case trim(strtoupper('COD_CURSO')):
                                     $COD_CURSO = $key;
                                     break;
                                 case trim(strtoupper('NOME_CURSO_DIPLOMA')):
                                     $NOME_CURSO_DIPLOMA = $key;
                                     break;
                                 case trim(strtoupper('NOME_DOCENTE')):
                                     $NOME_DOCENTE = $key;
                                     break;
                                 case trim(strtoupper('COD_DISCIPLINA')):
                                     $COD_DISCIPLINA = $key;
                                     break;
                                 case trim(strtoupper('COD_TURMA')):
                                     $COD_TURMA = $key;
                                     break;
                                 case trim(strtoupper('NOME_UNIDADE')):
                                     $NOME_UNIDADE = $key;
                                     break;
                                 case trim(strtoupper('NOME_DISCIPLINA')):
                                     $NOME_DISCIPLINA = $key;
                                     break;
                                 case trim(strtoupper('ANO')):
                                     $ANO = $key;
                                     break;
                                 case trim(strtoupper('PERIODO')):
                                     $PERIODO = $key;
                                     break;
                                 case trim(strtoupper('CH_TOTAL')):
                                     $CH_TOTAL = $key;
                                     break;
                                 case trim(strtoupper('CREDITOS')):
                                     $CREDITOS = $key;
                                     break;
                                 case trim(strtoupper('DT_INICIO_PERIODO')):
                                     $DT_INICIO_PERIODO = $key;
                                     break;
                                 case trim(strtoupper('DT_FIM_PERIODO')):
                                     $DT_FIM_PERIODO = $key;
                                     break;
                                 case trim(strtoupper('VAGAS_OFERECIDAS')):
                                     $VAGAS_OFERECIDAS = $key;
                                     break;
                             }
                         }
                         //Se registro de cabeçalho está inválido, então o arquivo está inválido e o procedimento é encerrado.
                         if (is_null($COD_DISCIPLINA) || is_null($NOME_DISCIPLINA) || is_null($COD_TURMA) || is_null($PERIODO) || is_null($ANO) || is_null($DT_INICIO_PERIODO) || is_null($DT_FIM_PERIODO) || is_null($COD_CURSO) || is_null($NOME_DOCENTE)) {
                             $erroFatal = 'O cabeçalho do arquivo está inválido. Coluna(s) obrigatória(s) ausente(s).<br><br>Colunas obrigatórias: COD_DISCIPLINA, NOME_DISCIPLINA, COD_TURMA, PERIODO, ANO, DT_INICIO_PERIODO, DT_FIM_PERIODO, COD_CURSO, NOME_DOCENTE';
                             break;
                         } else {
                             continue;
                             //É a linha de cabeçalho, então vai para o próximo registro.
                         }
                     }
                     if (count($data) == 1) {
                         continue;
                     }
                     //Linha vazia, então vai para o próximo registro.
                     $nomeUnidade = '';
                     $codDisciplina = '';
                     $nomeDisciplina = '';
                     $cargaHoraria = '';
                     $creditos = '';
                     $codTurma = '';
                     $qtdVagas = '';
                     $numPeriodo = '';
                     $anoPeriodo = '';
                     $date1 = '';
                     $date2 = '';
                     $codigoCurso = '';
                     $nomeCurso = '';
                     $nomeProfessor = '';
                     if ($NOME_UNIDADE != null) {
                         $nomeUnidade = trim(utf8_encode(addslashes(strtoupper($data[$NOME_UNIDADE]))));
                     }
                     if ($COD_DISCIPLINA != null) {
                         $codDisciplina = trim(utf8_encode(addslashes(strtoupper($data[$COD_DISCIPLINA]))));
                     }
                     if ($NOME_DISCIPLINA != null) {
                         $nomeDisciplina = trim(utf8_encode(addslashes(strtoupper($data[$NOME_DISCIPLINA]))));
                     }
                     if ($CH_TOTAL != null) {
                         $cargaHoraria = $data[$CH_TOTAL];
                     }
                     if ($CREDITOS != null) {
                         $creditos = $data[$CREDITOS];
                     }
                     if ($COD_TURMA != null) {
                         $codTurma = trim(utf8_encode(addslashes(strtoupper($data[$COD_TURMA]))));
                     }
                     if ($VAGAS_OFERECIDAS != null) {
                         $qtdVagas = $data[$VAGAS_OFERECIDAS];
                     }
                     if ($PERIODO != null) {
                         $numPeriodo = substr(trim(utf8_encode(addslashes(strtoupper($data[$PERIODO])))), 0, 1);
                     }
                     if ($ANO != null) {
                         $anoPeriodo = $data[$ANO];
                     }
                     if ($DT_INICIO_PERIODO != null) {
                         $date1 = trim(utf8_encode(addslashes(strtoupper($data[$DT_INICIO_PERIODO]))));
                     }
                     if ($DT_FIM_PERIODO != null) {
                         $date2 = trim(utf8_encode(addslashes(strtoupper($data[$DT_FIM_PERIODO]))));
                     }
                     if ($COD_CURSO != null) {
                         $codigoCurso = trim(utf8_encode(addslashes(strtoupper($data[$COD_CURSO]))));
                     }
                     if ($NOME_CURSO_DIPLOMA != null) {
                         $nomeCurso = trim(utf8_encode(addslashes($data[$NOME_CURSO_DIPLOMA])));
                     }
                     if ($NOME_DOCENTE != null) {
                         $nomeProfessor = trim(utf8_encode(addslashes(strtoupper($data[$NOME_DOCENTE]))));
                     }
                     //Se registro inválido, então vai para o próximo registro
                     $erro = '0';
                     if (empty($codDisciplina)) {
                         $erros[] = 'Erro na linha ' . $loop . '. O valor da coluna COD_DISCIPLINA está inválido.';
                         $erro = '1';
                     }
                     if (empty($nomeDisciplina)) {
                         $erros[] = 'Erro na linha ' . $loop . '. O valor da coluna NOME_DISCIPLINA está inválido.';
                         $erro = '1';
                     }
                     if (empty($codTurma)) {
                         $erros[] = 'Erro na linha ' . $loop . '. O valor da coluna COD_TURMA está inválido.';
                         $erro = '1';
                     }
                     if (empty($numPeriodo)) {
                         $erros[] = 'Erro na linha ' . $loop . '. O valor da coluna PERIODO está inválido.';
                         $erro = '1';
                     }
                     if (empty($anoPeriodo)) {
                         $erros[] = 'Erro na linha ' . $loop . '. O valor da coluna ANO está inválido.';
                         $erro = '1';
                     }
                     if (empty($date1)) {
                         $erros[] = 'Erro na linha ' . $loop . '. O valor da coluna DT_INICIO_PERIODO está inválido.';
                         $erro = '1';
                     }
                     if (empty($date2)) {
                         $erros[] = 'Erro na linha ' . $loop . '. O valor da coluna DT_FIM_PERIODO está inválido.';
                         $erro = '1';
                     }
                     if (empty($codigoCurso)) {
                         $erros[] = 'Erro na linha ' . $loop . '. O valor da coluna COD_CURSO está inválido.';
                         $erro = '1';
                     }
                     if (empty($nomeProfessor)) {
                         $erros[] = 'Erro na linha ' . $loop . '. O valor da coluna NOME_DOCENTE está inválido.';
                         $erro = '1';
                     }
                     if ($erro == '1') {
                         continue;
                     }
                     //Formata as datas
                     if ($date1 != null && !empty($date1)) {
                         $arrayDate = explode("/", $date1);
                         $dataInicioPeriodo = $arrayDate[2] . '-' . $arrayDate[1] . '-' . $arrayDate[0];
                     } else {
                         $dataInicioPeriodo = null;
                     }
                     if ($date2 != null && !empty($date2)) {
                         $arrayDate = explode("/", $date2);
                         $dataFimPeriodo = $arrayDate[2] . '-' . $arrayDate[1] . '-' . $arrayDate[0];
                     } else {
                         $dataFimPeriodo = null;
                     }
                     //Procura ID do Curso
                     $query = sprintf("SELECT id FROM curso WHERE UPPER(codigo) = '%s'", $codigoCurso);
                     $idCurso = Yii::$app->db->createCommand($query)->queryScalar();
                     //INSERT Tabela: curso
                     if (!$idCurso) {
                         Yii::$app->db->createCommand()->insert('curso', ['codigo' => $codigoCurso, 'nome' => $nomeCurso, 'max_horas' => 0])->execute();
                         $query = sprintf("SELECT id FROM curso WHERE codigo = '%s'", $codigoCurso);
                         $idCurso = Yii::$app->db->createCommand($query)->queryScalar();
                     }
                     //Procura ID do Professor
                     $query = sprintf("SELECT id FROM usuario WHERE perfil = 'Professor' AND UPPER(name) = '%s'", $nomeProfessor);
                     $idProfessor = Yii::$app->db->createCommand($query)->queryScalar();
                     //Se não localizar o professor, então vai para o próximo registro
                     if (!$idProfessor) {
                         $erros[] = 'Erro na linha ' . $loop . '. Professor (' . $nomeProfessor . ') não localizado no banco de dados.';
                         continue;
                     }
                     //Tabela: disciplina
                     $query = sprintf("SELECT id FROM disciplina WHERE codDisciplina = '%s'", $codDisciplina);
                     $idDisciplina = Yii::$app->db->createCommand($query)->queryScalar();
                     if ($idDisciplina) {
                         //Quando a disciplina não possui monitoria, então não se cadastra em disciplina-periodo
                         $query = sprintf("SELECT possuiMonitoria FROM disciplina WHERE id = '%s'", $idDisciplina);
                         $possuiMonitoria = Yii::$app->db->createCommand($query)->queryScalar();
                         if (!$possuiMonitoria) {
                             continue;
                         }
                         $arrayUpdate = ['nomeDisciplina' => $nomeDisciplina, 'cargaHoraria' => $cargaHoraria, 'creditos' => $creditos];
                         Yii::$app->db->createCommand()->update('disciplina', $arrayUpdate, 'id=' . $idDisciplina)->execute();
                     } else {
                         //if (array_search($codDisciplina, array_column($bulkInsertArray, 'codDisciplina'))) {
                         //    $bulkInsertArray[]=[
                         //       'codDisciplina' => $codDisciplina,
                         //       'nomeDisciplina' => $nomeDisciplina,
                         //       'cargaHoraria' => $cargaHoraria,
                         //       'creditos' => $creditos,
                         //   ];
                         //}
                         $arrayInsert = ['codDisciplina' => $codDisciplina, 'nomeDisciplina' => $nomeDisciplina, 'cargaHoraria' => $cargaHoraria, 'creditos' => $creditos];
                         Yii::$app->db->createCommand()->insert('disciplina', $arrayInsert)->execute();
                     }
                     //Tabela: disciplina_periodo
                     $query = sprintf("SELECT id FROM disciplina WHERE codDisciplina = '%s'", $codDisciplina);
                     $idDisciplina = Yii::$app->db->createCommand($query)->queryScalar();
                     $query = sprintf("SELECT id FROM disciplina_periodo WHERE idDisciplina='%s' and codTurma='%s' and anoPeriodo='%s' and numPeriodo='%s'", $idDisciplina, $codTurma, $anoPeriodo, $numPeriodo);
                     $result = Yii::$app->db->createCommand($query)->queryScalar();
                     if ($result) {
                         $arrayUpdate = ['nomeUnidade' => $nomeUnidade, 'qtdVagas' => $qtdVagas, 'dataInicioPeriodo' => $dataInicioPeriodo, 'dataFimPeriodo' => $dataFimPeriodo, 'idCurso' => $idCurso, 'idProfessor' => $idProfessor];
                         Yii::$app->db->createCommand()->update('disciplina_periodo', $arrayUpdate, 'id=' . $result)->execute();
                     } else {
                         //if (array_search($idDisciplina, array_column($bulkInsertArray2, 'idDisciplina'))) {
                         //    $bulkInsertArray2[]=[
                         //        'idDisciplina' => $idDisciplina,
                         //        'numPeriodo' => $numPeriodo,
                         //        'anoPeriodo' => $anoPeriodo,
                         //        'codTurma' => $codTurma,
                         //        'nomeUnidade' => $nomeUnidade,
                         //        'qtdVagas' => $qtdVagas,
                         //        'dataInicioPeriodo' => $dataInicioPeriodo,
                         //        'dataFimPeriodo' => $dataFimPeriodo,
                         //        'idCurso' => $idCurso
                         //    ];
                         //}
                         $arrayInsert = ['idDisciplina' => $idDisciplina, 'numPeriodo' => $numPeriodo, 'anoPeriodo' => $anoPeriodo, 'codTurma' => $codTurma, 'nomeUnidade' => $nomeUnidade, 'qtdVagas' => $qtdVagas, 'dataInicioPeriodo' => $dataInicioPeriodo, 'dataFimPeriodo' => $dataFimPeriodo, 'idCurso' => $idCurso, 'idProfessor' => $idProfessor];
                         Yii::$app->db->createCommand()->insert('disciplina_periodo', $arrayInsert)->execute();
                     }
                 }
                 fclose($handle);
                 unlink($model->file_import);
                 //Apaga o arquivo
                 //$columnNameArray1 = ['codDisciplina', 'nomeDisciplina', 'cargaHoraria', 'creditos'];
                 //Yii::$app->db->createCommand()->batchInsert('disciplina', $columnNameArray1, $bulkInsertArray)->execute();
                 //$columnNameArray2 = ['idDisciplina', 'numPeriodo', 'anoPeriodo', 'codTurma', 'nomeUnidade', 'qtdVagas', 'dataInicioPeriodo', 'dataFimPeriodo', 'idCurso'];
                 //Yii::$app->db->createCommand()->batchInsert('disciplina_periodo', $columnNameArray2, $bulkInsertArray2)->execute();
             }
         }
         //return $this->redirect(['index']);
         return $this->render('importarcsv', ['model' => $model, 'etapa' => '2', 'erroFatal' => $erroFatal, 'erros' => $erros]);
     } else {
         return $this->render('importarcsv', ['model' => $model, 'etapa' => '1', 'erroFatal' => '', 'erros' => null]);
     }
 }
 public function actionImportarcsv()
 {
     $model = new DisciplinaPeriodo(['scenario' => 'csv']);
     /*
     if (Yii::$app->request->get('success') != null) { 
         return $this->render('importarcsv', [
             'model' => $model,
             'success' => $success]);
     } else {
         return $this->render('importarcsv', [
             'model' => $model,
             'success' => '']);
     }
     */
     if ($model->load(Yii::$app->request->post())) {
         $model->file = UploadedFile::getInstance($model, 'file');
         $uploadExists = 0;
         if ($model->file) {
             $imagepath = 'uploads/disciplinas-periodo/';
             $model->file_import = $imagepath . rand(10, 1000) . '-' . str_replace('', '-', $model->file->name);
             $bulkInsertArray = array();
             $bulkInsertArray2 = array();
             $uploadExists = 1;
         }
         if ($uploadExists) {
             $model->file->saveAs($model->file_import);
             $handle = fopen($model->file_import, 'r');
             if ($handle) {
                 while (($data = fgetcsv($handle, 0, ",")) != FALSE) {
                     $nomeUnidade = trim(utf8_encode(addslashes(strtoupper($data[0]))));
                     if ($nomeUnidade == 'NOME_UNIDADE') {
                         continue;
                     }
                     //Linha de cabeçalho, então vai para o próximo registro.
                     $codDisciplina = trim(utf8_encode(addslashes(strtoupper($data[5]))));
                     $nomeDisciplina = trim(utf8_encode(addslashes(strtoupper($data[1]))));
                     $cargaHoraria = $data[13];
                     $creditos = $data[14];
                     $codTurma = trim(utf8_encode(addslashes(strtoupper($data[2]))));
                     $qtdVagas = $data[23];
                     $numPeriodo = substr(trim(utf8_encode(addslashes(strtoupper($data[15])))), 0, 1);
                     $anoPeriodo = $data[10];
                     $date1 = trim(utf8_encode(addslashes(strtoupper($data[18]))));
                     $date2 = trim(utf8_encode(addslashes(strtoupper($data[19]))));
                     if ($date1 != null && !empty($date1)) {
                         $arrayDate = explode("/", $date1);
                         $dataInicioPeriodo = $arrayDate[2] . '-' . $arrayDate[1] . '-' . $arrayDate[0];
                     } else {
                         $dataInicioPeriodo = null;
                     }
                     if ($date2 != null && !empty($date2)) {
                         $arrayDate = explode("/", $date2);
                         $dataFimPeriodo = $arrayDate[2] . '-' . $arrayDate[1] . '-' . $arrayDate[0];
                     } else {
                         $dataFimPeriodo = null;
                     }
                     $siglaCurso = trim(utf8_encode(addslashes(strtoupper($data[16]))));
                     $query = sprintf("SELECT ID FROM curso WHERE sigla = '%s'", $siglaCurso);
                     $idCurso = Yii::$app->db->createCommand($query)->queryScalar();
                     //Tabela: curso
                     if (!$idCurso) {
                         Yii::$app->db->createCommand()->insert('curso', ['sigla' => $siglaCurso])->execute();
                         $query = sprintf("SELECT ID FROM curso WHERE sigla = '%s'", $siglaCurso);
                         $idCurso = Yii::$app->db->createCommand($query)->queryScalar();
                     }
                     //Tabela: disciplina
                     $query = sprintf("SELECT id FROM disciplina WHERE codDisciplina = '%s'", $codDisciplina);
                     $idDisciplina = Yii::$app->db->createCommand($query)->queryScalar();
                     if ($idDisciplina) {
                         $arrayUpdate = ['nomeDisciplina' => $nomeDisciplina, 'cargaHoraria' => $cargaHoraria, 'creditos' => $creditos];
                         Yii::$app->db->createCommand()->update('disciplina', $arrayUpdate, 'id=' . $idDisciplina)->execute();
                     } else {
                         //if (array_search($codDisciplina, array_column($bulkInsertArray, 'codDisciplina'))) {
                         //    $bulkInsertArray[]=[
                         //       'codDisciplina' => $codDisciplina,
                         //       'nomeDisciplina' => $nomeDisciplina,
                         //       'cargaHoraria' => $cargaHoraria,
                         //       'creditos' => $creditos,
                         //   ];
                         //}
                         $arrayInsert = ['codDisciplina' => $codDisciplina, 'nomeDisciplina' => $nomeDisciplina, 'cargaHoraria' => $cargaHoraria, 'creditos' => $creditos];
                         Yii::$app->db->createCommand()->insert('disciplina', $arrayInsert)->execute();
                     }
                     //Tabela: disciplina_periodo
                     $query = sprintf("SELECT id FROM disciplina WHERE codDisciplina = '%s'", $codDisciplina);
                     $idDisciplina = Yii::$app->db->createCommand($query)->queryScalar();
                     $query = sprintf("SELECT id FROM disciplina_periodo WHERE idDisciplina='%s' and codTurma='%s' and anoPeriodo='%s' and numPeriodo='%s'", $idDisciplina, $codTurma, $anoPeriodo, $numPeriodo);
                     $result = Yii::$app->db->createCommand($query)->queryScalar();
                     if ($result) {
                         $arrayUpdate = ['nomeUnidade' => $nomeUnidade, 'qtdVagas' => $qtdVagas, 'dataInicioPeriodo' => $dataInicioPeriodo, 'dataFimPeriodo' => $dataFimPeriodo, 'idCurso' => $idCurso];
                         Yii::$app->db->createCommand()->update('disciplina_periodo', $arrayUpdate, 'id=' . $result)->execute();
                     } else {
                         //if (array_search($idDisciplina, array_column($bulkInsertArray2, 'idDisciplina'))) {
                         //    $bulkInsertArray2[]=[
                         //        'idDisciplina' => $idDisciplina,
                         //        'numPeriodo' => $numPeriodo,
                         //        'anoPeriodo' => $anoPeriodo,
                         //        'codTurma' => $codTurma,
                         //        'nomeUnidade' => $nomeUnidade,
                         //        'qtdVagas' => $qtdVagas,
                         //        'dataInicioPeriodo' => $dataInicioPeriodo,
                         //        'dataFimPeriodo' => $dataFimPeriodo,
                         //        'idCurso' => $idCurso
                         //    ];
                         //}
                         $arrayInsert = ['idDisciplina' => $idDisciplina, 'numPeriodo' => $numPeriodo, 'anoPeriodo' => $anoPeriodo, 'codTurma' => $codTurma, 'nomeUnidade' => $nomeUnidade, 'qtdVagas' => $qtdVagas, 'dataInicioPeriodo' => $dataInicioPeriodo, 'dataFimPeriodo' => $dataFimPeriodo, 'idCurso' => $idCurso];
                         Yii::$app->db->createCommand()->insert('disciplina_periodo', $arrayInsert)->execute();
                     }
                 }
                 fclose($handle);
                 //$columnNameArray1 = ['codDisciplina', 'nomeDisciplina', 'cargaHoraria', 'creditos'];
                 //Yii::$app->db->createCommand()->batchInsert('disciplina', $columnNameArray1, $bulkInsertArray)->execute();
                 //$columnNameArray2 = ['idDisciplina', 'numPeriodo', 'anoPeriodo', 'codTurma', 'nomeUnidade', 'qtdVagas', 'dataInicioPeriodo', 'dataFimPeriodo', 'idCurso'];
                 //Yii::$app->db->createCommand()->batchInsert('disciplina_periodo', $columnNameArray2, $bulkInsertArray2)->execute();
             }
         }
         return $this->redirect(['index']);
     } else {
         return $this->render('importarcsv', ['model' => $model]);
     }
 }