Licitator 1.0
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

<?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());
}
}