Improve contingent import reliability

This commit is contained in:
Björn Fromme
2021-06-08 16:50:06 +02:00
parent 51ea80d219
commit dc73a5af59
4 changed files with 31 additions and 31 deletions
@@ -46,32 +46,25 @@ class ContingentRepository extends AbstractRepository implements ProviderInterfa
public function getEvents(\DateTime $dateFrom, \DateTime $dateTo = null, array $options = [])
{
$optionsResolver = new OptionsResolver();
$optionsResolver->setRequired(['hotelCode']);
$optionsResolver->setDefined(['hotel']);
$optionsResolver->setDefaults(['hotel' => null]);
$optionsResolver->setAllowedTypes('hotel', Hotel::class);
$resolvedOptions = $optionsResolver->resolve($options);
$hotel = $resolvedOptions['hotel'];
$hotelCode = $resolvedOptions['hotelCode'];
$qb = $this->getDbConnection()->createQueryBuilder();
$qb
->select('status as status', 'date as date', 'min_price as minPrice', 'pax', 'available')
->from('tx_epproducts_domain_model_contingent')
->orderBy('date')
;
$hotel = null;
if ($resolvedOptions['hotel']) {
/** @var Hotel $hotel */
$hotel = $resolvedOptions['hotel'];
$qb
->where('hotel = :hotel')
->setParameter('hotel', $hotel->getUid())
;
}
$qb
->where('hotel_code = :hotelCode')
->andWhere('date >= :dateFrom')
->setParameter('hotelCode', $hotelCode)
->setParameter('dateFrom', $dateFrom->format('Y-m-d'))
->orderBy('date')
;
if (null !== $dateTo) {
@@ -81,7 +74,7 @@ class ContingentRepository extends AbstractRepository implements ProviderInterfa
;
}
$result = $qb->execute()->fetchAll();
$result = $qb->execute()->fetchAllAssociative();
$dates = [];
@@ -145,7 +138,7 @@ class ContingentRepository extends AbstractRepository implements ProviderInterfa
->orderBy('c.date')
;
return $qb->execute()->fetchAll();
return $qb->execute()->fetchAllAssociative();
}
/**
@@ -185,7 +178,7 @@ class ContingentRepository extends AbstractRepository implements ProviderInterfa
->addOrderBy('c.min_price')
;
return $qb->execute()->fetchAll();
return $qb->execute()->fetchAllAssociative();
}
}
@@ -94,15 +94,20 @@ class GroupsSwissService implements SingletonInterface, LoggerAwareInterface
{
$range = Period::after(new \DateTime('now'), '1 year');
foreach ($this->apiKeys as $hotelUid => $config) {
/** @var Hotel $hotel */
$hotel = $this->hotelRepository->findByUid($hotelUid);
foreach ($this->apiKeys as $config) {
if (null === $hotel) {
$this->logger->error(sprintf('Hotel with uid %d not found', $hotelUid));
$hotelCode = $config['hotelCode'];
$result = $this->hotelRepository->findByCode($hotelCode);
if (null === $result) {
$this->logger->error(sprintf('Hotel with code %s not found', $hotelCode));
continue;
}
/** @var Hotel $hotel */
$hotel = $result->getFirst();
$this->logger->info(sprintf(
'Publishing availabilities for hotel %s',
preg_replace( '/[\r\n]/', '', $hotel->getName())
@@ -112,7 +117,7 @@ class GroupsSwissService implements SingletonInterface, LoggerAwareInterface
$events = $this->contingentRepository->getEvents(
\DateTime::createFromImmutable($range->getStartDate()),
\DateTime::createFromImmutable($range->getEndDate()),
['hotel' => $hotel]
['hotel' => $hotel, 'hotelCode' => $hotelCode]
);
}
catch (DBALException $e) {
@@ -216,7 +221,8 @@ class GroupsSwissService implements SingletonInterface, LoggerAwareInterface
);
try {
$this->httpClient->request('GET', $url);
$foo = 1;
// $this->httpClient->request('GET', $url);
} catch (TransportExceptionInterface $e) {
$this->logger->error(sprintf('A problem occured: %s', $e->getMessage()));
}
@@ -65,7 +65,7 @@ class IcalService implements SingletonInterface
$events = $this->contingentRepository->getEvents(
$now,
null,
['hotel' => $hotel]
['hotel' => $hotel, 'hotelCode' => $hotel->getCode()]
);
}
catch (DBALException $e) {
@@ -67,36 +67,37 @@ plugin.tx_epproducts {
groupsSwissApiKeys {
# Spinabad
7 {
hotelCode = DGS
number = 9849
key = a8b504ab2784446cbf73b8b1f6777f43
}
# Waldschlössli
6 {
hotelCode = DPW
number = 9658
key = f757b34dc3ac4a158257cf12c9ce69e1
}
# Jenatsch
37 {
hotelCode = LPJNEU
number = 9703
key = 52c314a88a434b359717115db992d20d
}
# Schweizerhaus
5 {
hotelCode = DKS
number = 9850
key = 4a955b23158d40c583b2892a18aa1043
}
# Astoria
74 {
number = 632795
key = 7002bbee9fab4985b1caccabb6f6cab5
}
# Klein Tirol
65 {
hotelCode = MVK
number = 668904
key = e9d86dbc465848d7a0b68df14e3e482f
}
# Weissfluh
131 {
hotelCode = DWW21/22
number = 961523
key = 6a22585d23184f2090bd7110aa9b60f3
}