185 lines
6.2 KiB
PHP
185 lines
6.2 KiB
PHP
<?php
|
|
require_once($_SERVER['DOCUMENT_ROOT']."/config.php");
|
|
$time_start = microtime(true);
|
|
|
|
set_time_limit(0);
|
|
ini_set('memory_limit', '8192M');
|
|
/*error_reporting(E_ALL | E_STRICT);
|
|
ini_set('display_errors', 1);*/
|
|
$data = json_decode(file_get_contents("php://input"));
|
|
//var_dump($data);
|
|
$user_id = $data->user_id;
|
|
header('Content-Type: application/json');
|
|
|
|
$user_id = (int)($_SESSION['id']);
|
|
$date = date('d.m.Y');
|
|
|
|
require_once($_SERVER['DOCUMENT_ROOT'].'/vendor/autoload.php');
|
|
|
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
|
|
|
|
|
|
$spreadsheet = new Spreadsheet();
|
|
|
|
|
|
$name = 'raport_'.$date.'.xlsx';
|
|
$name_file = $_SERVER['DOCUMENT_ROOT'].'/server/excel/'.$user_id.'/raport_'.$date.'.xlsx';
|
|
$name_file_json = $_SERVER['DOCUMENT_ROOT'].'/server/excel/'.$user_id.'/raport_'.$date.'.json';
|
|
$name_file_main_json = $_SERVER['DOCUMENT_ROOT'] . '/' . '/server/excel/'.$user_id.'/raport_main_'.$date;
|
|
$name_file_main_setting = $_SERVER['DOCUMENT_ROOT'] . '/' . '/server/excel/'.$user_id.'/raport_setting_'.$date.'.json';
|
|
$name_file_write = $_SERVER['DOCUMENT_ROOT'] . '/' . '/server/excel/'.$user_id.'/raport_write_'.$date.'.json';
|
|
|
|
$setting_str = file_get_contents($name_file_main_setting);
|
|
$columnsTemp = json_decode($setting_str, true);
|
|
if(file_exists($name_file_main_setting))
|
|
unlink($name_file_main_setting);
|
|
if(file_exists($name_file_json))
|
|
unlink($name_file_json);
|
|
//var_dump($columnsTemp);
|
|
if(!empty($columnsTemp['fields_fixes'])){
|
|
$columns = $columnsTemp['fields_fixes'];
|
|
}
|
|
|
|
|
|
if(!empty($columnsTemp['fields_castom'])){
|
|
$columnsCastom = $columnsTemp['fields_castom'];
|
|
}
|
|
|
|
if(!empty($columnsTemp['fields_funnels'])){
|
|
$columnsFunnels = $columnsTemp['fields_funnels'];
|
|
}
|
|
|
|
$nameRaport = 'Отчет по заявкам';
|
|
if(!empty($columnsTemp['nameRaport'])){
|
|
$nameRaport = $columnsTemp['nameRaport'];
|
|
}
|
|
|
|
$arrayHeder = $columnsTemp['arrayHeder'];
|
|
$arrayHeder2 = $columnsTemp['arrayHeder2'];
|
|
$pages = (int)$columnsTemp['pages'];
|
|
$rowsColumnsName = $columnsTemp['rowsColumnsName'];
|
|
$raport_id = 0;
|
|
if(isset($columnsTemp['raport_id'])){
|
|
$raport_id = (int)$columnsTemp['raport_id'];
|
|
}
|
|
|
|
$sheet = $spreadsheet->getActiveSheet();
|
|
|
|
$sheet->setTitle($nameRaport);
|
|
$styleArray = array(
|
|
'borders' => array(
|
|
'allBorders' => array(
|
|
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
|
|
'color' => array('rgb' => '808080'),
|
|
),
|
|
),
|
|
);
|
|
|
|
foreach($arrayHeder as $h => $w){
|
|
$rw = 1;
|
|
if(isset($w['row'])){
|
|
$rw = $rowStart + (int)$w['row'];
|
|
}
|
|
$sheet->setCellValue($h.$rw, $w['title']);
|
|
// $sheet->getColumnDimension($h)->setWidth($w['width']);
|
|
$sheet->getStyle($h.'1')->getFont()->applyFromArray( [ 'name' => 'Arial', 'bold' => TRUE, 'italic' => FALSE, 'strikethrough' => FALSE, 'color' => [ 'rgb' => '808080' ], ] );
|
|
|
|
$sheet->getStyle($h.$rw)->getFont()->applyFromArray( [ 'name' => 'Arial', 'bold' => TRUE, 'italic' => FALSE, 'strikethrough' => FALSE, 'color' => [ 'rgb' => '808080' ], ] );
|
|
|
|
/* $sheet->getStyle($h)->getAlignment()->setWrapText(true);
|
|
$sheet->getStyle($h.$rw)->getAlignment()->setWrapText(true);
|
|
$sheet->getStyle($h.'1')->getAlignment()->setWrapText(true);*/
|
|
if(isset($w['rowspan'])){
|
|
$sheet->mergeCells($h.$rw.':'.$h.($rw+1));
|
|
}
|
|
if(isset($w['colspan'])){
|
|
$in = $rowsColumnsName[$w['name']];
|
|
if(isset($rowsColumnsName[$w['lit2']])){
|
|
$in2 = $rowsColumnsName[$w['lit2']];
|
|
// echo $in."\n";
|
|
//echo $in2."\n";
|
|
if($in !== false){
|
|
//$index = $in + (int)$w['colspan'];
|
|
//$h2 = $arrColExccel[$index];
|
|
$sheet->mergeCells($in.'1'.':'.$in2.'1');
|
|
}
|
|
}
|
|
}
|
|
$sheet->getColumnDimension($h)->setAutoSize(true);
|
|
if($w['key'] == 'events' || $w['key'] == 'events_call')
|
|
$sheet->getStyle($h)->getAlignment()->setWrapText(true);
|
|
}
|
|
|
|
if(!empty($arrayHeder2)){
|
|
foreach($arrayHeder2 as $h => $w){
|
|
$rw = 2;
|
|
/* if(isset($w['row'])){
|
|
$rw = $rowStart + (int)$w['row'];
|
|
}*/
|
|
$sheet->setCellValue($h.$rw, $w['title']);
|
|
// $sheet->getColumnDimension($h)->setWidth($w['width']);
|
|
$sheet->getStyle($h.$rw)->getFont()->applyFromArray( [ 'name' => 'Arial', 'bold' => TRUE, 'italic' => FALSE, 'strikethrough' => FALSE, 'color' => [ 'rgb' => '808080' ], ] );
|
|
|
|
/* $sheet->getStyle($h)->getAlignment()->setWrapText(true);
|
|
$sheet->getStyle($h.$rw)->getAlignment()->setWrapText(true);*/
|
|
$sheet->getColumnDimension($h)->setAutoSize(true);
|
|
|
|
}
|
|
}
|
|
|
|
$reqs = array();
|
|
|
|
$time_end = microtime(true);
|
|
$execution_time = $time_end - $time_start;
|
|
|
|
|
|
for($i=1; $i<=$pages; $i++){
|
|
$json_str = file_get_contents($name_file_main_json."_".$i.".json");
|
|
$json = json_decode($json_str);
|
|
if(!empty($json)){
|
|
foreach($json as $req){
|
|
$reqs[] = $req;
|
|
}
|
|
}
|
|
if(file_exists($name_file_main_json."_".$i.".json"))
|
|
unlink($name_file_main_json."_".$i.".json");
|
|
}
|
|
|
|
$row = 2;
|
|
if($raport_id > 0){
|
|
$row++;
|
|
}
|
|
if(file_exists($name_file_write)) unlink($name_file_write);
|
|
file_put_contents($name_file_write, json_encode(['done'=>'no','rows_total'=>count($reqs), 'row'=>0]), FILE_APPEND);
|
|
$i = 0;
|
|
try{
|
|
foreach($reqs as $req){
|
|
foreach($req as $key => $res){
|
|
if(isset($rowsColumnsName[$key])){
|
|
$litRow = $rowsColumnsName[$key];
|
|
$sheet->setCellValue($litRow.$row, $res);
|
|
}
|
|
|
|
}
|
|
$i++;
|
|
// unlink($name_file_write);
|
|
file_put_contents($name_file_write, json_encode(['done'=>'no','rows_total'=>count($reqs), 'row'=>$i]), FILE_APPEND);
|
|
$row++;
|
|
}
|
|
} catch (Exception $e){
|
|
//unlink($name_file_write);
|
|
file_put_contents($name_file_write, json_encode(['done'=>'no','error'=>'Что-то пошло не так', 'row'=>$i]), FILE_APPEND);
|
|
}
|
|
|
|
|
|
|
|
/*header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
|
|
header('Content-Disposition: attachment;filename="'.$name.'"');
|
|
header('Cache-Control: max-age=0');*/
|
|
|
|
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
|
|
$writer->save($name_file);
|
|
unlink($name_file_write);
|
|
file_put_contents($name_file_write, json_encode(['done'=>'ok', 'row'=>$i]), FILE_APPEND);
|