Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- // src/AppBundle/Command/ImportCsvCommand.php
- namespace AppBundleCommand;
- use SymfonyBundleFrameworkBundleCommandContainerAwareCommand;
- use SymfonyComponentConsoleInputInputInterface;
- use SymfonyComponentConsoleOutputOutputInterface;
- use BarzoPasswordGenerator;
- use SymfonyComponentFinderFinder;
- use AppBundleEntityUser;
- use AppBundleEntityProperty;
- use AppBundleEntityRoomType;
- use AppBundleEntityRoom;
- use AppBundleEntityBooking;
- use AppBundleRepositoryPropertyRepository;
- use AppBundleRepositoryRoomTypeRepository;
- use AppBundleRepositoryRoomRepository;
- use AppBundleRepositoryBookingRepository;
- class ImportCsvCommand extends ContainerAwareCommand
- {
- protected function configure()
- {
- $this
- // the name of the command (the part after "app/console")
- ->setName('app:import-csv')
- // the short description shown while running "php app/console list"
- ->setDescription('Imports a csv and generates necessary entities including: Owner, Property, RoomType, Room.')
- // the full command description shown when running the command with
- // the "--help" option
- ->setHelp("This command allows you to import a csv for database population...")
- ;
- }
- private $cvsParsingOptions = array(
- 'finder_in' => 'app/Resources/csv_transmitted/',
- 'finder_name' => 'Export.csv',
- 'ignoreFirstLine' => false
- );
- /**
- * executes the csv
- *
- * @throws Exception
- *
- */
- protected function execute(InputInterface $input, OutputInterface $output)
- {
- $folder = 'app/Resources/csv_transmitted/';
- $rooms = array();
- if ($handle = opendir($folder)) {
- while (false !== ($entry = readdir($handle))) {
- if ($entry != "." && $entry != ".." ) {
- $path_parts = pathinfo($entry);
- if ($path_parts['filename'] == '$$$') {
- continue;
- } else {
- if ($path_parts['extension'] != '' || $path_parts['extension'] != null ) {
- $this->cvsParsingOptions['finder_name'] = $path_parts['filename'] . '.' . $path_parts['extension'];
- } else {
- $this->cvsParsingOptions['finder_name'] = $path_parts['filename'];
- }
- // use the parseCSV() function
- $csv = $this->parseCSV();
- $em = $this->getContainer()->get('doctrine')->getManager();
- foreach ($csv as $line) {
- //assign column values to corresponding variables
- $owner_id = $line[0];
- $owner_name = $line[1];
- $owner_email = $line[2];
- $property_id = $line[3];
- $property_name = $line[4];
- $roomType_id = $line[5];
- $roomType = $line[6];
- $room_id = $line[7];
- $room_num = $line[8];
- $room_name = $line[9];
- $date = date('Ymd', strtotime($line[10]));
- $room_status = $line[11];
- $owner_repository = $em->getRepository('AppBundle:User');
- // query for a single owner by its primary key (usually "id")
- $owner = $owner_repository->findByEmail($owner_email);
- if (!$owner) {
- $tokenGenerator = $this->getcontainer()->get('fos_user.util.token_generator');
- $password = substr($tokenGenerator->generateToken(), 0, 12);
- $email_parts = split('@', $owner_email);
- $username = $email_parts[0];
- if ($owner_repository->findByUsername($username)) {
- $username .= count($owner_repository->findByUsername($username) + 1);
- }
- exec('php C:xampphtdocspmsappconsole fos:user:create '.$username.' '.$owner_email.' '.$password);
- $emailfrom = 'no-reply@proximaweb.mu';
- $emailto = $owner_email;
- $subject = 'Your credentials to our PMS portal has been created';
- $body = "Your credentials are as follows:nusername: ".$username."n Password: ".$password;
- $message = Swift_Message::newInstance()
- ->setSubject($subject)
- ->setFrom($emailfrom)
- ->setTo($emailto)
- ->setBody('test')
- ;
- $this->getcontainer()->get('mailer')->send($message);
- }
- $property_repository = $em->getRepository('AppBundle:Property');
- $property = $property_repository->find($property_id);
- if (!$property) {
- $property = new Property();
- $property->setName($property_name);
- } else {
- $current_name = $property->getName();
- if ($current_name !== $roomType) {
- $property->setName($property_name);
- }
- }
- $roomType_repository = $em->getRepository('AppBundle:RoomType');
- $roomType = $roomType_repository->find($roomType_id);
- if (!$roomType) {
- $roomType = new RoomType();
- $roomType->setRoomType($roomType);
- } else {
- $current_name = $roomType->getRoomType();
- if ($current_name !== $roomType) {
- $roomType->setRoomType($roomType);
- }
- }
- $room_repository = $em->getRepository('AppBundle:Room');
- $room = $room_repository->find($room_id);
- if (!$room) {
- $room = new Room();
- $room->setRoomNum($room_num);
- $room->setRoomName($owner_name);
- } else {
- $current_room_num = $room->getRoomNum();
- if ($current_room_num !== $room_num) {
- $room->setRoomNum($room_num);
- }
- $current_room_name = $room->getRoomName();
- if ($current_room_name !== $room_name) {
- $room->setRoomName($room_name);
- }
- }
- $state = Booking()->get('booker')->isAvailableForDate($room, $date);
- $booking_repository = $em->getRepository('AppBundle:Booking');
- if ($room_status == 0) {
- if (!$state) {
- $booking = $booking_repository->findOneBy(
- array('room_id' => $room->id, 'start' => $date->format('Y-m-d'), 'end' => $date->format('Y-m-d'))
- );
- $em->remove($booking);
- $em->flush();
- }
- }
- else {
- if ($state) {
- Booking()->get('booker')->book($room, $date->format('Y-m-d'), $date->format('Y-m-d'));
- }
- }
- $em->persist($owner);
- $em->persist($property);
- $em->persist($roomType);
- $em->persist($room);
- }
- }
- }
- }
- closedir($handle);
- }
- }
- /**
- * Parse a csv file
- *
- * @return array
- * @throws Exception
- *
- */
- private function parseCSV()
- {
- $ignoreFirstLine = $this->cvsParsingOptions['ignoreFirstLine'];
- $finder = new Finder();
- $finder->files()
- ->in($this->cvsParsingOptions['finder_in'])
- ->name($this->cvsParsingOptions['finder_name'])
- ->files();
- foreach ($finder as $file) {
- $csv = $file;
- }
- if(empty($csv)){
- throw new Exception("NO CSV FILE");
- }
- $rows = array();
- if (($handle = fopen($csv->getRealPath(), "r")) !== FALSE) {
- $i = 0;
- while (($data = fgetcsv($handle, null, ",")) !== FALSE) {
- $i++;
- if ($ignoreFirstLine && $i == 1) {
- continue;
- }
- $rows[] = $data;
- }
- fclose($handle);
- }
- return $rows;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement