You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
202 lines
8.4 KiB
202 lines
8.4 KiB
<?php
|
|
|
|
namespace Zitec\RuleEngineBundle\Command;
|
|
|
|
use Symfony\Component\Console\Command\Command as ContainerAwareCommand;;
|
|
use Symfony\Component\Console\Input\InputArgument;
|
|
use Symfony\Component\Console\Input\InputInterface;
|
|
use Symfony\Component\Console\Output\OutputInterface;
|
|
use Doctrine\ORM\EntityManagerInterface;
|
|
use App\Entity\Licitador;
|
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|
use PhpOffice\PhpSpreadsheet\IOFactory;
|
|
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
|
|
use DateTime;
|
|
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
|
|
use FOS\UserBundle\Model\UserInterface;
|
|
use FOS\UserBundle\Model\UserManagerInterface;
|
|
use App\Kernel;
|
|
|
|
|
|
class GEImporterCommand extends ContainerAwareCommand
|
|
{
|
|
private $em;
|
|
private $output;
|
|
private $sectores=[];
|
|
private $userManager;
|
|
private $tokenStorage;
|
|
protected $projectDir;
|
|
|
|
public function __construct(EntityManagerInterface $em,
|
|
UserManagerInterface $userManager,
|
|
TokenStorageInterface $tokenStorage,
|
|
Kernel $kernel)
|
|
{
|
|
parent::__construct();
|
|
$this->em = $em;
|
|
$this->userManager = $userManager;
|
|
$this->tokenStorage = $tokenStorage;
|
|
$this->projectDir = $kernel->getProjectDir();
|
|
}
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function configure(): void
|
|
{
|
|
$this->setName('zitec:ge:importer');
|
|
$this->addArgument(
|
|
'fileOrigin',
|
|
InputArgument::REQUIRED,
|
|
'csv file to import'
|
|
);
|
|
|
|
$this->setDescription(
|
|
'Green Entrepreneur Importer'
|
|
);
|
|
}
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function execute(InputInterface $input, OutputInterface $output): int
|
|
{
|
|
$filename=$input->getArgument('fileOrigin');
|
|
$type = IOFactory::identify($filename);
|
|
$objReader = IOFactory::createReader($type);
|
|
$objPHPExcel = $objReader->load($filename);
|
|
|
|
foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
|
|
$worksheets[$worksheet->getTitle()] = $worksheet->toArray();
|
|
}
|
|
$this->sectores = $this->em->getRepository('App:Sector')->findAll();
|
|
$invalidos=[];
|
|
foreach($worksheets as $user){
|
|
$i = 0;
|
|
foreach($user as $geuser){
|
|
if($i==0){ $i++;continue;}
|
|
|
|
if (!empty($geuser[0]) || !empty($geuser[1])) {
|
|
$data=[];
|
|
$data['firstname']=$geuser[0];
|
|
$data['lastname']=$geuser[1];
|
|
$data['locale']=$this->getLocale($geuser[2]);
|
|
$data['gender']=($geuser[3]=='Male')?'m':'f';
|
|
if(!empty($geuser[4])){
|
|
$data['dateOfBirth']=DateTime::createFromFormat('m/d/Y',$geuser[4]);
|
|
}else{
|
|
$data['dateOfBirth']=null;
|
|
}
|
|
$data['sector']=$this->getSector($geuser[6]);
|
|
$data['email']=$geuser[10];
|
|
$repetido=$this->em->getRepository('App:Licitador')->findByEmail($data['email']);
|
|
if($this->checkemail($data['email']) && empty($repetido)){
|
|
$user=new Licitador();
|
|
$parts = explode("@", $data['email']);
|
|
$data['username']=$data['email'];
|
|
$data['plainPassword']=$parts[0];
|
|
|
|
echo "\nCreando Usuario {$data['username']} \n";
|
|
$this->updateUser($user, $data);
|
|
}else{
|
|
echo "\nUsuario invalido {$data['firstname']} {$data['lastname']} \n";
|
|
$invalidos[]=$data;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$spreadsheet = new Spreadsheet();
|
|
$spreadsheet->setActiveSheetIndex(0);
|
|
$sheet = $spreadsheet->getActiveSheet();
|
|
$keys= array_keys($invalidos[0]);
|
|
foreach($keys as $index=>$key){
|
|
$i=$index+1;
|
|
$sheet->setCellValue('A'.$i, $key);
|
|
}
|
|
$fila='A';
|
|
foreach($invalidos as $invalido){
|
|
++$fila;
|
|
$i=1;
|
|
foreach($invalido as $field){
|
|
$sheet->setCellValue($fila.$i, $field);
|
|
$i++;
|
|
}
|
|
}
|
|
|
|
$writer = IOFactory::createWriter($spreadsheet, 'Xls');
|
|
$writer->save('invalidos.xls');
|
|
$this->output=$output;
|
|
|
|
|
|
exit(0);
|
|
}
|
|
private function getLocale($locale){
|
|
$local='EN';
|
|
switch($locale){
|
|
case 'Algeria': $local='DZ';break;
|
|
case 'Egypt':$local='EG';break;
|
|
case 'Israel':$local='IL';break;
|
|
case 'Jordan':$local='JO';break;
|
|
case 'Lebanon':$local='LB';break;
|
|
case 'Morocco':$local='MA';break;
|
|
case 'Palestine':$local='PS';break;
|
|
case 'Tunisia':$local='TN';break;
|
|
}
|
|
return $local;
|
|
}
|
|
private function getSector($sector){
|
|
|
|
foreach($this->sectores as $s){
|
|
if (strpos($sector, 'food') !== false && strpos($s->getNombre(), 'food') !== false) {
|
|
return $s;
|
|
}elseif(strpos($sector, 'Renewable') !== false && strpos($s->getNombre(), 'Renewable') !== false) {
|
|
return $s;
|
|
}elseif(strpos($sector, 'waste') !== false && strpos($s->getNombre(), 'waste') !== false) {
|
|
return $s;
|
|
}elseif(strpos($sector, 'tourism') !== false && strpos($s->getNombre(), 'tourism') !== false) {
|
|
return $s;
|
|
}elseif(strpos($sector, 'construction') !== false && strpos($s->getNombre(), 'construction') !== false) {
|
|
return $s;
|
|
}elseif(strpos($sector, 'textile') !== false && strpos($s->getNombre(), 'textile') !== false) {
|
|
return $s;
|
|
}elseif(strpos($sector, 'mobility') !== false && strpos($s->getNombre(), 'mobility') !== false) {
|
|
return $s;
|
|
}elseif(strpos($sector, 'cleaning') !== false && strpos($s->getNombre(), 'cleaning') !== false) {
|
|
return $s;
|
|
}elseif(strpos($sector, 'furniture') !== false && strpos($s->getNombre(), 'furniture') !== false) {
|
|
return $s;
|
|
}elseif(strpos($sector, 'electrical') !== false && strpos($s->getNombre(), 'electrical') !== false) {
|
|
return $s;
|
|
}elseif(strpos($sector, 'Communication') !== false && strpos($s->getNombre(), 'Communication') !== false) {
|
|
return $s;
|
|
}
|
|
}
|
|
}
|
|
private function checkemail($str) {
|
|
return (!preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $str)) ? FALSE : TRUE;
|
|
}
|
|
private function updateUser($user, $data){
|
|
$user->setUsername($data['username']);
|
|
$user->setUsernameCanonical($data['username']);
|
|
$user->setEmail($data['email']);
|
|
$user->setEmailCanonical($data['email']);
|
|
$user->setPlainPassword($data['plainPassword']);
|
|
$user->setFirstname($data['firstname']);
|
|
$user->setLastname($data['lastname']);
|
|
$user->setLocale($data['locale']);
|
|
$user->setGender($data['gender']);
|
|
if(!empty($data['dateOfBirth'])){
|
|
$user->setDateOfBirth($data['dateOfBirth']);
|
|
}
|
|
$user->setNew(1);
|
|
$user->setEnabled(1);
|
|
// $this->em->persist($user);
|
|
// $this->em->flush();
|
|
echo "\nUsuario {$data['username']} creado\n";
|
|
$this->userManager->updateUser($user);
|
|
$token = new UsernamePasswordToken($user, $data['plainPassword'], 'admin', $user->getRoles());
|
|
$this->tokenStorage->setToken($token);
|
|
//$this->container->get('security.token_storage')->setToken($token);
|
|
// $this->container->get('session')->set('_security_main', serialize($token));
|
|
mkdir($this->projectDir.'/public/uploads/'.$user->getId());
|
|
}
|
|
}
|