102 lines
3.6 KiB
PHP
102 lines
3.6 KiB
PHP
<?php
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
use App\Models\Codes;
|
|
use Illuminate\Console\Command;
|
|
|
|
class ExportCodesUniques extends Command
|
|
{
|
|
/**
|
|
* The name and signature of the console command.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $signature = 'export:codeunique';
|
|
|
|
/**
|
|
* The console command description.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $description = 'Command description';
|
|
|
|
/**
|
|
* Create a new command instance.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
}
|
|
|
|
/**
|
|
* Execute the console command.
|
|
*
|
|
* @return int
|
|
*/
|
|
public function handle()
|
|
{
|
|
$nbCodeFic = 100; // Nombre de code par fichier
|
|
$nbCodeTot = 2000; // Nombre total de code à exporter
|
|
$nbCodeLigne = 4; // Nombre de code par ligne
|
|
|
|
$totalExportedCodes = 0;
|
|
$currentFilename = 1;
|
|
$currentExportedCodes = 0;
|
|
$currentLineCodes = ($nbCodeLigne === 1 ? 1 : 0);
|
|
|
|
$this->process($nbCodeFic, $nbCodeTot, $nbCodeLigne, $totalExportedCodes, $currentFilename, $currentExportedCodes, $currentLineCodes);
|
|
|
|
// TODO : Debug la création du ZIP
|
|
// compression des fichiers
|
|
$zip = new \ZipArchive();
|
|
if ($zip->open(storage_path('export_codes_uniques') . "CodesUniques_". date('dmY') .".zip",\ZIPARCHIVE::CREATE)===TRUE) {
|
|
if ($handle = opendir(storage_path('export_codes_uniques/tmp'))) {
|
|
while (false !== ($file_to_zip = readdir($handle))) {
|
|
if (pathinfo($file_to_zip,PATHINFO_EXTENSION)!='csv') continue;
|
|
$zip->addFile(storage_path('export_codes_uniques') . $file_to_zip,"$file_to_zip");
|
|
}
|
|
closedir($handle);
|
|
}
|
|
$zip->close();
|
|
}
|
|
|
|
// TODO : Vider le dossier storage_path('export_codes_uniques/tmp')
|
|
// TODO : Envoi de mail à MAIL_ADMIN avec le nom du ZIP "CodesUniques_". date('dmY') .".zip"
|
|
|
|
return 0;
|
|
}
|
|
|
|
private function process($nbCodeFic, $nbCodeTot, $nbCodeLigne, $totalExportedCodes, $currentFilename, $currentExportedCodes, $currentLineCodes){
|
|
// TODO : Tester avec plus de 1000 dans le take
|
|
$codes = Codes::where('code_exported', 0)->take(1000)->get();
|
|
$countCodes = count($codes);
|
|
|
|
foreach ($codes as $k => $code){
|
|
if ($currentExportedCodes < $nbCodeTot){
|
|
if ($currentLineCodes === ($nbCodeLigne === 1 ? 1 : $nbCodeLigne - 1)){
|
|
file_put_contents(storage_path('export_codes_uniques/tmp') . $currentFilename . ".csv", $code->code_unique . PHP_EOL, FILE_APPEND);
|
|
$totalExportedCodes++;
|
|
$currentExportedCodes++;
|
|
$currentLineCodes = ($nbCodeLigne === 1 ? 1 : 0);
|
|
}else{
|
|
file_put_contents(storage_path('export_codes_uniques/tmp') . $currentFilename . ".csv", $code->code_unique . ";", FILE_APPEND);
|
|
$totalExportedCodes++;
|
|
$currentExportedCodes++;
|
|
$currentLineCodes++;
|
|
}
|
|
$code->code_exported = 1;
|
|
$code->save();
|
|
if ($currentExportedCodes === $nbCodeFic) {
|
|
$currentFilename++;
|
|
$currentExportedCodes = 0;
|
|
}
|
|
if ((($k + 1) === $countCodes) && $totalExportedCodes < $nbCodeTot){
|
|
return $this->process($nbCodeFic, $nbCodeTot, $nbCodeLigne, $totalExportedCodes, $currentFilename, $currentExportedCodes, $currentLineCodes);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|