예제 #1
1
 public function csvImport($csvFile, $entity, $user, $fileRecord)
 {
     // Create and configure the reader
     $headers = new ParagonArray();
     $file = new \SplFileObject($csvFile);
     $csvReader = new CsvReader($file);
     $csvReader->setHeaderRowNumber(0);
     $csvReader->setStrict(false);
     $csvReader->setColumnHeaders($headers->csvReaderArray());
     $workflow = new Workflow($csvReader);
     $doctrineWriter = new DoctrineWriter($this->em, $entity);
     $doctrineWriter->disableTruncate();
     $workflow->addWriter($doctrineWriter);
     $dateConverter = new DateConventer($fileRecord->getPlanDate());
     $weekNumberConverter = new WeekNumberConventer($fileRecord->getPlanDate());
     $planNameConverter = new PlanNameConventer($fileRecord->getName());
     $routeNameConventer = new RouteNameConventer($fileRecord->getPlanDate());
     $dateTimeNow = new DateTimeNow();
     $dateToMicroConventer = new TimeToMicroConventer();
     $timeConverter = new DateTimeValueConverter('H:i');
     $uploadedBy = new UploadedBy($user);
     $planDateConvert = new PlanDateConvert($fileRecord->getPlanDate());
     //\Doctrine\Common\Util\Debug::dump($date->format('Y-m-d'));
     //die;
     $date = $fileRecord->getPlanDate();
     $workflow->setSkipItemOnFailure(true)->addValueConverter('routeNo', $routeNameConventer)->addValueConverter('startTime', $dateConverter)->addValueConverter('sourceDepotDepartureTime', $dateConverter)->addValueConverter('arrivalTime', $dateConverter)->addValueConverter('departTime', $dateConverter)->addValueConverter('endDepotArrivalTime', $dateConverter)->addValueConverter('tripStart', $dateConverter)->addValueConverter('destDepotArrivalTime', $dateConverter)->addValueConverter('destDepotDepartureTime', $dateConverter)->addValueConverter('sourceDepotArrivalTime2', $dateConverter)->addValueConverter('sourceDepotDepartureTime2', $dateConverter)->addValueConverter('startDepotDepartureTime', $dateConverter)->addValueConverter('endTime', $dateConverter)->addValueConverter('callDuration', $dateToMicroConventer)->addValueConverter('dutyTime', $dateToMicroConventer)->addValueConverter('driveTime', $dateToMicroConventer)->addValueConverter('emptyTime', $dateToMicroConventer)->addValueConverter('timeWindowStart', $dateConverter)->addValueConverter('timeWindowEnd', $dateConverter)->addValueConverter('uploadDate', $dateTimeNow)->addValueConverter('uploadedBy', $uploadedBy)->addValueConverter('planDate', $planDateConvert)->addValueConverter('planName', $planNameConverter)->addValueConverter('weekNumber', $weekNumberConverter);
     //        \Doctrine\Common\Util\Debug::dump($doctrineWriter);
     //        die;
     $result = $workflow->process();
     //update query to generate route and trip combination
     $query = $this->em->createQuery("UPDATE NTPBundle:ParagonData p SET p.routeNo = CONCAT(p.routeNo,'0', p.tripNo) " . "WHERE p.planDate=:date")->setParameter('date', $date);
     $query->execute();
     return $result;
 }
예제 #2
0
 /**
  * Test to make sure that we are clearing the write entity
  */
 public function testFlushAndClear()
 {
     $em = $this->getEntityManager();
     $em->expects($this->once())->method('clear')->with($this->equalTo('Ddeboer\\DataImport\\Tests\\Fixtures\\Entity\\TestEntity'));
     $writer = new DoctrineWriter($em, 'DdeboerDataImport:TestEntity');
     $writer->finish();
 }
예제 #3
0
 /**
  * (non-PHPdoc) @see \Mathielen\ImportEngine\Storage\StorageInterface::writer().
  */
 public function writer()
 {
     if (empty($this->entityName)) {
         throw new InvalidConfigurationException('Can only use doctrine for writing if entityName is given.');
     }
     $writer = new DoctrineWriter($this->entityManager, $this->entityName);
     $writer->setTruncate(false);
     return $writer;
 }
예제 #4
0
 public function testLoadAssociationWithPresetObject()
 {
     $em = $this->getEntityManager();
     $em->expects($this->once())->method('persist');
     $em->expects($this->never())->method('getReference');
     $writer = new DoctrineWriter($em, 'DdeboerDataImport:TestEntity');
     $association = new TestEntity();
     $item = array('firstProperty' => 'some value', 'secondProperty' => 'some other value', 'firstAssociation' => $association);
     $writer->writeItem($item);
 }
예제 #5
0
 public function testBatches()
 {
     $em = $this->getEntityManager();
     $em->expects($this->exactly(11))->method('persist');
     $em->expects($this->exactly(4))->method('flush');
     $writer = new DoctrineWriter($em, 'DdeboerDataImport:TestEntity');
     $writer->prepare();
     $writer->setBatchSize(3);
     $this->assertEquals(3, $writer->getBatchSize());
     $association = new TestEntity();
     $item = array('firstProperty' => 'some value', 'secondProperty' => 'some other value', 'firstAssociation' => $association);
     for ($i = 0; $i < 11; $i++) {
         $writer->writeItem($item);
     }
     $writer->finish();
 }
예제 #6
0
 public function importFileAction(Request $request)
 {
     // Get FileId to "import"
     $param = $request->request;
     $fileId = (int) trim($param->get("fileId"));
     $curType = trim($param->get("fileType"));
     $uploadedFile = $request->files->get("csvFile");
     // if upload was not ok, just redirect to "AdminStatWrongPArameters"
     if (!CSVTypes::existsType($curType) || $uploadedFile == null) {
         return 0;
     }
     // generate dummy dir
     $dummyImport = getcwd() . "/dummyImport";
     $fname = "directly.csv";
     $filename = $dummyImport . "/" . $fname;
     @mkdir($dummyImport);
     @unlink($filename);
     // move file to dummy filename
     $uploadedFile->move($dummyImport, $fname);
     echo "Starting to Import " . $filename . ", Type: " . CSVTypes::getNameOfType($curType) . "<br/>";
     // open file
     $source = new StreamSource($filename);
     if ($source === false) {
         die("Can't open filestream {$filename}");
     }
     $file = $source->getFile();
     if ($file === false) {
         die("Can't open file {$filename}");
     }
     // Create and configure the reader
     $csvReader = new CsvReader($file, ";");
     if ($csvReader === false) {
         die("Can't create csvReader {$filename}");
     }
     $csvReader->setHeaderRowNumber(1);
     var_dump($csvReader);
     // this must be done to import CSVs where one of the data-field has CRs within!
     $file->setFlags(\SplFileObject::READ_CSV | \SplFileObject::SKIP_EMPTY | \SplFileObject::READ_AHEAD);
     echo "etape";
     var_dump($file);
     // Set Database into "nonchecking Foreign Keys"
     $em = $this->getDoctrine()->getManager();
     $em->getConnection()->exec("SET FOREIGN_KEY_CHECKS=0;");
     // Create the workflow
     $workflow = new Workflow($csvReader);
     if ($workflow === false) {
         die("Can't create workflow {$filename}");
     }
     $curEntityClass = CSVTypes::getEntityClass($curType);
     $writer = new DoctrineWriter($em, $curEntityClass);
     $writer->setTruncate(false);
     $entityMetadata = $em->getClassMetadata($curEntityClass);
     $entityMetadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_AUTO);
     // $entityMetadata->setIdGeneratorType(Doctrine\ORM\Mapping\::GENERATOR_TYPE_NONE);
     $workflow->addWriter($writer);
     $workflow->process();
     // RESetting Database Check Status
     $em->getConnection()->exec("SET FOREIGN_KEY_CHECKS=1;");
     // After successfully import, some files need special treatment --> Reset some DB fields
     /* if ($curType==CSVTypes::STOCK) {
          $q=$em->createQuery("UPDATE AdminAdminBundle:Product s
                            SET s.description = false");
            $q->execute();
        }*/
     // var_dump($workflow);
     return $this->render('SuppliercheckAdminBundle:Default:csv_import.html.twig');
 }
예제 #7
0
 /**
  * Import  from csv
  * using https://github.com/ddeboer/data-import
  *
  * @Route("/import/{filetype}/{entity}/{id}", name="import_upload")
  */
 public function importAction($id, $filetype, $entity)
 {
     $em = $this->getDoctrine()->getManager();
     // Create and configure the reader
     $upload = $em->getRepository('AppBundle:Upload')->find($id);
     $path = $this->get('kernel')->getRootDir() . '/../uploads/' . $upload->getName();
     $entity_namespace = 'AppBundle:' . $entity;
     $entity_redirect = $entity;
     $file = new \SplFileObject($path);
     $csvReader = new CsvReader($file);
     // Tell the reader that the first row in the CSV file contains column headers
     $csvReader->setHeaderRowNumber(0);
     $csvReader->setStrict(FALSE);
     // Create the workflow from the reader
     $workflow = new Workflow($csvReader);
     // Create a writer: you need Doctrine’s EntityManager.
     $doctrineWriter = new DoctrineWriter($em, $entity_namespace);
     $doctrineWriter->disableTruncate();
     $workflow->addWriter($doctrineWriter);
     // Process the workflow
     $workflow->process();
     return $this->redirect($this->generateUrl(strtolower($entity_redirect)));
 }
 /**
  * 添加管理者信息.
  *
  * @Route("/new", name="manager_new")
  * 
  * @Template("UserBundle:Manager:new.html.twig")
  */
 public function newAction(Request $request)
 {
     $manager = new Manager();
     $new_form = $this->createForm(new ManagerNewType(), $manager, array('action' => $this->generateUrl('manager_new'), 'method' => 'GET'));
     $new_form->handleRequest($request);
     if ($new_form->isValid()) {
         //添加成功跳转到列表页面,不成功跳转到本页面
         try {
             $em = $this->getDoctrine()->getManager();
             $manager->setEnabled(1);
             $success = $em->getRepository('UserBundle:Manager')->add($manager);
             if ($success) {
                 $this->addFlash('success', $manager->getName() . '添加成功');
             } else {
                 $this->addFlash('error', '网络原因或数据库故障,添加失败. 请重新尝试添加!');
                 return $this->redirect($this->generateUrl('manager_new'));
             }
             return $this->redirect($this->generateUrl('manager_index'));
         } catch (\Exception $e) {
             $this->addFlash('error', '网络原因或数据库故障,添加失败. 请重新尝试添加!');
             return $this->redirect($this->generateUrl('manager_new'));
         }
     }
     //批量导入管理员信息
     $import_form = $this->createFormBuilder()->setMethod('POST')->setAction($this->generateUrl('manager_new'))->add('fileUrl', 'file', array('label' => '文件位置:'))->add('import', 'submit', array('label' => '导入'))->add('cancel', 'reset', array('label' => '取消'))->getForm();
     $import_form->handleRequest($request);
     if ($import_form->isValid()) {
         if (!is_dir("upload/import/manager_import")) {
             mkdir("upload/import/manager_import");
         }
         $file = $import_form['fileUrl']->getData();
         $filename = explode(".", $file->getClientOriginalName());
         $extension = $filename[count($filename) - 1];
         $newefilename = $filename[0] . "_" . rand(1, 9999) . "." . $extension;
         $file->move("upload/import/manager_import", $newefilename);
         $upfile = new \SplFileObject("upload/import/manager_import/" . $newefilename);
         $csvReader = new CsvReader($upfile);
         $csvReader->setStrict(false)->setHeaderRowNumber(0)->setColumnHeaders(['username', 'name', 'email', 'telephone', 'roles' => 'FOS\\UserBundle\\Model\\User', 'password']);
         $em = $this->getDoctrine()->getManager();
         $doctrineWriter = new DoctrineWriter($em, 'UserBundle:Manager');
         $doctrineWriter->disableTruncate();
         $workflow = new Workflow($csvReader);
         $workflow->addWriter($doctrineWriter)->process();
     }
     return array('new_form' => $new_form->createView(), 'import_form' => $import_form->createView());
 }