Implemented Excel export of version
This commit is contained in:
parent
6af33306af
commit
e9579c8956
|
@ -0,0 +1,176 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Created by PhpStorm.
|
||||||
|
* User: lucas
|
||||||
|
* Date: 10/05/18
|
||||||
|
* Time: 13:03
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace api\module\department;
|
||||||
|
|
||||||
|
|
||||||
|
use database\core\Repo;
|
||||||
|
use database\repo\cours;
|
||||||
|
use database\repo\formation;
|
||||||
|
use database\repo\td;
|
||||||
|
use database\repo\tp;
|
||||||
|
use database\repo\ue;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Reader\Xls\Style\Border;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Style\Borders;
|
||||||
|
|
||||||
|
class exportController
|
||||||
|
{
|
||||||
|
|
||||||
|
public function get($args){
|
||||||
|
/** @var ue $ueRepo */
|
||||||
|
$ueRepo = Repo::getRepo("ue");
|
||||||
|
/** @var cours $cmRepo */
|
||||||
|
$cmRepo = Repo::getRepo("cours");
|
||||||
|
/** @var td $tdRepo */
|
||||||
|
$tdRepo = Repo::getRepo("td");
|
||||||
|
/** @var tp $tpRepo */
|
||||||
|
$tpRepo = Repo::getRepo("tp");
|
||||||
|
/** @var formation $formationRepo */
|
||||||
|
$formationRepo = Repo::getRepo("formation");
|
||||||
|
|
||||||
|
$ues = $ueRepo->exportUE();
|
||||||
|
$formations = [];
|
||||||
|
|
||||||
|
//cache formations labels
|
||||||
|
foreach ($formationRepo->get(null) as $form){
|
||||||
|
$formations[$form["idForm"]] = $form["labelForm"];
|
||||||
|
}
|
||||||
|
|
||||||
|
$formatFormations = function(String $formationsId) use ($formations) : String{
|
||||||
|
$returned = "";
|
||||||
|
foreach (json_decode($formationsId,true) as $form){
|
||||||
|
$returned .= $formations[$form]."+";
|
||||||
|
}
|
||||||
|
|
||||||
|
return rtrim($returned,"+");
|
||||||
|
};
|
||||||
|
|
||||||
|
$spreadsheet = new Spreadsheet();
|
||||||
|
$excel = $spreadsheet->getActiveSheet();
|
||||||
|
|
||||||
|
//set up base document
|
||||||
|
$arrayHeaders = ["Code","Intitulé","Statut","V.H.","Cours","NbGr","Enseignant","TD","NbGr","Enseignant","TP","NbGr","Enseignant","Equ. TD","Total"];
|
||||||
|
$excel->setCellValue("B2","CODIFICATION DES UE");
|
||||||
|
$i = 1;
|
||||||
|
foreach ($arrayHeaders as $header){
|
||||||
|
$excel->setCellValueByColumnAndRow($i,4,$header);
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
$excel->freezePane("O5");
|
||||||
|
|
||||||
|
//set up state variables
|
||||||
|
$currentFormation = null;
|
||||||
|
$currentLine = 5;
|
||||||
|
|
||||||
|
foreach ($ues as $ue){
|
||||||
|
if($currentFormation != $ue["labelFormation"]){
|
||||||
|
$currentFormation = $ue["labelFormation"];
|
||||||
|
$excel->setCellValue("A$currentLine",$ue["labelFormation"]);
|
||||||
|
$excel->getStyle("A$currentLine")->getFont()->setBold(true)->setSize(11);
|
||||||
|
$excel->getStyle("A$currentLine:O$currentLine")->getBorders()->getTop()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_DOUBLE);
|
||||||
|
$currentLine += 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
//get all groups data
|
||||||
|
$cm = $cmRepo->getGroups($ue["code"]);
|
||||||
|
$td = $tdRepo->getGroups($ue["code"]);
|
||||||
|
$tp = $tpRepo->getGroups($ue["code"]);
|
||||||
|
|
||||||
|
//set UE header
|
||||||
|
$nbrGroupeCM = count($cm);
|
||||||
|
$nbrGroupeTD = count($td);
|
||||||
|
$nbrGroupeTP = count($tp);
|
||||||
|
|
||||||
|
$volumeUE = $ue["volumeCours"] + $ue["volumeTD"] + $ue["volumeTP"];
|
||||||
|
$equiTDUE = $nbrGroupeCM*1.5*$ue["volumeCours"] + $nbrGroupeTD*$ue["volumeTD"] + $nbrGroupeTP*$ue["volumeTP"];
|
||||||
|
|
||||||
|
$excel->setCellValue("A$currentLine",$ue["code"]);
|
||||||
|
$excel->setCellValue("B$currentLine",$ue["label"]);
|
||||||
|
$excel->setCellValue("C$currentLine",$ue["required"] == 1? "OBL" : "OPT");
|
||||||
|
$excel->setCellValue("D$currentLine","$volumeUE");
|
||||||
|
$excel->setCellValue("E$currentLine","{$ue["volumeCours"]}");
|
||||||
|
$excel->setCellValue("F$currentLine","$nbrGroupeCM");
|
||||||
|
$excel->setCellValue("H$currentLine","{$ue["volumeTD"]}");
|
||||||
|
$excel->setCellValue("I$currentLine","$nbrGroupeTD");
|
||||||
|
$excel->setCellValue("K$currentLine","{$ue["volumeTP"]}");
|
||||||
|
$excel->setCellValue("L$currentLine","$nbrGroupeTP");
|
||||||
|
$excel->setCellValue("O$currentLine","$equiTDUE");
|
||||||
|
|
||||||
|
$excel->getStyle("A$currentLine:O$currentLine")->getFont()->setBold( true )->setSize(9);
|
||||||
|
$currentLine++;
|
||||||
|
|
||||||
|
$nbrLine = max($nbrGroupeCM,$nbrGroupeTD,$nbrGroupeTP)-1;
|
||||||
|
foreach (range(0,$nbrLine) as $n){
|
||||||
|
$excel->setCellValue("A$currentLine",$ue["code"]);
|
||||||
|
$excel->setCellValue("B$currentLine",$ue["label"]);
|
||||||
|
|
||||||
|
$equiTD = 0;
|
||||||
|
if(isset($cm[$n])){
|
||||||
|
$excel->setCellValue("E$currentLine","{$cm[$n]["volume"]}");
|
||||||
|
$excel->setCellValue("F$currentLine",$formatFormations($cm[$n]["formations"]));
|
||||||
|
$excel->setCellValue("G$currentLine",$cm[$n]["lastName"]." ".$cm[$n]["firstName"]);
|
||||||
|
$equiTD += 1.5*$cm[$n]["volume"];
|
||||||
|
}
|
||||||
|
|
||||||
|
if(isset($td[$n])){
|
||||||
|
$excel->setCellValue("H$currentLine","{$td[$n]["volume"]}");
|
||||||
|
$excel->setCellValue("I$currentLine",$formatFormations($td[$n]["formations"]));
|
||||||
|
$excel->setCellValue("J$currentLine",$td[$n]["lastName"]." ".$td[$n]["firstName"]);
|
||||||
|
$equiTD += $td[$n]["volume"];
|
||||||
|
}
|
||||||
|
|
||||||
|
if(isset($tp[$n])){
|
||||||
|
$excel->setCellValue("K$currentLine","{$tp[$n]["volume"]}");
|
||||||
|
$excel->setCellValue("L$currentLine",$formatFormations($tp[$n]["formations"]));
|
||||||
|
$excel->setCellValue("M$currentLine",$tp[$n]["lastName"]." ".$tp[$n]["firstName"]);
|
||||||
|
$equiTD += $tp[$n]["volume"];
|
||||||
|
}
|
||||||
|
|
||||||
|
$excel->setCellValue("N$currentLine","$equiTD");
|
||||||
|
|
||||||
|
$excel->getStyle("A$currentLine:O$currentLine")->getFont()->setSize(8);
|
||||||
|
|
||||||
|
$currentLine++;
|
||||||
|
}
|
||||||
|
$currentLine++;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//resize all columns
|
||||||
|
foreach(range('A','O') as $columnID) {
|
||||||
|
$excel->getColumnDimension($columnID)->setAutoSize(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
//set content type headers
|
||||||
|
header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
||||||
|
|
||||||
|
//reating writer
|
||||||
|
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Xls($spreadsheet);
|
||||||
|
|
||||||
|
//as phpSpreadSheet do not support output on the buffer, we have to write in a temp file then read it
|
||||||
|
|
||||||
|
//create temporary file;
|
||||||
|
$file = tmpfile();
|
||||||
|
|
||||||
|
//get URI
|
||||||
|
$metaDatas = stream_get_meta_data($file);
|
||||||
|
$tmpFilename = $metaDatas['uri'];
|
||||||
|
|
||||||
|
//close file pointer
|
||||||
|
fclose($file);
|
||||||
|
|
||||||
|
//write data
|
||||||
|
$writer->save("$tmpFilename");
|
||||||
|
|
||||||
|
//get file content
|
||||||
|
echo file_get_contents($tmpFilename);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -49,7 +49,11 @@ class PDOWrapper extends \PDO
|
||||||
if($this->stacking){
|
if($this->stacking){
|
||||||
return new PDOStatementWrapper($statement, $this);
|
return new PDOStatementWrapper($statement, $this);
|
||||||
}else{
|
}else{
|
||||||
return parent::prepare($statement, $options);
|
$st = parent::prepare($statement, $options);
|
||||||
|
if($st === false){
|
||||||
|
throw new \PDOException("There is an error in your SQL statement");
|
||||||
|
}
|
||||||
|
return $st;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -290,4 +290,13 @@ class ue extends Repo_i {
|
||||||
return $fetched;
|
return $fetched;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function exportUE() : array{
|
||||||
|
$st = $this->pdo->prepare("SELECT * FROM UE
|
||||||
|
LEFT JOIN Formation
|
||||||
|
ON UE.Formation_idFormation = Formation.idFormation
|
||||||
|
ORDER BY Formation_idFormation IS NULL DESC, Formation_idFormation ASC");
|
||||||
|
$st->execute();
|
||||||
|
return $st->fetchAll();
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -117,6 +117,13 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"export":{
|
||||||
|
"GET": {
|
||||||
|
"des": "Export the data of the current department and version to a Excel file",
|
||||||
|
"per": [["cas_admin"]],
|
||||||
|
"par": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
"version":{
|
"version":{
|
||||||
"switch":{
|
"switch":{
|
||||||
"GET": {
|
"GET": {
|
||||||
|
|
Loading…
Reference in New Issue