From 2a3f579b94b8619b9d8cc1e1b992628abb8f3c34 Mon Sep 17 00:00:00 2001 From: ragu Date: Fri, 17 Mar 2023 13:23:04 +0100 Subject: [PATCH] counting bikes on station by bike_count --- copri4/main/src/Mod/APIsigclient.pm | 5 +++ copri4/main/src/Mod/GBFSout.pm | 1 + copri4/main/src/Mod/Payment.pm | 3 +- copri4/main/src/Mod/Shareework.pm | 14 ++++++--- copri4/main/src/Tpl/Karte_osm.pm | 48 +++++++++++++++++++++++++++++ 5 files changed, 65 insertions(+), 6 deletions(-) diff --git a/copri4/main/src/Mod/APIsigclient.pm b/copri4/main/src/Mod/APIsigclient.pm index 36117dc..907e13d 100755 --- a/copri4/main/src/Mod/APIsigclient.pm +++ b/copri4/main/src/Mod/APIsigclient.pm @@ -113,6 +113,11 @@ sub sig_available { if($station && looks_like_number($resp->{site}->{id}) && ref($bike_group) eq "ARRAY" && @{$bike_group}[0]){ print FILE "Station: $station\n\n"; $response_out->{$station}->{station} = "$station"; + + if($resp->{status} && $resp->{status} =~ /ACTIVE|PRIVATE/i && !$resp->{reservation_state}){ + $response_out->{$station}->{bike_count}++; + } + $response_out->{$station}->{authed} = "$authed"; $response_out->{$station}->{uri_operator} = "$dbt->{operator}->{$varenv->{dbname}}->{operatorApp}"; diff --git a/copri4/main/src/Mod/GBFSout.pm b/copri4/main/src/Mod/GBFSout.pm index a5988df..92bdb2d 100755 --- a/copri4/main/src/Mod/GBFSout.pm +++ b/copri4/main/src/Mod/GBFSout.pm @@ -100,6 +100,7 @@ sub station_information { $gbfs_station{$station}{station_id} = $response_stations->{shareejson}->{stations}->{$station}->{station}; $gbfs_station{$station}{name} = Encode::encode('utf-8', Encode::decode('iso-8859-1',$response_stations->{shareejson}->{stations}->{$station}->{description})); $gbfs_station{$station}{capacity} = $response_stations->{shareejson}->{stations}->{$station}->{capacity}; + $gbfs_station{$station}{bike_count} = $response_stations->{shareejson}->{stations}->{$station}->{bike_count}; $gbfs_station{$station}{lat} = $response_stations->{shareejson}->{stations}->{$station}->{gps}->{latitude}; $gbfs_station{$station}{lon} = $response_stations->{shareejson}->{stations}->{$station}->{gps}->{longitude}; #$gbfs_station{$station}{is_charging_station} = 1 if(grep(/300102/, @{$response_stations->{shareejson}->{stations}->{$station}->{station_group}}));#E-L diff --git a/copri4/main/src/Mod/Payment.pm b/copri4/main/src/Mod/Payment.pm index f192f36..57970c6 100755 --- a/copri4/main/src/Mod/Payment.pm +++ b/copri4/main/src/Mod/Payment.pm @@ -488,13 +488,14 @@ sub rpc { #$update_adr->{txt28} = $val if($key eq "mandate_text" && ($val =~ /SEPA/ || !$val)); $update_adr->{txt28} = $now_dt . " $todo\n" . $q->escapeHTML($res->content); } - $update_adr->{int12} = 0;#Vde + $update_adr->{int12} = 0 if($vde_on_fail != 2);#Vde $dbt->update_record($dbh,$update_adr,$ctadr) if($ctadr->{c_id} > 0); my $ret = $self->pdfmandat($varenv,$ctadr->{c_id}); print FILE "pdfmandat call generates: $ret\n" if($debug); }elsif($ctadr->{c_id}){ $update_adr->{int12} = $vde_on_fail;#Vde } + print FILE "managemandate update_adr:" . Dumper($update_adr) . "\n" if($debug); } my $txidval = ""; diff --git a/copri4/main/src/Mod/Shareework.pm b/copri4/main/src/Mod/Shareework.pm index a3f0bae..089845d 100755 --- a/copri4/main/src/Mod/Shareework.pm +++ b/copri4/main/src/Mod/Shareework.pm @@ -238,8 +238,8 @@ sub save_account(){ } $u_rows = $dbt->update_one($dbh,$update_primary,"txt17='@operators'"); } - #Web-Login|Rabatt|Vde|payone cron-intervall|Ilockit-Admin|miniq - elsif($_ =~ /int05|int07|int16|int19|int23/){ + #Rabatt|payone cron-intervall|Ilockit-Admin|miniq + elsif($_ =~ /int07|int16|int19|int23/){ $u_rows = $dbt->update_one("",$update_primary,"$_=$valxx"); } #user_tour @@ -442,6 +442,9 @@ sub save_account(){ } $u_rows = $dbt->update_one($dbh,$update_primary,"$_='$valxx'"); } + }elsif($_ eq "int05"){#Web-login + $u_rows = $dbt->update_one($dbh,$update_primary,"$_=$valxx"); + $u_rows = $dbt->update_one($dbh,$update_primary,"txt05=null") if($valxx != 1); }elsif($_ eq "int12" && $varenv{dbname} ne $dbt->{primary}->{sharee_primary}->{database}->{dbname}){ my $vde_on_fail = 0; $vde_on_fail = 2 if($valxx && $valxx == 1); @@ -503,7 +506,7 @@ sub save_account(){ $ctadr = $dbt->fetch_record($dbh,$authref); print FILE "+++ $R::request && $ctadr->{int03} == 1 && $ctadr->{ct_name} eq $ctadr->{c_id} \n" if($debug); - #if($R::request eq "managemandate" && $ctadr->{int03} == 1 && $ctadr->{ct_name} eq $ctadr->{c_id}){ + #if($R::request eq "managemandate" && $ctadr->{int03} == 1 && $ctadr->{ct_name} eq $ctadr->{c_id}) #fraud workaround my $iban = $ctadr->{txt22} || ""; $iban =~ s/\s//g; @@ -533,7 +536,8 @@ sub save_account(){ if(1==1){ $ctt->{txt16} = "$payone_txid"; - $u_rows = $dbt->update_one($dbh,$update_primary,"int12=0");#Vde + $vde_on_fail = 0 if($vde_on_fail != 2); + $u_rows = $dbt->update_one($dbh,$update_primary,"int12=$vde_on_fail");#Vde #$payone_txid = $payone->captureSEPA_main(\%varenv,$ctadr,$ctt,$owner); #int12=0 should be set after capture success in payment module @@ -573,7 +577,7 @@ sub save_account(){ print FILE Dumper($feedb) . "\n" if($debug); close(FILE) if($debug); return ($ret,$feedb); -} +}#end save_account #insert/save/delete DMS users sub manage_dmsusers { diff --git a/copri4/main/src/Tpl/Karte_osm.pm b/copri4/main/src/Tpl/Karte_osm.pm index 57dbb6f..9fcf7eb 100755 --- a/copri4/main/src/Tpl/Karte_osm.pm +++ b/copri4/main/src/Tpl/Karte_osm.pm @@ -144,6 +144,8 @@ var icon_red = L.icon({ popupAnchor: [-2, -36] }); +//stations and bikes at all +if(1==2){ Promise.all([ fetch( "$uri_request/GBFSout?request=stations_available&authcookie=$api_return->{authcookie}" @@ -202,6 +204,52 @@ Promise.all([ map.fitBounds(layerGroup.getBounds()); }); +}//end stations and bikes at all + +//Only stations with bike_count +Promise.all([ + fetch( + "$uri_request/GBFSout?request=stations_available&authcookie=$api_return->{authcookie}" + )]).then(async ([response1]) => { + const responseData1 = await response1.json(); + + const data1 = responseData1.data.stations; + + const layerGroup = L.featureGroup().addTo(map); + data1.forEach(({ lat, lon, name, address, bike_count, station_id: stationId }) => { + console.log('Station: ' + stationId , name); + + if(bike_count > 0){ + layerGroup.addLayer( + L.marker([lat, lon], { icon:icon_green }).bindPopup( + `Mietradstation: \${name} \${stationId}
+ Verfügbare Mieträder: \${bike_count} + ` + ) + ); + }else{ + layerGroup.addLayer( + L.marker([lat, lon], { icon:icon_red }).bindPopup( + `Mietradstation: \${name} \${stationId}
+ Aktuell ist kein Mietrad verfügbar + ` + ) + ); + + } + }); + + if('$manlat' && '$manlng'){ + layerGroup.addLayer( + L.marker([$manlat, $manlng]).bindPopup( + '$manlat, $manlng' + ) + ); + } + + map.fitBounds(layerGroup.getBounds()); +}); + EOF