Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2016
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.67 KB | None | 0 0
  1. <?php
  2.  
  3. // src/AppBundle/Command/ImportCsvCommand.php
  4. namespace AppBundleCommand;
  5.  
  6. use SymfonyBundleFrameworkBundleCommandContainerAwareCommand;
  7. use SymfonyComponentConsoleInputInputInterface;
  8. use SymfonyComponentConsoleOutputOutputInterface;
  9. use BarzoPasswordGenerator;
  10. use SymfonyComponentFinderFinder;
  11.  
  12. use AppBundleEntityUser;
  13. use AppBundleEntityProperty;
  14. use AppBundleEntityRoomType;
  15. use AppBundleEntityRoom;
  16. use AppBundleEntityBooking;
  17.  
  18. use AppBundleRepositoryPropertyRepository;
  19. use AppBundleRepositoryRoomTypeRepository;
  20. use AppBundleRepositoryRoomRepository;
  21. use AppBundleRepositoryBookingRepository;
  22.  
  23. class ImportCsvCommand extends ContainerAwareCommand
  24. {
  25. protected function configure()
  26. {
  27. $this
  28. // the name of the command (the part after "app/console")
  29. ->setName('app:import-csv')
  30.  
  31. // the short description shown while running "php app/console list"
  32. ->setDescription('Imports a csv and generates necessary entities including: Owner, Property, RoomType, Room.')
  33.  
  34. // the full command description shown when running the command with
  35. // the "--help" option
  36. ->setHelp("This command allows you to import a csv for database population...")
  37. ;
  38. }
  39.  
  40. private $cvsParsingOptions = array(
  41. 'finder_in' => 'app/Resources/csv_transmitted/',
  42. 'finder_name' => 'Export.csv',
  43. 'ignoreFirstLine' => false
  44. );
  45.  
  46. /**
  47. * executes the csv
  48. *
  49. * @throws Exception
  50. *
  51. */
  52. protected function execute(InputInterface $input, OutputInterface $output)
  53. {
  54. $folder = 'app/Resources/csv_transmitted/';
  55.  
  56. $rooms = array();
  57.  
  58. if ($handle = opendir($folder)) {
  59. while (false !== ($entry = readdir($handle))) {
  60. if ($entry != "." && $entry != ".." ) {
  61. $path_parts = pathinfo($entry);
  62. if ($path_parts['filename'] == '$$$') {
  63. continue;
  64. } else {
  65. if ($path_parts['extension'] != '' || $path_parts['extension'] != null ) {
  66. $this->cvsParsingOptions['finder_name'] = $path_parts['filename'] . '.' . $path_parts['extension'];
  67. } else {
  68. $this->cvsParsingOptions['finder_name'] = $path_parts['filename'];
  69. }
  70. // use the parseCSV() function
  71. $csv = $this->parseCSV();
  72.  
  73. $em = $this->getContainer()->get('doctrine')->getManager();
  74.  
  75. foreach ($csv as $line) {
  76. //assign column values to corresponding variables
  77. $owner_id = $line[0];
  78. $owner_name = $line[1];
  79. $owner_email = $line[2];
  80. $property_id = $line[3];
  81. $property_name = $line[4];
  82. $roomType_id = $line[5];
  83. $roomType = $line[6];
  84. $room_id = $line[7];
  85. $room_num = $line[8];
  86. $room_name = $line[9];
  87. $date = date('Ymd', strtotime($line[10]));
  88. $room_status = $line[11];
  89.  
  90. $owner_repository = $em->getRepository('AppBundle:User');
  91.  
  92. // query for a single owner by its primary key (usually "id")
  93. $owner = $owner_repository->findByEmail($owner_email);
  94. if (!$owner) {
  95. $tokenGenerator = $this->getcontainer()->get('fos_user.util.token_generator');
  96. $password = substr($tokenGenerator->generateToken(), 0, 12);
  97.  
  98. $email_parts = split('@', $owner_email);
  99.  
  100. $username = $email_parts[0];
  101. if ($owner_repository->findByUsername($username)) {
  102. $username .= count($owner_repository->findByUsername($username) + 1);
  103. }
  104. exec('php C:xampphtdocspmsappconsole fos:user:create '.$username.' '.$owner_email.' '.$password);
  105.  
  106. $emailfrom = 'no-reply@proximaweb.mu';
  107. $emailto = $owner_email;
  108. $subject = 'Your credentials to our PMS portal has been created';
  109. $body = "Your credentials are as follows:nusername: ".$username."n Password: ".$password;
  110.  
  111. $message = Swift_Message::newInstance()
  112. ->setSubject($subject)
  113. ->setFrom($emailfrom)
  114. ->setTo($emailto)
  115. ->setBody('test')
  116. ;
  117. $this->getcontainer()->get('mailer')->send($message);
  118.  
  119. }
  120.  
  121. $property_repository = $em->getRepository('AppBundle:Property');
  122. $property = $property_repository->find($property_id);
  123.  
  124. if (!$property) {
  125. $property = new Property();
  126. $property->setName($property_name);
  127. } else {
  128. $current_name = $property->getName();
  129. if ($current_name !== $roomType) {
  130. $property->setName($property_name);
  131. }
  132. }
  133.  
  134. $roomType_repository = $em->getRepository('AppBundle:RoomType');
  135. $roomType = $roomType_repository->find($roomType_id);
  136.  
  137. if (!$roomType) {
  138. $roomType = new RoomType();
  139. $roomType->setRoomType($roomType);
  140. } else {
  141. $current_name = $roomType->getRoomType();
  142. if ($current_name !== $roomType) {
  143. $roomType->setRoomType($roomType);
  144. }
  145. }
  146.  
  147. $room_repository = $em->getRepository('AppBundle:Room');
  148. $room = $room_repository->find($room_id);
  149.  
  150. if (!$room) {
  151. $room = new Room();
  152. $room->setRoomNum($room_num);
  153. $room->setRoomName($owner_name);
  154. } else {
  155. $current_room_num = $room->getRoomNum();
  156. if ($current_room_num !== $room_num) {
  157. $room->setRoomNum($room_num);
  158. }
  159.  
  160. $current_room_name = $room->getRoomName();
  161. if ($current_room_name !== $room_name) {
  162. $room->setRoomName($room_name);
  163. }
  164. }
  165.  
  166. $state = Booking()->get('booker')->isAvailableForDate($room, $date);
  167. $booking_repository = $em->getRepository('AppBundle:Booking');
  168.  
  169. if ($room_status == 0) {
  170. if (!$state) {
  171. $booking = $booking_repository->findOneBy(
  172. array('room_id' => $room->id, 'start' => $date->format('Y-m-d'), 'end' => $date->format('Y-m-d'))
  173. );
  174. $em->remove($booking);
  175. $em->flush();
  176. }
  177. }
  178. else {
  179. if ($state) {
  180. Booking()->get('booker')->book($room, $date->format('Y-m-d'), $date->format('Y-m-d'));
  181. }
  182. }
  183.  
  184. $em->persist($owner);
  185. $em->persist($property);
  186. $em->persist($roomType);
  187. $em->persist($room);
  188.  
  189. }
  190. }
  191. }
  192. }
  193. closedir($handle);
  194. }
  195. }
  196.  
  197. /**
  198. * Parse a csv file
  199. *
  200. * @return array
  201. * @throws Exception
  202. *
  203. */
  204. private function parseCSV()
  205. {
  206. $ignoreFirstLine = $this->cvsParsingOptions['ignoreFirstLine'];
  207. $finder = new Finder();
  208. $finder->files()
  209. ->in($this->cvsParsingOptions['finder_in'])
  210. ->name($this->cvsParsingOptions['finder_name'])
  211. ->files();
  212. foreach ($finder as $file) {
  213. $csv = $file;
  214. }
  215.  
  216. if(empty($csv)){
  217. throw new Exception("NO CSV FILE");
  218. }
  219.  
  220. $rows = array();
  221. if (($handle = fopen($csv->getRealPath(), "r")) !== FALSE) {
  222. $i = 0;
  223. while (($data = fgetcsv($handle, null, ",")) !== FALSE) {
  224. $i++;
  225. if ($ignoreFirstLine && $i == 1) {
  226. continue;
  227. }
  228. $rows[] = $data;
  229. }
  230. fclose($handle);
  231. }
  232. return $rows;
  233. }
  234. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement