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; }
/** * 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(); }
/** * (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; }
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); }
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(); }
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'); }
/** * 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()); }