diff --git a/copri4/main/src/Mod/APIfunc.pm b/copri4/main/src/Mod/APIfunc.pm index f9c7acc..7cf2561 100755 --- a/copri4/main/src/Mod/APIfunc.pm +++ b/copri4/main/src/Mod/APIfunc.pm @@ -504,7 +504,6 @@ sub service_update(){ ca_id => "$auth->{c_id}", "ct.close_time" => "is::null", int10 => "1", - int28 => "3", end_time => ">=::(now() - interval '5 min')", }; my $ctpos = { c_id => 0 }; @@ -526,16 +525,36 @@ sub service_update(){ $update->{int01} = 1 if($q->param('bike_broken')); $update->{txt02} = $q->escapeHTML($q->param('message')) if($q->param('message')); - #to update sig int28 counter $ctpos = $dbt->collect_post($dbh,$pref) if($bike_id); if($ctpos->{c_id} > 0){ my $update_pos = { table => "contenttranspos", mtime => "now()", - int28 => "2", }; + + #update sig int28 counter + $update_pos->{int28} = 2 if($ctpos->{int28} && $ctpos->{int28} == 3); + + #update bike charge on pos and content + if($q->param('charge_current_bars') =~ /^\d+$/){ + my $max_bars = 5; + my $current_percent = $bw->battery_percent($max_bars,$q->param('charge_current_bars')); + $update_pos->{int19} = $current_percent; + + #update also bike charge + my $update_bike = { + table => "content", + mtime => "now()", + int19 => "$update_pos->{int19}", + }; + my $record_bike = { c_id => 0 }; + $record_bike->{c_id} = $ctpos->{cc_id} if($ctpos->{cc_id}); + $dbt->update_record($dbh,$update_bike,$record_bike) if($record_bike->{c_id} > 0); + } + $dbt->update_record($dbh,$update_pos,$ctpos); } + }elsif($q->param('request') eq "user_minianswer"){ $update = { table => "contentadrpos", @@ -1610,13 +1629,6 @@ sub booking_update(){ } }#end mini_quest - #TODO, return akku capacity level for user question - #set e-bike attribut on DMS editor nad not by main_id - #if($booking->{int10} == 1 && $record_cc->{main_id} == 300102){ - if($booking->{int10} == 1 && $record_cc->{energy_id} == 1){ - $booking_values->{akku_levelquery} = "5"; - } - #fetch tracking distance on Ilockit cloud by summary trip if(tracking && deviceId && available) if($booking->{int25} == 1 && $booking->{int10} == 1){ $bw->log("get co2saving",$booking->{c_id},""); @@ -1940,7 +1952,6 @@ sub bikes_available(){ $return->{$id}->{description} = Encode::encode('utf-8', Encode::decode('iso-8859-1', $record->{$id}->{txt01})); $return->{$id}->{state} = "$dbt->{copri_conf}->{bike_state}->{$record->{$id}->{int10}}"; $return->{$id}->{lock_state} = "$dbt->{copri_conf}->{lock_state}->{$record->{$id}->{int20}}"; - $return->{$id}->{bike_charge} = "$record->{$id}->{int19}" if($record->{$id}->{int19}); #defaults $return->{$id}->{bike_group} = []; @@ -1954,7 +1965,19 @@ sub bikes_available(){ $return->{$id}->{bike_type}->{category} = "cargo"; $return->{$id}->{bike_type}->{wheels} = "2"; $return->{$id}->{bike_type}->{wheels} = "3" if($record->{$id}->{txt01} =~ /drei|trike/i); - $return->{$id}->{bike_type}->{engine}->{manufacturer} = "dummy" if($record->{$id}->{txt01} =~ /E-/i); + if($record->{$id}->{txt01} =~ /E-/i){ + $return->{$id}->{bike_type}->{engine}->{manufacturer} = "dummy"; + my $max_bars = 5; + my $current_bars = 0; + $return->{$id}->{bike_type}->{battery}->{charge_max_bars} = "$max_bars"; + $return->{$id}->{bike_type}->{battery}->{charge_current_bars} = "$current_bars"; + $return->{$id}->{bike_type}->{battery}->{charge_current_percent} = "0"; + if($record->{$id}->{int19}){ + $current_bars = $bw->battery_bars($max_bars,$record->{$id}->{int19}); + $return->{$id}->{bike_type}->{battery}->{charge_current_bars} = "$current_bars"; + $return->{$id}->{bike_type}->{battery}->{charge_current_percent} = "$record->{$id}->{int19}"; + } + } } } if($record->{$id}->{int11} eq "2"){ @@ -2105,7 +2128,19 @@ sub bikes_all(){ $return->{$id}->{bike_type}->{category} = "cargo"; $return->{$id}->{bike_type}->{wheels} = "2"; $return->{$id}->{bike_type}->{wheels} = "3" if($record->{$id}->{txt01} =~ /drei|trike/i); - $return->{$id}->{bike_type}->{engine}->{manufacturer} = "dummy" if($record->{$id}->{txt01} =~ /E-/i); + if($record->{$id}->{txt01} =~ /E-/i){ + $return->{$id}->{bike_type}->{engine}->{manufacturer} = "dummy"; + my $max_bars = 5; + my $current_bars = 0; + $return->{$id}->{bike_type}->{battery}->{charge_max_bars} = "$max_bars"; + $return->{$id}->{bike_type}->{battery}->{charge_current_bars} = "$current_bars"; + $return->{$id}->{bike_type}->{battery}->{charge_current_percent} = "0"; + if($record->{$id}->{int19}){ + $current_bars = $bw->battery_bars($max_bars,$record->{$id}->{int19}); + $return->{$id}->{bike_type}->{battery}->{charge_current_bars} = "$current_bars"; + $return->{$id}->{bike_type}->{battery}->{charge_current_percent} = "$record->{$id}->{int19}"; + } + } } } diff --git a/copri4/main/src/Mod/APIsigclient.pm b/copri4/main/src/Mod/APIsigclient.pm index 5508f08..6b47579 100755 --- a/copri4/main/src/Mod/APIsigclient.pm +++ b/copri4/main/src/Mod/APIsigclient.pm @@ -113,8 +113,10 @@ sub sig_available { $response_out->{$station}->{station} = "$station"; $response_out->{$station}->{authed} = "$authed"; $response_out->{$station}->{uri_operator} = "$dbt->{operator}->{$varenv->{dbname}}->{operatorApp}"; + + #FIXME charset encoding #$response_out->{$station}->{description} = "$resp->{site}->{address}" || ""; - $response_out->{$station}->{description} = Encode::encode('utf-8', Encode::decode('iso-8859-1',$resp->{site}->{address})) || ""; + #$response_out->{$station}->{description} = Encode::encode('utf-8', Encode::decode('iso-8859-1',$resp->{site}->{address})) || ""; $response_out->{$station}->{station_group} = ["SX300101"];#Lastenrad alias type_id $response_out->{$station}->{gps}->{latitude} = "$resp->{site}->{lat}" || ""; $response_out->{$station}->{gps}->{longitude} = "$resp->{site}->{lon}" || ""; @@ -186,7 +188,6 @@ sub sig_available { $response_out->{$bike}->{description} = "E-Lastenrad"; $response_out->{$bike}->{gps}->{latitude} = "$resp->{state}->{lat}" || ""; $response_out->{$bike}->{gps}->{longitude} = "$resp->{state}->{lon}" || ""; - $response_out->{$bike}->{bike_charge} = "$resp->{energy_level}" || "0"; $response_out->{$bike}->{state} = "defect"; $response_out->{$bike}->{lock_state} = "locked"; if(uc($resp->{reservation_state}) eq "RESERVED"){ @@ -198,6 +199,19 @@ sub sig_available { $response_out->{$bike}->{state} = "available"; } + $response_out->{$bike}->{bike_type}->{engine}->{manufacturer} = "dummy"; + my $max_bars = 5; + my $current_bars = 0; + $response_out->{$bike}->{bike_type}->{battery}->{charge_max_bars} = "$max_bars"; + $response_out->{$bike}->{bike_type}->{battery}->{charge_current_bars} = "$current_bars"; + $response_out->{$bike}->{bike_type}->{battery}->{charge_current_percent} = "0"; + if(looks_like_number($resp->{energy_level})){ + $current_bars = $bw->battery_bars($max_bars,$resp->{energy_level}); + $response_out->{$bike}->{bike_type}->{battery}->{charge_current_bars} = "$current_bars"; + $response_out->{$bike}->{bike_type}->{battery}->{charge_current_percent} = "$resp->{energy_level}"; + } + + $response_out->{$bike}->{system} = "sigo"; $response_out->{$bike}->{bike_group} = ["SX300101"];#Lastenrad type_id $response_out->{$bike}->{unlock_allowed} = "1"; @@ -251,7 +265,7 @@ sub sig_available { $return2copri->{$bike}->{txt01} = "$response_out->{$bike}->{description}"; $return2copri->{$bike}->{int25} = "1" if($resp->{gps_tracker_id}); $return2copri->{$bike}->{txt06} = "$response_out->{$bike}->{gps}->{latitude},$response_out->{$bike}->{gps}->{longitude}"; - $return2copri->{$bike}->{int19} = $1 if($response_out->{$bike}->{bike_charge} =~ /(\d+)/); + $return2copri->{$bike}->{int19} = $1 if($response_out->{$bike}->{bike_type}->{battery}->{charge_current_percent} =~ /(\d+)/); while (my ($key, $value) = each %{ $dbt->{copri_conf}->{bike_state} }) { if($response_out->{$bike}->{state} eq $value){ $return2copri->{$bike}->{int10} = $key; diff --git a/copri4/main/src/Mod/Basework.pm b/copri4/main/src/Mod/Basework.pm index 26b2604..3ecf741 100755 --- a/copri4/main/src/Mod/Basework.pm +++ b/copri4/main/src/Mod/Basework.pm @@ -90,6 +90,39 @@ EOF return $return; } +sub battery_bars { + my $self = shift; + my $max_bars = shift || 0; + my $current_percent = shift || 0; + + my $current_bars = 0; + if($max_bars == 5){ + $current_bars = 1 if($current_percent >= 10); + $current_bars = 2 if($current_percent >= 30); + $current_bars = 3 if($current_percent >= 50); + $current_bars = 4 if($current_percent >= 70); + $current_bars = 5 if($current_percent >= 90); + } + + return $current_bars; +} + +sub battery_percent { + my $self = shift; + my $max_bars = shift || 0; + my $current_bars = shift || 0;#by user input + + my $current_percent = 0; + if($max_bars == 5){ + $current_percent = 10 if($current_bars >= 1); + $current_percent = 30 if($current_bars >= 2); + $current_percent = 50 if($current_bars >= 3); + $current_percent = 70 if($current_bars >= 4); + $current_percent = 100 if($current_bars >= 5); + } + + return $current_percent; +} 1; diff --git a/copri4/main/src/Mod/Pricing.pm b/copri4/main/src/Mod/Pricing.pm index d533f31..79d2926 100755 --- a/copri4/main/src/Mod/Pricing.pm +++ b/copri4/main/src/Mod/Pricing.pm @@ -111,6 +111,9 @@ sub counting_rental { my $computed_clock = $real_clock; my $rental_minute = $self->clock_minutes($computed_clock); + #if end_station == start_station and rental minutes < 5 minutes, then 0 + $rental_minute = 0 if($ctpos->{int04} == $ctpos->{int06} && $rental_minute && $rental_minute < 5); + #init with some defaults my $total_price = 0; my $ctpos_freed = { c_id => 0 }; @@ -142,6 +145,7 @@ sub counting_rental { } } + my $rental_unit = 0; my $price_by_allunit = 0; my $max_daily_unit = 0;#how many rental_minute is one daily_unit @@ -281,7 +285,7 @@ sub fetch_rentalfeed { my $returned_counting = shift || {}; my $td_template = $dbt->rental_description_template(); - my $bike_group = "$dbt->{operator}->{$varenv->{dbname}}->{oprefix}$ctpos->{int12}" || ""; + my $bike_group = "$dbt->{operator}->{$varenv->{dbname}}->{oprefix}$ctpos->{int29}" || ""; my $return = {}; $return->{bike_group} = ["$bike_group"]; @@ -302,17 +306,27 @@ sub fetch_rentalfeed { $return->{bike_type}->{wheels} = "2"; #for station_type_id mapping - if($ctpos->{int29}){ - if($ctpos->{int29} == 300101){ + if($ctpos->{int29} && $ctpos->{int29} == 300101){ $return->{bike_type}->{category} = "cargo"; $return->{bike_type}->{wheels} = "2"; $return->{bike_type}->{wheels} = "3" if($ctpos->{txt01} =~ /drei|trike/i); - $return->{bike_type}->{engine}->{manufacturer} = "dummy" if($ctpos->{txt01} =~ /E-/i); - } + + if($ctpos->{txt01} =~ /E-/i){ + $return->{bike_type}->{engine}->{manufacturer} = "dummy"; + my $max_bars = 5; + my $current_bars = 0; + $return->{bike_type}->{battery}->{charge_max_bars} = "$max_bars"; + $return->{bike_type}->{battery}->{charge_current_bars} = "$current_bars"; + $return->{bike_type}->{battery}->{charge_current_percent} = "0"; + if($ctpos->{int19}){ + $current_bars = $bw->battery_bars($max_bars,$ctpos->{int19}); + $return->{bike_type}->{battery}->{charge_current_bars} = "$current_bars"; + $return->{bike_type}->{battery}->{charge_current_percent} = "$ctpos->{int19}"; + } + } } $return->{Ilockit_ID} = "$ctpos->{txt18}" if($ctpos->{int11} == 2); - $return->{bike_charge} = "$ctpos->{int19}" if($ctpos->{int19}); $return->{description} = "$ctpos->{txt01}"; $return->{request_time} = "$ctpos->{itime}"; $return->{system} = "Ilockit" if($ctpos->{int11} && $ctpos->{int11} == 2); diff --git a/copri4/shareeapp-operator/src/Lib/Mlogic.pm b/copri4/shareeapp-operator/src/Lib/Mlogic.pm index d9dea64..1cdf6db 100755 --- a/copri4/shareeapp-operator/src/Lib/Mlogic.pm +++ b/copri4/shareeapp-operator/src/Lib/Mlogic.pm @@ -42,8 +42,8 @@ sub tpl(){ if($users_sharee->{c_id} && $R::sharee_edit ne "delete_account2" && ($users_sharee->{c_id} eq $varenv->{superu_id} || $dbt->{copri_conf}->{stage} eq "test" || $users_sharee->{txt08} eq "sigo\@sharee.bike")){ my $coo = $q->cookie('domcookie') || $q->param('sessionid') || ""; - my $api_test = "sharee_fr01"; my $bike="FR1538"; - #my $api_test = "sharee_fr01"; my $bike="FR1005";#E-Lastenrad (bike_group=300101, bike_node=300102) + #my $api_test = "sharee_fr01"; my $bike="FR1538"; + my $api_test = "sharee_fr01"; my $bike="FR1005";#E-Lastenrad (bike_group=300101, bike_node=300102) #my $api_test = "sharee_fr01"; my $bike="FR4781";#Tracking and BVB test #my $api_test = "sharee_kn"; my $bike="KN205"; #my $api_test = "sharee_wue"; my $bike="WUE5525"; diff --git a/copri4/shareeapp-operator/src/Tpl/FormEdit.pm b/copri4/shareeapp-operator/src/Tpl/FormEdit.pm index e1083d8..b113d2a 100755 --- a/copri4/shareeapp-operator/src/Tpl/FormEdit.pm +++ b/copri4/shareeapp-operator/src/Tpl/FormEdit.pm @@ -437,7 +437,9 @@ Nach Abschluss der Registrierung erhalten Sie sowohl auf die von Ihnen hinterleg $gesamt = $lb->round($pricing->{total_price}); $gesamt = sprintf('%.2f', $gesamt); $gesamt =~ s/\./,/; - print $q->td({-class=>'tdint', -style=>"$occupied_style", -nowrap=>1},"$gesamt €"),"\n"; + my $rabatt = ""; + $rabatt = "$pricing->{discount}" if($pricing->{discount}); + print $q->td({-class=>'tdint', -style=>"$occupied_style", -nowrap=>1},"$rabatt $gesamt €"),"\n"; }else{ my $gesamt = 0; my $rabatt = "";