182 lines
6.6 KiB
PHP
182 lines
6.6 KiB
PHP
<?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
|
|
return [
|
|
'headers' => [
|
|
'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
|
'Content-Disposition' => 'attachment; filename=archive.xls'
|
|
],
|
|
'body' => file_get_contents($tmpFilename)
|
|
];
|
|
}
|
|
|
|
} |