- Add Command Export + TODO + Update migrations/2020_10_20_165858_create_codes.php

This commit is contained in:
Vincent BRIDIER 2020-12-01 17:25:16 +01:00
parent ef6ade5697
commit 2f1771d32e
4 changed files with 103 additions and 0 deletions

View file

@ -0,0 +1,102 @@
<?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);
}
}
}
}
}

View file

@ -17,6 +17,7 @@ class CreateCodes extends Migration
$table->id();
$table->string('code_unique');
$table->boolean('code_used')->default(0);
$table->boolean('code_exported')->default(0);
$table->date('date_creation');
});
}

View file