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.

201 lines
8.4 KiB

5 years ago
5 years ago
5 years ago
5 years ago
  1. <?php
  2. namespace Zitec\RuleEngineBundle\Command;
  3. use Symfony\Component\Console\Command\Command as ContainerAwareCommand;;
  4. use Symfony\Component\Console\Input\InputArgument;
  5. use Symfony\Component\Console\Input\InputInterface;
  6. use Symfony\Component\Console\Output\OutputInterface;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use App\Entity\Licitador;
  9. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  10. use PhpOffice\PhpSpreadsheet\IOFactory;
  11. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  12. use DateTime;
  13. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  14. use FOS\UserBundle\Model\UserInterface;
  15. use FOS\UserBundle\Model\UserManagerInterface;
  16. use App\Kernel;
  17. class GEImporterCommand extends ContainerAwareCommand
  18. {
  19. private $em;
  20. private $output;
  21. private $sectores=[];
  22. private $userManager;
  23. private $tokenStorage;
  24. protected $projectDir;
  25. public function __construct(EntityManagerInterface $em,
  26. UserManagerInterface $userManager,
  27. TokenStorageInterface $tokenStorage,
  28. Kernel $kernel)
  29. {
  30. parent::__construct();
  31. $this->em = $em;
  32. $this->userManager = $userManager;
  33. $this->tokenStorage = $tokenStorage;
  34. $this->projectDir = $kernel->getProjectDir();
  35. }
  36. /**
  37. * {@inheritdoc}
  38. */
  39. public function configure(): void
  40. {
  41. $this->setName('zitec:ge:importer');
  42. $this->addArgument(
  43. 'fileOrigin',
  44. InputArgument::REQUIRED,
  45. 'csv file to import'
  46. );
  47. $this->setDescription(
  48. 'Green Entrepreneur Importer'
  49. );
  50. }
  51. /**
  52. * {@inheritdoc}
  53. */
  54. public function execute(InputInterface $input, OutputInterface $output): int
  55. {
  56. $filename=$input->getArgument('fileOrigin');
  57. $type = IOFactory::identify($filename);
  58. $objReader = IOFactory::createReader($type);
  59. $objPHPExcel = $objReader->load($filename);
  60. foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
  61. $worksheets[$worksheet->getTitle()] = $worksheet->toArray();
  62. }
  63. $this->sectores = $this->em->getRepository('App:Sector')->findAll();
  64. $invalidos=[];
  65. foreach($worksheets as $user){
  66. $i = 0;
  67. foreach($user as $geuser){
  68. if($i==0){ $i++;continue;}
  69. if (!empty($geuser[0]) || !empty($geuser[1])) {
  70. $data=[];
  71. $data['firstname']=$geuser[0];
  72. $data['lastname']=$geuser[1];
  73. $data['locale']=$this->getLocale($geuser[2]);
  74. $data['gender']=($geuser[3]=='Male')?'m':'f';
  75. if(!empty($geuser[4])){
  76. $data['dateOfBirth']=DateTime::createFromFormat('m/d/Y',$geuser[4]);
  77. }else{
  78. $data['dateOfBirth']=null;
  79. }
  80. $data['sector']=$this->getSector($geuser[6]);
  81. $data['email']=$geuser[10];
  82. $repetido=$this->em->getRepository('App:Licitador')->findByEmail($data['email']);
  83. if($this->checkemail($data['email']) && empty($repetido)){
  84. $user=new Licitador();
  85. $parts = explode("@", $data['email']);
  86. $data['username']=$data['email'];
  87. $data['plainPassword']=$parts[0];
  88. echo "\nCreando Usuario {$data['username']} \n";
  89. $this->updateUser($user, $data);
  90. }else{
  91. echo "\nUsuario invalido {$data['firstname']} {$data['lastname']} \n";
  92. $invalidos[]=$data;
  93. }
  94. }
  95. }
  96. }
  97. $spreadsheet = new Spreadsheet();
  98. $spreadsheet->setActiveSheetIndex(0);
  99. $sheet = $spreadsheet->getActiveSheet();
  100. $keys= array_keys($invalidos[0]);
  101. foreach($keys as $index=>$key){
  102. $i=$index+1;
  103. $sheet->setCellValue('A'.$i, $key);
  104. }
  105. $fila='A';
  106. foreach($invalidos as $invalido){
  107. ++$fila;
  108. $i=1;
  109. foreach($invalido as $field){
  110. $sheet->setCellValue($fila.$i, $field);
  111. $i++;
  112. }
  113. }
  114. $writer = IOFactory::createWriter($spreadsheet, 'Xls');
  115. $writer->save('invalidos.xls');
  116. $this->output=$output;
  117. exit(0);
  118. }
  119. private function getLocale($locale){
  120. $local='EN';
  121. switch($locale){
  122. case 'Algeria': $local='DZ';break;
  123. case 'Egypt':$local='EG';break;
  124. case 'Israel':$local='IL';break;
  125. case 'Jordan':$local='JO';break;
  126. case 'Lebanon':$local='LB';break;
  127. case 'Morocco':$local='MA';break;
  128. case 'Palestine':$local='PS';break;
  129. case 'Tunisia':$local='TN';break;
  130. }
  131. return $local;
  132. }
  133. private function getSector($sector){
  134. foreach($this->sectores as $s){
  135. if (strpos($sector, 'food') !== false && strpos($s->getNombre(), 'food') !== false) {
  136. return $s;
  137. }elseif(strpos($sector, 'Renewable') !== false && strpos($s->getNombre(), 'Renewable') !== false) {
  138. return $s;
  139. }elseif(strpos($sector, 'waste') !== false && strpos($s->getNombre(), 'waste') !== false) {
  140. return $s;
  141. }elseif(strpos($sector, 'tourism') !== false && strpos($s->getNombre(), 'tourism') !== false) {
  142. return $s;
  143. }elseif(strpos($sector, 'construction') !== false && strpos($s->getNombre(), 'construction') !== false) {
  144. return $s;
  145. }elseif(strpos($sector, 'textile') !== false && strpos($s->getNombre(), 'textile') !== false) {
  146. return $s;
  147. }elseif(strpos($sector, 'mobility') !== false && strpos($s->getNombre(), 'mobility') !== false) {
  148. return $s;
  149. }elseif(strpos($sector, 'cleaning') !== false && strpos($s->getNombre(), 'cleaning') !== false) {
  150. return $s;
  151. }elseif(strpos($sector, 'furniture') !== false && strpos($s->getNombre(), 'furniture') !== false) {
  152. return $s;
  153. }elseif(strpos($sector, 'electrical') !== false && strpos($s->getNombre(), 'electrical') !== false) {
  154. return $s;
  155. }elseif(strpos($sector, 'Communication') !== false && strpos($s->getNombre(), 'Communication') !== false) {
  156. return $s;
  157. }
  158. }
  159. }
  160. private function checkemail($str) {
  161. return (!preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $str)) ? FALSE : TRUE;
  162. }
  163. private function updateUser($user, $data){
  164. $user->setUsername($data['username']);
  165. $user->setUsernameCanonical($data['username']);
  166. $user->setEmail($data['email']);
  167. $user->setEmailCanonical($data['email']);
  168. $user->setPlainPassword($data['plainPassword']);
  169. $user->setFirstname($data['firstname']);
  170. $user->setLastname($data['lastname']);
  171. $user->setLocale($data['locale']);
  172. $user->setGender($data['gender']);
  173. if(!empty($data['dateOfBirth'])){
  174. $user->setDateOfBirth($data['dateOfBirth']);
  175. }
  176. $user->setNew(1);
  177. $user->setEnabled(1);
  178. // $this->em->persist($user);
  179. // $this->em->flush();
  180. echo "\nUsuario {$data['username']} creado\n";
  181. $this->userManager->updateUser($user);
  182. $token = new UsernamePasswordToken($user, $data['plainPassword'], 'admin', $user->getRoles());
  183. $this->tokenStorage->setToken($token);
  184. //$this->container->get('security.token_storage')->setToken($token);
  185. // $this->container->get('session')->set('_security_main', serialize($token));
  186. mkdir($this->projectDir.'/public/uploads/'.$user->getId());
  187. }
  188. }