feat: promotional and purchase vouchers
This commit is contained in:
@@ -69,6 +69,10 @@ class ApiResponseParser extends AbstractParser
|
||||
return (new TravelParser())->parse($travelNode->first(), ...$additionalArgs);
|
||||
case ApiClient::TYPE_AGENCIES:
|
||||
return (new AgencyParser())->parse($resultNode);
|
||||
case ApiClient::TYPE_PURCHASE_VOUCHER:
|
||||
return (new PurchaseVoucherParser())->parse($resultNode);
|
||||
case ApiClient::TYPE_PROMO_VOUCHER:
|
||||
return (new PromoVoucherParser())->parse($resultNode);
|
||||
}
|
||||
|
||||
throw new ResponseParserException('Unable to parse XML response');
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\BusProNet\XmlParser;
|
||||
|
||||
use App\BusProNet\Model\PromoVoucher;
|
||||
use Symfony\Component\DomCrawler\Crawler;
|
||||
|
||||
final class PromoVoucherParser extends AbstractParser
|
||||
{
|
||||
public function parse(Crawler $node): PromoVoucher
|
||||
{
|
||||
$voucherNode = $node->filterXPath('//aktionsgutschein');
|
||||
|
||||
$code = trim($voucherNode->attr('code') ?? '');
|
||||
$description = trim($voucherNode->attr('text') ?? '');
|
||||
$applicability = $voucherNode->attr('pro_buchung_person') ?? '';
|
||||
$discountAmount = $this->stringToFloat($voucherNode->attr('wert_betrag') ?? '0,00');
|
||||
$discountPercentage = $this->stringToFloat($voucherNode->attr('wert_prozent') ?? '0,00');
|
||||
$minimumPrice = $this->stringToFloat($voucherNode->attr('ab_preis') ?? '0,00');
|
||||
|
||||
return new PromoVoucher(
|
||||
code: $code,
|
||||
description: $description,
|
||||
applicability: $applicability,
|
||||
discountAmount: $discountAmount,
|
||||
discountPercentage: $discountPercentage,
|
||||
minimumPrice: $minimumPrice
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\BusProNet\XmlParser;
|
||||
|
||||
use App\BusProNet\Model\PurchaseVoucher;
|
||||
use Symfony\Component\DomCrawler\Crawler;
|
||||
|
||||
final class PurchaseVoucherParser extends AbstractParser
|
||||
{
|
||||
public function parse(Crawler $node): PurchaseVoucher
|
||||
{
|
||||
$voucherNode = $node->filterXPath('//gutschein');
|
||||
|
||||
$voucherNumber = $this->getStringOrNullValue($voucherNode->filterXPath('//gutscheinnnr')) ?? '';
|
||||
$redemptionCode = $this->getStringOrNullValue($voucherNode->filterXPath('//einloesecode')) ?? '';
|
||||
$voucherId = $this->getIntOrNullValue($voucherNode->filterXPath('//idgutschein')) ?? 0;
|
||||
$remainingBalance = $this->getFloatOrNullValue($voucherNode->filterXPath('//betrag')) ?? 0.0;
|
||||
$type = $this->getStringOrNullValue($voucherNode->filterXPath('//art')) ?? '';
|
||||
|
||||
return new PurchaseVoucher(
|
||||
voucherNumber: $voucherNumber,
|
||||
redemptionCode: $redemptionCode,
|
||||
voucherId: $voucherId,
|
||||
remainingBalance: $remainingBalance,
|
||||
type: $type
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user