Symfony2 Access Booking помощник в команде

Я использую Symfony 2.8 в комплекте с MelifaroBookingBundle, и мне нужно импортировать некоторые данные из CSV с помощью команды. Мне нужно проверить, забронирован ли товар на определенную дату, и выполнить бронирование, если это необходимо.

Согласно документам MelifaroBookingBundle, доступ к помощнику по бронированию можно получить через:

$ This-> Get ( ‘Букер’)

Однако я не могу узнать, как получить доступ к помощнику по бронированию из моей сущности бронирования в моей команде. Кто-нибудь может мне помочь, пожалуйста?

Код моей команды можно найти ниже:

    <?php

// src/AppBundle/Command/ImportCsvCommand.php
namespace AppBundle\Command;

use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Barzo\Password\Generator;
use Symfony\Component\Finder\Finder;

use AppBundle\Entity\User;
use AppBundle\Entity\Property;
use AppBundle\Entity\RoomType;
use AppBundle\Entity\Room;
use AppBundle\Entity\Booking;

use AppBundle\Repository\PropertyRepository;
use AppBundle\Repository\RoomTypeRepository;
use AppBundle\Repository\RoomRepository;
use AppBundle\Repository\BookingRepository;

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:\xampp\htdocs\pms\app\console 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;
}
}

-1

Решение

Букер это сервис … так что вы можете получить к нему доступ как

$this->getContainer()->get('booker')
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector