From cc82e0856a92fa1556d5ec23e7a2ed85cd9ec50c Mon Sep 17 00:00:00 2001 From: ragu Date: Thu, 30 Mar 2023 17:45:12 +0200 Subject: [PATCH] Adding station_type, category and text-cms --- copri4/main/src/Mod/APIfunc.pm | 37 ++++++++++++++++++--- copri4/main/src/Mod/APIjsonclient.pm | 4 +-- copri4/main/src/Mod/APIjsonserver.pm | 23 +++++++------ copri4/main/src/Mod/DBtank.pm | 20 +++++++++++- copri4/main/src/Mod/Indexsharee.pm | 12 ++++--- copri4/main/src/Mod/Prelib.pm | 2 ++ copri4/main/src/Tpl/BaseEdit.pm | 48 ++++++++++++++++++++++------ copri4/main/src/Tpl/Liste3.pm | 30 ++++++++++++----- 8 files changed, 136 insertions(+), 40 deletions(-) diff --git a/copri4/main/src/Mod/APIfunc.pm b/copri4/main/src/Mod/APIfunc.pm index ddbc418..9cf8efd 100755 --- a/copri4/main/src/Mod/APIfunc.pm +++ b/copri4/main/src/Mod/APIfunc.pm @@ -1486,7 +1486,7 @@ sub smartlock { #only by system=Ilockit if($record_pos->{int11} eq "2" && $q->param('voltage') && $q->param('voltage') =~ /(\d+)/){ $update_cc->{int14} = $1; - $self->service_automatic($q,"") if($1 <= 50); + $self->service_automatic($q,"") if($1 <= 60); } my $update_pos = { @@ -1813,6 +1813,7 @@ sub bikes_available(){ $authed = 1 if(ref($auth) eq "HASH" && $auth->{c_id} > 0); (my $bike_group,my $bike_node,my $user_tour,$tariff_content,$adrtarif_hash) = $self->fetch_tariff($varenv->{dbname},$auth,$q->param('authcookie')); + $bw->log("$varenv->{dbname} bikes_available bike_group:",$bike_group,""); #print Dumper($bike_group); #print Dumper($bike_node); my $main_ids = join(",",@{$bike_node}); @@ -2120,7 +2121,7 @@ sub stations_available(){ my $authcookie = $q->param('authcookie') || $q->cookie('domcookie'); my ($bike_group,$bike_node,$user_tour,$tariff_content,$adrtarif_hash) = $self->fetch_tariff($varenv->{dbname},$auth,$authcookie,$cachme); - $bw->log("fetch_tariff adrtarif_hash from $varenv->{dbname}\n",$adrtarif_hash,""); + #$bw->log("fetch_tariff adrtarif_hash from $varenv->{dbname}\n",$adrtarif_hash,""); #station_group and bike_group alias bike nodes.type_id my $station_group = ""; @@ -2228,6 +2229,30 @@ sub stations_available(){ $return->{$id}->{description} = "$description"; $return->{$id}->{state} = "$dbt->{copri_conf}->{bike_state}->{$record->{$id}->{int10}}"; $return->{$id}->{gps_radius} = "$record->{$id}->{int06}"; + + #new station category + #defaults + $return->{$id}->{station_type} = {}; + my @station_group = (); + if($record->{$id}->{txt25} && $record->{$id}->{txt25} =~ /\d\s\d/){ + @station_group = split(/\s/,$record->{$id}->{txt25}); + }elsif($record->{$id}->{txt25}){ + @station_group = ("$record->{$id}->{txt25}"); + } + foreach(@station_group){ + if($_ && $dbt->{copri_conf}->{type_id}->{$_}){ + $return->{$id}->{station_type}->{$dbt->{copri_conf}->{type_id}->{$_}}->{bike_group} = "$dbt->{operator}->{$varenv->{dbname}}->{oprefix}$_"; + my $bike_count2 = 0; + foreach my $b_id (keys (%$record_bikes)){ + if($record->{$id}->{int04} == $record_bikes->{$b_id}->{int04}){ + $bike_count2++ if($_ == $record_bikes->{$b_id}->{type_id}); + } + } + $return->{$id}->{station_type}->{$dbt->{copri_conf}->{type_id}->{$_}}->{bike_count} = "$bike_count2"; + } + } + + #deprecated $return->{$id}->{station_group} = ""; if($record->{$id}->{txt25}){ $record->{$id}->{txt25} =~ s/(\d+)/$dbt->{operator}->{$varenv->{dbname}}->{oprefix}$1/g; @@ -2527,7 +2552,7 @@ sub fetch_tariff(){ } #else select all available user tarif entries $tariff_all = $dbt->fetch_record($dbh,$tariff); - $bw->log("$dbname Tariff type for operator registered user by int18:$tariff->{int18} select 4:",$tariff_all,""); + $bw->log("$dbname Tariff type for operator registered user with Tarif $auth_operator->{txt30} by int18:$tariff->{int18} select 4:",$tariff_all,""); } #end operators address else{ @@ -2546,12 +2571,14 @@ sub fetch_tariff(){ if($auth_operator->{txt30} && $auth_operator->{txt30} =~ /\d\s\d/){ %tarif_hash = map { $_ => 1 } split(/\s+/,$auth_operator->{txt30}); - }elsif($auth_operator->{txt30}){ - $tarif_hash{$auth_operator->{txt30}} = 1; + }elsif($auth_operator->{txt30} && $auth_operator->{txt30} =~ /(\d+)/){ + $tarif_hash{$1} = 1; } + if(ref($tariff_all) eq "HASH"){ foreach my $rid (keys (%$tariff_all)){ + #$bw->log("$dbname Tariff hash $auth_operator->{txt30}|$tariff_all->{$rid}->{barcode} --> $tarif_hash{$tariff_all->{$rid}->{barcode}}",\%tarif_hash,""); if(ref(\%tarif_hash) eq "HASH" && $tarif_hash{$tariff_all->{$rid}->{barcode}}){ foreach my $tk (keys(%tarif_hash)){ $bw->log("Tarif FOUND condition: $tk && $rid && $tariff_all->{$rid}->{barcode} == $tk","",""); diff --git a/copri4/main/src/Mod/APIjsonclient.pm b/copri4/main/src/Mod/APIjsonclient.pm index ab591a8..bfcdc3b 100755 --- a/copri4/main/src/Mod/APIjsonclient.pm +++ b/copri4/main/src/Mod/APIjsonclient.pm @@ -96,8 +96,8 @@ sub loop_sharees { my %prim_tarif_hash = (); if($authraw->{txt30} =~ /\w\s\w/){ %prim_tarif_hash = map { $_ => 1 } split(/\s+/,$authraw->{txt30}); - }elsif($authraw->{txt30}){ - $prim_tarif_hash{$authraw->{txt30}} = 1; + }elsif($authraw->{txt30} && $authraw->{txt30} =~ /(\w+)/){ + $prim_tarif_hash{$1} = 1; } foreach my $optarif (keys(%prim_tarif_hash)){ my $op_key = ""; diff --git a/copri4/main/src/Mod/APIjsonserver.pm b/copri4/main/src/Mod/APIjsonserver.pm index 805c835..20f934e 100755 --- a/copri4/main/src/Mod/APIjsonserver.pm +++ b/copri4/main/src/Mod/APIjsonserver.pm @@ -94,6 +94,13 @@ my $response = { } }; + if($varenv{dbname} eq $dbt->{primary}->{sharee_primary}->{database}->{dbname}){ + $varenv{cms} = $dbt->fetch_cms($dbh,{ lang => $q->escapeHTML($R::lang) }); + }else{ + my $dbh_primary = $dbt->dbconnect_extern($dbt->{primary}->{sharee_primary}->{database}->{dbname}); + $varenv{cms} = $dbt->fetch_cms($dbh_primary,{ lang => $q->escapeHTML($R::lang) }); + } + my $aowner = 0; my $coo = $q->param('authcookie') || $q->param('sessionid') || ""; if(!$coo && !$q->param('merchant_id')){ @@ -478,7 +485,7 @@ elsif($q->param('request') eq "bikes_available"){ my $authraw = {}; ($auth,$authraw) = $apif->auth_verify($q,"","",1); $response = { %$response, %$auth }; - #$bw->log("Y bikes_available by c_id $authraw->{c_id}, Tarif:",$authraw->{txt30},""); + #$bw->log("Y bikes_available $varenv{dbname} by c_id $authraw->{c_id}, Tarif: $authraw->{txt30}",$authraw->{txt30},""); if($varenv{syshost} eq "shareeapp-sx"){ ($response->{bikes},my $return2copri->{bikes}) = $si->sig_available($q,\%varenv,$authraw); @@ -683,17 +690,11 @@ elsif($q->param('request') eq "stations_available"){ #App update message if($user_agent_subversion <= 348){ if($epoch_now >= $epoch_start && $epoch_now <= $epoch_end){ - my $pref_ctu = { - table => "contentuser", - fetch => "one", - ct_name => "App-update-message", - }; - my $uadr = { c_id => 0 }; - $uadr = $dbt->fetch_tablerecord($dbh,$pref_ctu); - $response->{merchant_message} = $uadr->{txt01}; - $response->{merchant_message} = $uadr->{txt02} if($q->param('lang') eq "en"); + $response->{merchant_message} = $varenv{cms}->{'App-update-message'}->{txt}; }else{ + $response->{merchant_message} = $varenv{cms}->{'App-update-message-expired'}->{txt}; $apif->authout($q,$coo); + $dbt->update_operatorsloop($varenv{dbname},$authraw->{c_id},"update"); } } @@ -920,6 +921,8 @@ elsif($q->param('request') eq "service_done"){ ($response_work, $node) = $apif->service_work($pos_record,$stations_allraw,"",$node_template); } + #should not be mandatory here, maybe only for bike_count + #$apif->stations_caching($q,\%varenv,$authraw); #inject oprefix my $op_response_work = {}; diff --git a/copri4/main/src/Mod/DBtank.pm b/copri4/main/src/Mod/DBtank.pm index 2d83218..6005222 100755 --- a/copri4/main/src/Mod/DBtank.pm +++ b/copri4/main/src/Mod/DBtank.pm @@ -684,6 +684,24 @@ sub collect_post(){ return $record; } +#fetch CMS +#coalesce works only on null values +sub fetch_cms(){ + my $self = shift; + my $dbh = shift || $dbh_intern; + my $fetch = shift; + + my $langfield = "txt01"; + $langfield = "txt02" if($fetch->{lang} eq "en"); + $langfield = "txt03" if($fetch->{lang} eq "fr"); + my $sql = "SELECT ct_name, coalesce($langfield, txt01) AS txt FROM contentuser, relation where template_id=194 and c_id=content_id"; + my $sth = $dbh->prepare($sql); + my $rc = $sth->execute(); + + my $record = $sth->fetchall_hashref('ct_name'); + return $record; +}#end fetch_cms + #fetch all|one content + relation + nodes sub fetch_record(){ my $self = shift; @@ -803,7 +821,7 @@ sub fetch_tablerecord(){ $where .= " and $key $op $value"; }elsif($key =~ /time$/ && $value){ $where .= " and $key $op '$value'"; - }elsif($key =~ /^(c_id|u_id|ct_id|ca_id|barcode|int\d+|owner|template_id)$/ && (looks_like_number($value) || $value eq "null")){ + }elsif($key =~ /^(c_id|u_id|cc_id|ct_id|ca_id|barcode|int\d+|owner|template_id)$/ && (looks_like_number($value) || $value eq "null")){ if($value eq "null"){ $where .= " and ($key is null OR $key = 0)"; }elsif($value eq "nullOR1"){ diff --git a/copri4/main/src/Mod/Indexsharee.pm b/copri4/main/src/Mod/Indexsharee.pm index 6fb3a34..a05f05f 100755 --- a/copri4/main/src/Mod/Indexsharee.pm +++ b/copri4/main/src/Mod/Indexsharee.pm @@ -16,18 +16,14 @@ use DBI; use Apache2::RequestUtil (); use Apache2::RequestIO (); use Apache2::Const -compile => qw(OK); -use LWP::UserAgent; use Digest::MD5 qw(md5 md5_hex); use Scalar::Util qw(looks_like_number); -#use Encode; -#use URI::Encode qw(uri_encode uri_decode); use Lib::Config; use Mod::Buttons; use Mod::Prelogic; use Lib::Mlogic; use Mod::Basework; -#use Mod::Premain; use Mod::DBtank; use Mod::Libenzdb; use Mod::APIfunc; @@ -46,7 +42,6 @@ sub handler { my $ml = new Mlogic; my $bw = new Basework; my $pre = new Prelogic; - #my $pm = new Premain; my $tk = new Shareework; my $dbt = new DBtank; my $db = new Libenzdb; @@ -77,6 +72,7 @@ sub handler { d_rows => 0, }; + #$mode is used to set GUI features like "maintainer" contextmenue my $modes = $dbt->{shareedms_conf}->{modes}; my $mode = ""; @@ -173,6 +169,12 @@ sub handler { $users_dms = $dbt->select_users($dbh,$users_sharee->{c_id},"and cookie='$coo'"); } + if($varenv{dbname} eq $dbt->{primary}->{sharee_primary}->{database}->{dbname}){ + $varenv{cms} = $dbt->fetch_cms($dbh,{ lang => $q->escapeHTML($R::lang) }); + }else{ + my $dbh_primary = $dbt->dbconnect_extern($dbt->{primary}->{sharee_primary}->{database}->{dbname}); + $varenv{cms} = $dbt->fetch_cms($dbh_primary,{ lang => $q->escapeHTML($R::lang) }); + } #Save anyway on create ... and hopefully delete it later if($R::sharee_edit && $R::sharee_edit =~ /create_account/ && $R::txt04 && $R::txt04 =~ /\w+/ && $R::txt08 && $R::txt08 =~ /\w+\@\w+/){ diff --git a/copri4/main/src/Mod/Prelib.pm b/copri4/main/src/Mod/Prelib.pm index 8e889ab..71ec371 100755 --- a/copri4/main/src/Mod/Prelib.pm +++ b/copri4/main/src/Mod/Prelib.pm @@ -183,6 +183,8 @@ sub save_content { }else{ $feedb->{message} = "failure::Eingabefehler \"$valxx\", hier sind nur numerische Werte erlaubt"; } + }elsif($node_meta->{template_id} == 194 && $_ =~ /txt/ && !$valxx){ + $update_ct->{$_} = "null";#important for coalesce select alias lang fallback }elsif($_ =~ /ct_name|txt|state|time/){ $update_ct->{$_} = "$valxx"; } diff --git a/copri4/main/src/Tpl/BaseEdit.pm b/copri4/main/src/Tpl/BaseEdit.pm index 14155ed..d40821d 100755 --- a/copri4/main/src/Tpl/BaseEdit.pm +++ b/copri4/main/src/Tpl/BaseEdit.pm @@ -80,6 +80,17 @@ sub tpl(){ my $occupied_style = ""; if($node_meta->{ct_table} eq "content" && $node_meta->{tpl_id} && $c_id){ + #check rental state + if($node_meta->{tpl_id} == 205){ + my $pref = { + table => "contenttranspos", + fetch => "one", + int10 => "IN::(2,3)", + cc_id => $c_id, + }; + $cttpos = $dbt->fetch_tablerecord($dbh,$pref); + $occupied_style = "color:#ff1493" if($cttpos->{int10} == 2 ||$cttpos->{int10} == 3); + } my $ref = { table => "$node_meta->{ct_table}", fetch => "one", @@ -523,7 +534,23 @@ EOF my $seldes = $des; $des .= " ($key)" if($users_dms->{u_id} eq $varenv{superu_id}); - if($key =~ /c_id|ct_name|barcode|txt/ && $size eq "readonly"){ + if($key =~ /txt25/ && $node_meta->{tpl_id} == 225 && $size eq "readonly"){ + my %station_filter_hash = (); + if($ctrel->{txt25} && $ctrel->{txt25} =~ /\d\s\d/){ + %station_filter_hash = map { $_ => 1 } split(/\s+/,$ctrel->{txt25}); + }elsif($ctrel->{txt25} && $ctrel->{txt25} =~ /(\d+)/){ + $station_filter_hash{$1} = 1; + } + my $station_filter = ""; + foreach my $type_id (keys (%station_filter_hash)){ + $station_filter .= "$dbt->{copri_conf}->{type_id}->{$type_id}
"; + } + + print $q->Tr(); + print $q->td({-class=>'left_italic_cms',-style=>'vertical-align:top;',-colspan=>'1'},"$des"); + print $q->td({-class=>'content1_cms',-colspan=>'1'},$station_filter); + } + elsif($key =~ /c_id|ct_name|barcode|txt/ && $size eq "readonly"){ print $q->Tr(); print $q->td({-class=>'left_italic_cms'},"$des"),"\n"; print $q->td({-class=>'content1_cms',-colspan=>2},$q->textfield(-class=>'etxt', -style=>"width:$w;color:grey;",-name=>"$key", -default=>"$ctrel->{$key}", -readonly=>1)),"\n"; @@ -621,13 +648,17 @@ EOF print $q->td({-class=>'content1_cms',-colspan=>'1'},$but->selector_class("$key","eselect","width:350px;",$ctrel->{$key},@_valxx)); } elsif($key =~ /int10/ && "$size" eq "select" && $node_meta->{tpl_id} == 205){#bike_state - my @_lock_valxx = (); - foreach my $s_key (sort keys (%{ $dbt->{copri_conf}->{bike_state} })) { - push @_lock_valxx, "$s_key:$dbt->{copri_conf}->{bike_state}->{$s_key}"; - } print $q->Tr(); print $q->td({-class=>'left_italic_cms'},"$des"),"\n"; - print $q->td({-class=>'content1_cms',-colspan=>'2'},$but->selector_class("$key","eselect","",$ctrel->{$key},@_lock_valxx)); + if($occupied_style){ + print $q->td({-class=>'content1_cms',-colspan=>'2'},"$dbt->{copri_conf}->{bike_state}->{$cttpos->{$key}}", $q->span({-style=>"$occupied_style"},"Das Rad ist in Benutzung. Der Mietvorgang kann nur über das Mietjournal beendet werden")),"\n"; + }else{ + my @_lock_valxx = (); + foreach my $s_key (sort keys (%{ $dbt->{copri_conf}->{bike_state} })) { + push @_lock_valxx, "$s_key:$dbt->{copri_conf}->{bike_state}->{$s_key}"; + } + print $q->td({-class=>'content1_cms',-colspan=>'2'},$but->selector_class("$key","eselect","",$ctrel->{$key},@_lock_valxx)); + } } elsif($key =~ /int10/ && "$size" eq "select" && $node_meta->{tpl_id} == 225){#station_state my @_lock_valxx = (); @@ -742,11 +773,9 @@ EOF print $q->td({-class=>'content1_cms',-colspan=>'1'},$but->selector2("$key","50px;","$height",$ctrel->{$key},@_service_valxx)); } elsif($key =~ /txt24/ && $node_meta->{tpl_id} == 225){ #Station on station_group (bikenode.main_ids) - #my %station_filter_hash = (); - #my @_valxx_filter = (""); my @_valxx = (""); foreach my $rid (sort { $bike_nodes->{$a}->{node_name} cmp $bike_nodes->{$b}->{node_name} } keys (%$bike_nodes)){ - push (@_valxx, "$bike_nodes->{$rid}->{main_id}:$bike_nodes->{$rid}->{node_name} - $dbt->{copri_conf}->{type_id}->{$bike_nodes->{$rid}->{type_id}}"); + push (@_valxx, "$bike_nodes->{$rid}->{main_id}:$bike_nodes->{$rid}->{node_name}"); } my $height = scalar(@_valxx); @@ -754,6 +783,7 @@ EOF print $q->td({-class=>'left_italic_cms',-style=>'vertical-align:top;',-colspan=>'1'},"$des"); print $q->td({-class=>'content1_cms',-colspan=>'1'},$but->selector2("$key","250px;","$height",$ctrel->{$key},@_valxx)); } + #sharee user_group Tarif-2.0 (tarif.c_ids) elsif($key =~ /txt30/ && $varenv{dbname} ne $dbt->{primary}->{sharee_primary}->{database}->{dbname}){ my @_valxx = (""); diff --git a/copri4/main/src/Tpl/Liste3.pm b/copri4/main/src/Tpl/Liste3.pm index 3b37cb4..7cfc525 100755 --- a/copri4/main/src/Tpl/Liste3.pm +++ b/copri4/main/src/Tpl/Liste3.pm @@ -588,7 +588,7 @@ EOF foreach(@tpl_order){ $h++; my ($key,$val,$size) = split /=/,$_; - if($size !~ /select/){ + if($size !~ /select|readonly/){ if($size =~ /area/){ $size = "5em"; }elsif($key =~ /int0|c_id|ct_name/){ @@ -612,11 +612,13 @@ EOF push (@s_valxx, "$bike_nodes->{$rid}->{main_id}:$bike_nodes->{$rid}->{node_name} - $dbt->{copri_conf}->{type_id}->{$bike_nodes->{$rid}->{type_id}}"); } print $q->td({-class=>'search_line'},$but->selector_class("s_$key","","",$s_val,@s_valxx)),"\n"; - }elsif($size =~ /select/ && $key =~ /txt24/ && $tpl_id =~ /225/){#txt24=bike_group (for station filter) + } + #txt24=bike_group + elsif($size =~ /select/ && $key =~ /txt24/ && $tpl_id =~ /225/){ #my %station_filter_hash = (); my @s_valxx = (""); foreach my $rid (sort { $bike_nodes->{$a}->{node_name} cmp $bike_nodes->{$b}->{node_name} } keys (%$bike_nodes)){ - push (@s_valxx, "$bike_nodes->{$rid}->{main_id}:$bike_nodes->{$rid}->{node_name} - $dbt->{copri_conf}->{type_id}->{$bike_nodes->{$rid}->{type_id}}"); + push (@s_valxx, "$bike_nodes->{$rid}->{main_id}:$bike_nodes->{$rid}->{node_name}"); } print $q->td({-class=>'search_line'},$but->selector_class("s_$key","","",$s_val,@s_valxx)),"\n"; @@ -628,7 +630,7 @@ EOF } print $q->td({-class=>'search_line'},$but->selector_class("s_$key","","",$s_val,@s_valxx)),"\n"; - }elsif($size =~ /select/ && $key !~ /txt23|txt24/){#txt23=color-code or txt24=Flotten ID select + }elsif($size =~ /select|readonly/ && $key !~ /txt23|txt24/){#txt23=color-code or txt24=Flotten ID select my @s_valxx = (""); my $s_hash = {}; $s_hash = $dbt->{copri_conf}->{lock_state} if($tpl_id == 205 && $key eq "int20"); @@ -636,15 +638,14 @@ EOF $s_hash = $dbt->{copri_conf}->{station_state} if($tpl_id == 225 && $key eq "int10"); $s_hash = $dbt->{copri_conf}->{lock_system} if($tpl_id == 205 && $key eq "int11"); $s_hash = $dbt->{copri_conf}->{sharing_type} if($tpl_id == 210 && $key eq "int18"); - #$s_hash = $dbt->{copri_conf}->{tariff_unit} if($tpl_id == 210 && $key eq "int01"); + $s_hash = $dbt->{copri_conf}->{type_id} if($tpl_id == 225 && $key eq "txt25"); $s_hash = { 1 => 1, 2 => 2, 3 => 3, 4 => 4 } if($tpl_id == 225 && $key eq "txt07"); - #while (my ($key, $value) = each %{ $s_hash }) { foreach my $s_key (sort keys (%{ $s_hash })) { push @s_valxx, "$s_key:$s_hash->{$s_key}";#[2:unlocked] } print $q->td({-class=>'search_line'},$but->selector_class("s_$key","","",$s_val,@s_valxx)),"\n"; }else{ - print $q->td({-class=>"search_line"},$q->textfield(-class=>'stxt',-name=>"s_$key",-default=>"$s_val",-size=>"$size",-maxlength=>40),"\n"); + print $q->td({-class=>"search_line"},$q->textfield(-class=>'stxt',-name=>"s_$key",-default=>"$s_val",-size=>"$size",-maxlength=>40)),"\n"; } }elsif($key =~ /owner/){ print $q->td({-class=>'search_line'},$but->selector("s_$key","120px","$s_val",@_users)),"\n"; @@ -1034,9 +1035,22 @@ EOF }elsif($ct4rel->{$id}->{template_id} == 225 && $key eq "txt24"){ my $flotten = ""; foreach my $rid (sort { $bike_nodes->{$a}->{node_name} cmp $bike_nodes->{$b}->{node_name} } keys (%$bike_nodes)){ - $flotten .= "$bike_nodes->{$rid}->{node_name} - $dbt->{copri_conf}->{type_id}->{$bike_nodes->{$rid}->{type_id}}
" if($ct4rel->{$id}->{$key} =~ /$bike_nodes->{$rid}->{main_id}/); + $flotten .= "$bike_nodes->{$rid}->{node_name}
" if($ct4rel->{$id}->{$key} =~ /$bike_nodes->{$rid}->{main_id}/); } print $q->td({-class=>'tdtxt',-style=>"$txtstyle $set_style"},"$flotten"),"\n"; + }elsif($ct4rel->{$id}->{template_id} == 225 && $key eq "txt25"){ + my %station_filter_hash = (); + if($ct4rel->{$id}->{txt25} && $ct4rel->{$id}->{txt25} =~ /\d\s\d/){ + %station_filter_hash = map { $_ => 1 } split(/\s+/,$ct4rel->{$id}->{txt25}); + }elsif($ct4rel->{$id}->{txt25} && $ct4rel->{$id}->{txt25} =~ /(\d+)/){ + $station_filter_hash{$1} = 1; + } + my $station_filter = ""; + foreach my $type_id (keys (%station_filter_hash)){ + $station_filter .= "$dbt->{copri_conf}->{type_id}->{$type_id}
"; + } + + print $q->td({-class=>'tdtxt',-style=>"$txtstyle $set_style"},"$station_filter"),"\n"; }elsif($ct4rel->{$id}->{template_id} == 228 && $key =~ /int21|int22/){ my $bonustarif = ""; foreach my $rid (sort { $tariff_all->{$a}->{barcode} <=> $tariff_all->{$b}->{barcode} } keys (%$tariff_all)){