summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBirte Kristina Friesel <derf@finalrewind.org>2025-01-19 00:15:53 +0100
committerBirte Kristina Friesel <derf@finalrewind.org>2025-01-19 00:15:53 +0100
commit33cc19fca4c95c58e067e8e2df9bdf427be434e4 (patch)
treec238fdd563e2288b637f4f4e98b3e23d8d5655a4
parent5075461af23c7016f045450808b4302d4109934f (diff)
Add basic support for discounts (BahnCard 25 / 50 / 100)
-rwxr-xr-xbin/dbris6
-rw-r--r--lib/Travel/Routing/DE/DBRIS.pm26
2 files changed, 32 insertions, 0 deletions
diff --git a/bin/dbris b/bin/dbris
index d6a642d..b783037 100755
--- a/bin/dbris
+++ b/bin/dbris
@@ -16,6 +16,7 @@ use Travel::Routing::DE::DBRIS;
my ( $date, $time, $from, $to );
my $mots;
+my $discounts;
my $developer_mode;
my ( $json_output, $raw_json_output );
my $use_cache = 1;
@@ -33,6 +34,7 @@ my $output_reset = -t STDOUT ? "\033[0m" : q{};
GetOptions(
'd|date=s' => \$date,
+ 'D|discounts=s' => \$discounts,
'h|help' => sub { show_help(0) },
'm|modes-of-transit=s' => \$mots,
't|time=s' => \$time,
@@ -134,6 +136,10 @@ if ($mots) {
$opt{modes_of_transit} = [ split( qr{, *}, $mots ) ];
}
+if ($discounts) {
+ $opt{discounts} = [ split( qr{, *}, $discounts ) ];
+}
+
sub show_help {
my ($code) = @_;
diff --git a/lib/Travel/Routing/DE/DBRIS.pm b/lib/Travel/Routing/DE/DBRIS.pm
index aa4a476..4a984f3 100644
--- a/lib/Travel/Routing/DE/DBRIS.pm
+++ b/lib/Travel/Routing/DE/DBRIS.pm
@@ -81,6 +81,32 @@ sub new {
deutschlandTicketVorhanden => \0
};
+ if ( @{ $conf{discount} // [] } ) {
+ $req->{reisende}[0]{ermaessigungen} = [];
+ }
+ for my $discount ( @{ $conf{discounts} // [] } ) {
+ my ( $type, $class );
+ for my $num (qw(25 50 100)) {
+ if ( $discount eq "bc${num}" ) {
+ $type = "BAHNCARD${num}";
+ $class = 'KLASSE_2';
+ }
+ elsif ( $discount eq "bc${num}-first" ) {
+ $type = "BAHNCARD${num}";
+ $class = 'KLASSE_1';
+ }
+ }
+ if ($type) {
+ push(
+ @{ $req->{reisende}[0]{ermaessigungen} },
+ {
+ art => $type,
+ klasse => $class,
+ }
+ );
+ }
+ }
+
$self->{strptime_obj} //= DateTime::Format::Strptime->new(
pattern => '%Y-%m-%dT%H:%M:%S',
time_zone => 'Europe/Berlin',