mirror of
https://gitlab.com/t6353/sharee.bike.git
synced 2025-05-13 15:16:38 +02:00
Booking calendar (beta intern) for calendar bike reservation
This commit is contained in:
parent
030091de20
commit
d5a98d0c54
26 changed files with 1127 additions and 144 deletions
|
@ -17,6 +17,7 @@ use Digest::MD5 qw(md5 md5_hex);
|
|||
use Digest::SHA qw(sha256_base64);
|
||||
use Scalar::Util qw(looks_like_number);
|
||||
use DateTime;
|
||||
use DateTime::Format::Strptime;
|
||||
use DateTime::Format::Pg;
|
||||
use URI::Encode;
|
||||
use Config::General;
|
||||
|
@ -50,6 +51,13 @@ sub new {
|
|||
|
||||
my $now_dt = strftime "%Y-%m-%d %H:%M:%S", localtime;
|
||||
my $now_date = strftime "%Y-%m-%d", localtime;
|
||||
my $strp = DateTime::Format::Strptime->new(
|
||||
pattern => '%Y-%m-%dT%H:%M:%S',
|
||||
locale => 'de_DE',
|
||||
time_zone => 'Europe/Berlin',
|
||||
on_error => 'croak',
|
||||
);
|
||||
|
||||
my $lang="de";
|
||||
my $owner=188;#via API
|
||||
my $dbh = "";
|
||||
|
@ -60,7 +68,7 @@ sub fetch_merchant {
|
|||
my $q = shift;
|
||||
my $varenv = shift;
|
||||
my $req_coo = shift || "";
|
||||
my $req_merchant_id = shift || "";
|
||||
my $req_merchant_id = shift || "$dbt->{appsframe}->{'sharee.bike'}->{merchant_id}";#defaults to sharee.bike
|
||||
|
||||
my $return = {
|
||||
aowner => "",
|
||||
|
@ -885,7 +893,7 @@ sub service_work {
|
|||
}#end service_work
|
||||
|
||||
|
||||
#bike reservation
|
||||
#bike adhock booking
|
||||
sub booking_request(){
|
||||
my $self = shift;
|
||||
my $q = shift;
|
||||
|
@ -900,9 +908,18 @@ sub booking_request(){
|
|||
my $state = $q->escapeHTML($q->param('state')) || "";
|
||||
my $lock_state = $q->escapeHTML($q->param('lock_state')) || "";
|
||||
|
||||
my $now_dt = DateTime->now( time_zone => "Europe/Berlin" );
|
||||
my $reserv_starttime = $q->escapeHTML($q->param('reserv_starttime')) || $now_dt;
|
||||
my $reserv_endtime = $q->escapeHTML($q->param('reserv_endtime')) || $now_dt;
|
||||
my $calreserv = $q->escapeHTML($q->param('calreserv')) || 0;
|
||||
|
||||
my $request_para = {
|
||||
start_time => $reserv_starttime,
|
||||
end_time => $reserv_endtime,
|
||||
};
|
||||
|
||||
my $dbh = "";
|
||||
my $pos_id="";
|
||||
my $now_dt = strftime "%Y-%m-%d %H:%M", localtime;
|
||||
my $response_state = "OK";
|
||||
my $response_text = "";
|
||||
|
||||
|
@ -1001,21 +1018,61 @@ sub booking_request(){
|
|||
#Rental is only permitted if no invoice with payment_fault or opos
|
||||
$bw->log("Rental is only permitted if no invoice with payment_fault or opos: $sum_balance <= 1 && !$ctt_opos->{c_id}, userID: $auth->{c_id} ",$sum_balance,"");
|
||||
if($sum_balance <= 1 && !$ctt_opos->{c_id}){
|
||||
#2 = "requested"
|
||||
$pos_id = $dbt->insert_pos($dbh,$ctt->{c_id},$ct_bike,$ct_station,$auth,$ct_tariff,$now_dt,$bike,"2",$owner,$sig_book);
|
||||
$bw->log("booking_request insert_pos:",$pos_id,"");
|
||||
my $booking_state = 2;
|
||||
$booking_state = 7 if($calreserv);
|
||||
my $timestamp = DateTime->now( time_zone => "Europe/Berlin" );
|
||||
my $now_time = $strp->parse_datetime($timestamp);
|
||||
|
||||
my $dtstart = $strp->parse_datetime($reserv_starttime);
|
||||
my $dtend = $strp->parse_datetime($reserv_endtime);
|
||||
|
||||
my $start_loc = $dtstart->strftime("%d.%m.%Y %H:%M");
|
||||
my $end_loc = $dtend->strftime("%d.%m.%Y %H:%M");
|
||||
|
||||
if($dtend >= $now_time){
|
||||
my $until_time = $now_time->add( weeks => 4 );
|
||||
#max allowed future rental
|
||||
if($dtend > $until_time){
|
||||
$response_state = "Failure 4261, 4 weeks reserv timerange";
|
||||
$response_text = "Abbruch, Reservierungen sind maximal 4 Wochen im voraus erlaubt";
|
||||
}else{
|
||||
$pos_id = $dbt->insert_pos($dbh,$ctt->{c_id},$ct_bike,$ct_station,$auth,$ct_tariff,$request_para,$bike,$booking_state,$owner,$sig_book);
|
||||
$bw->log("booking_request insert_pos:",$pos_id,"");
|
||||
}
|
||||
}else{
|
||||
$response_state = "Failure 4260, reserv timerange";
|
||||
$response_text = "Abbruch, die Mietzeit liegt in der Vergangenheit";
|
||||
}
|
||||
|
||||
if($pos_id){
|
||||
$response_state = "OK, bike " . $bike . " succesfully requested";
|
||||
$response_text = "Rad $bike wurde erfolgreich für 15 Min. reserviert";
|
||||
$bw->log("booking_request insert contenttranspos pos_id: $pos_id\n","","");
|
||||
|
||||
my $update_ctt = {
|
||||
table => "contenttrans",
|
||||
c_id => $ctt->{c_id},
|
||||
mtime => "now()",
|
||||
owner => $owner,
|
||||
};
|
||||
$dbt->update_one($dbh,$update_ctt,"start_time='$now_dt'");
|
||||
|
||||
# state=7 meens reserved, prevents auto available after 15min
|
||||
if($calreserv){
|
||||
$response_state = "OK, bike " . $bike . " succesfully reserved";
|
||||
$response_text = "Erfolgreiche Buchung: $start_loc - $end_loc.";
|
||||
}
|
||||
#update waren bike state only if adhock booking
|
||||
elsif(!$calreserv){
|
||||
my $update_ct = {
|
||||
table => "content",
|
||||
c_id => $ct_bike->{c_id},
|
||||
mtime => "now()",
|
||||
owner => $owner,
|
||||
};
|
||||
$response_state = "OK, bike " . $bike . " succesfully adhock requested";
|
||||
$response_text = "Rad $bike wurde erfolgreich für 15 Min. adhock reserviert";
|
||||
}
|
||||
|
||||
|
||||
#BVB once auto-coupon until 2023-08-31
|
||||
#disabled
|
||||
if(1==2 && $varenv->{dbname} eq "sharee_bvb"){
|
||||
|
@ -1048,7 +1105,7 @@ sub booking_request(){
|
|||
}
|
||||
}#end BVB auto-coupon
|
||||
|
||||
}else{
|
||||
}elsif($response_state !~ /Failure/){
|
||||
$response_state="Failure 1007: booking request fails";
|
||||
$response_text="Entschuldigung, es ist ein Fehler aufgetreten. Bitte kontaktieren Sie unsere hotline damit wir das Problem lösen können";
|
||||
}
|
||||
|
@ -1089,7 +1146,7 @@ sub booking_request(){
|
|||
}
|
||||
|
||||
#booking_cancel changed to booking_update
|
||||
sub booking_update(){
|
||||
sub booking_update {
|
||||
my $self = shift;
|
||||
my $q = shift;
|
||||
my $varenv = shift;
|
||||
|
@ -1097,13 +1154,15 @@ sub booking_update(){
|
|||
my $owner = shift || 0;
|
||||
my $sig_book = shift || {};
|
||||
my $dbh = "";
|
||||
my $rows = 0;
|
||||
my $user_agent = $q->user_agent();
|
||||
|
||||
my $state = $q->escapeHTML($q->param('state')) || "";
|
||||
my $lock_state = $q->escapeHTML($q->param('lock_state')) || "";
|
||||
my $rows = 0;
|
||||
my $user_agent = $q->user_agent();
|
||||
#my $bike = $q->param('bike');
|
||||
#my $bike_id = $1 if($q->escapeHTML($q->param('bike')) =~ /(\d+)/);
|
||||
my $pos_id = $q->escapeHTML($q->param('pos_id')) || 0;
|
||||
my $reserv_starttime = $q->escapeHTML($q->param('reserv_starttime')) || "";
|
||||
my $reserv_endtime = $q->escapeHTML($q->param('reserv_endtime')) || "";
|
||||
|
||||
my $bike = $q->escapeHTML($q->param('bike')) || "";
|
||||
my $bike_id = $bike;
|
||||
$bike_id =~ s/S[1-9]X/SX/;
|
||||
|
@ -1137,9 +1196,26 @@ sub booking_update(){
|
|||
fetch => "one",
|
||||
barcode => $bike_id,
|
||||
ca_id => $auth->{c_id},
|
||||
int10 => "IN::('3','2')",
|
||||
int10 => "IN::('2','3')",
|
||||
};
|
||||
if($pos_id){
|
||||
$booking_pos->{c_id} = $pos_id;
|
||||
$booking_pos->{int10} = 7;
|
||||
}elsif($reserv_starttime && $reserv_endtime){
|
||||
$booking_pos->{start_time} = $reserv_starttime;
|
||||
$booking_pos->{end_time} = $reserv_endtime;
|
||||
$booking_pos->{int10} = 7;
|
||||
}
|
||||
$record_pos = $dbt->fetch_tablerecord($dbh,$booking_pos) if($bike_id > 0 && $auth->{c_id} > 0);
|
||||
#trying to get reserved in timerange
|
||||
if($state eq "occupied" && !$record_pos->{c_id}){
|
||||
$booking_pos->{int10} = 7;
|
||||
$booking_pos->{start_time} = "<=::now()";
|
||||
$booking_pos->{end_time} = ">=::now()";
|
||||
$record_pos = $dbt->fetch_tablerecord($dbh,$booking_pos) if($bike_id > 0 && $auth->{c_id} > 0);
|
||||
}
|
||||
$booking_values->{pos_id} = $record_pos->{c_id} || "";
|
||||
|
||||
if(!$record_pos->{c_id}){
|
||||
$booking_values->{response_state} = "Failure 758: Can not find bike " . $q->param('bike') . " rental or reservation on varenv-dbname: $varenv->{dbname}";
|
||||
$booking_values->{response_text} = "Keine Miete oder Reservierung zu Rad " . $q->param('bike') . " gefunden.";
|
||||
|
@ -1238,27 +1314,49 @@ sub booking_update(){
|
|||
$update_pos->{txt27} = $q->escapeHTML($q->param('app_debug')) if($q->param('app_debug'));
|
||||
}
|
||||
|
||||
#if($state eq canceled && $record_pos.state eq requested && $record_pos.lock_state eq locked)
|
||||
if($state_key == 6 && $record_pos->{int10} == 2 && $record_pos->{int20} == 1){
|
||||
#if($state eq canceled && $record_pos.lock_state eq locked && $record_pos.state eq requested)
|
||||
if($state_key == 6 && $record_pos->{int20} == 1 && $record_pos->{int10} == 2){
|
||||
$rows = $dbt->delete_content($dbh,"contenttranspos",$record_pos->{c_id});
|
||||
if($rows > 0){
|
||||
|
||||
$update_cc->{int10} = 1 if($record_cc->{int10} == 2);#only if still requested
|
||||
$booking_values->{response_state} = "OK: canceled bike " . $q->param('bike');
|
||||
$booking_values->{response_text} = "Rad " . $q->param('bike') . " wurde erfolgreich storniert";
|
||||
$booking_values->{state} = "available";
|
||||
}else{
|
||||
$booking_values->{response_state} = "Failure 2002: cancel bike " . $q->param('bike') . " fails, bike not requested";
|
||||
$booking_values->{response_text} = "Keine Reservierung zu Rad " . $q->param('bike') . " gefunden.";
|
||||
$booking_values->{response_text} = "Keine adhock Reservierung zu Rad " . $q->param('bike') . " gefunden.";
|
||||
}
|
||||
}else{
|
||||
}
|
||||
#canceled reserved
|
||||
elsif($state_key == 6 && $record_pos->{int20} == 1 && $record_pos->{int10} == 7){
|
||||
|
||||
my $timestamp = DateTime->now( time_zone => "Europe/Berlin" );
|
||||
my $now_time = $strp->parse_datetime($timestamp);
|
||||
my $reserv_starttime = DateTime::Format::Pg->parse_datetime($record_pos->{start_time});
|
||||
|
||||
#TODO define minmax hours before cancel reservation
|
||||
if($now_time < $reserv_starttime){
|
||||
$rows = $dbt->delete_content($dbh,"contenttranspos",$record_pos->{c_id});
|
||||
if($rows > 0){
|
||||
$booking_values->{response_state} = "OK: canceled reserved bike " . $q->param('bike');
|
||||
$booking_values->{response_text} = "Gebuchtes Rad " . $q->param('bike') . " wurde erfolgreich storniert";
|
||||
$booking_values->{state} = "available";
|
||||
}else{
|
||||
$booking_values->{response_state} = "Failure 2082: cancel reserved bike " . $q->param('bike') . " fails, bike not reserved";
|
||||
$booking_values->{response_text} = "Keine Buchung zu Rad " . $q->param('bike') . " gefunden.";
|
||||
}
|
||||
}else{
|
||||
$booking_values->{response_state} = "Failure 2092: cancel reserved bike " . $q->param('bike') . " fails, too late";
|
||||
$booking_values->{response_text} = "Reservierung " . $q->param('bike') . " kann max. 1 Stunde vor Buchungsstart storniert werden.";
|
||||
}
|
||||
}
|
||||
else{
|
||||
#prevent reset occupied values OR only if genkey defined
|
||||
#if(($state eq "occupied" && $record_pos->{txt10} =~ /requested/) || ($state eq "occupied" && $record_pos->{txt10} =~ /occupied/ && $q->param('genkey') eq "1"))
|
||||
if(($state_key == 3 && $record_pos->{int10} == 2) || ($state_key == 3 && $record_pos->{int10} == 3 && $q->param('genkey') eq "1")){
|
||||
if(($state_key == 3 && ($record_pos->{int10} == 2 || $record_pos->{int10} == 7)) || ($state_key == 3 && $record_pos->{int10} == 3 && $q->param('genkey') eq "1")){
|
||||
|
||||
$update_pos->{start_time} = "now()";
|
||||
$update_pos->{end_time} = "now()";
|
||||
#$update_pos->{end_time} = "now()";#don't set anymore because of revserv time
|
||||
$update_pos->{txt05} = "$record_cc->{txt06}";#pos start GPS from content end GPS
|
||||
$update_pos->{int06} = "$record_cc->{int04}";#pos start station from content station
|
||||
$update_pos->{txt12} = "$dbt->{operator}->{$varenv->{dbname}}->{oprefix}";#pos start station prefix
|
||||
|
@ -1292,12 +1390,16 @@ sub booking_update(){
|
|||
|
||||
|
||||
#client GPS must have. sigo ist done without client gps
|
||||
if(($gps_data->{gps} && $gps_data->{gps_age_minutes} <= 3) || ($record_pos->{int11} == 3)){
|
||||
#if(($gps_data->{gps} && $gps_data->{gps_age_minutes} <= 3) || ($record_pos->{int11} == 3)){
|
||||
#2024-03-15 app secures gps_age, we don't need it
|
||||
if($gps_data->{gps} || $record_pos->{int11} == 3){
|
||||
#geofencing for Ilockit
|
||||
my $geo_distance_next = 100000;
|
||||
my $station_next = 0;
|
||||
my $geo_debug="";
|
||||
my $rows_end = 0;
|
||||
|
||||
#TODO stations_available on A-A out-of-geofence have to be checked
|
||||
my ($stations,$stations_raw) = $self->stations_available($q,$varenv,$auth,$record_pos,"");
|
||||
|
||||
foreach my $id (sort { $stations_raw->{$a}->{barcode} <=> $stations_raw->{$b}->{barcode} } keys (%$stations_raw)){
|
||||
|
@ -1415,8 +1517,8 @@ sub booking_update(){
|
|||
$booking_values->{response_state} = "Failure 2012: occupied bike " . $q->param('bike') . " cannot be state $state and $lock_state";
|
||||
$booking_values->{response_text} = "Rad " . $q->param('bike') . " ist in Benutzung und kann somit nicht storniert werden.";
|
||||
}elsif($state_key == 3 && $record_pos->{int10} == 1){
|
||||
$booking_values->{response_state} = "Failure 2016: available bike " . $q->param('bike') . " have to be at first reserved, thats because cannot be $state";
|
||||
$booking_values->{response_text} = "Rad " . $q->param('bike') . " wurde nicht reserviert und kann somit nicht gemietet werden.";
|
||||
$booking_values->{response_state} = "Failure 2016: available bike " . $q->param('bike') . " have to be at first requested, thats because cannot be $state";
|
||||
$booking_values->{response_text} = "Rad " . $q->param('bike') . " wurde nicht requested und kann somit nicht gemietet werden.";
|
||||
|
||||
}else{
|
||||
$booking_values->{response_state} = "Failure 2035: bike " . $q->param('bike') . " state change to state $state and $lock_state not possible.";
|
||||
|
@ -1600,15 +1702,15 @@ sub smartlock {
|
|||
$lock_value = 1;
|
||||
$update_cc->{int20} = "$lock_value";
|
||||
$update_pos->{int20} = "$lock_value";
|
||||
$update_pos->{end_time} = "now()";
|
||||
#$update_pos->{#end_time} = "now()";
|
||||
|
||||
$update_cc->{txt06} = $gps_data->{gps};#end content coordinates
|
||||
$update_pos->{txt06} = $gps_data->{gps};#end pos coordinates
|
||||
$update_pos->{int21} = $gps_data->{gps_age_minutes};
|
||||
$update_pos->{int22} = $gps_data->{gps_accuracy};
|
||||
$update_pos->{int23} = "null";# only computed on rental-end
|
||||
$booking_values->{response_state} = "OK: bike " . $q->param('bike') . " locked confirmed. ";
|
||||
$booking_values->{response_text} = "Schloss schließen von Rad " . $q->param('bike') . " bestätigt. ";
|
||||
$booking_values->{response_state} = " OK: bike " . $q->param('bike') . " locked confirmed. ";
|
||||
$booking_values->{response_text} .= " Schloss schließen von Rad " . $q->param('bike') . " bestätigt. ";
|
||||
|
||||
}elsif($q->param('lock_state') eq "unlocked"){
|
||||
$lock_value = 2;
|
||||
|
@ -1810,9 +1912,43 @@ sub rental_to_feedback{
|
|||
}#end rental_to_feedback
|
||||
|
||||
|
||||
#blocked bikes, reserved from now until +4 weeks
|
||||
sub bikes_reserved {
|
||||
my $self = shift;
|
||||
my $q = shift;
|
||||
my $dbh = shift;
|
||||
|
||||
my $timestamp = DateTime->now( time_zone => "Europe/Berlin" );
|
||||
my $start_time = $timestamp->strftime("%Y-%m-%d %H:%M");
|
||||
my $now_time = $strp->parse_datetime($timestamp);
|
||||
my $until_time = $now_time->add( weeks => 4 );
|
||||
my $end_time = $until_time->strftime("%Y-%m-%d %H:%M");
|
||||
|
||||
if($q->param('request') eq "booking_request" && $q->param('reserv_starttime') && $q->param('reserv_endtime')){
|
||||
$start_time = $q->escapeHTML($q->param('reserv_starttime'));
|
||||
$end_time = $q->escapeHTML($q->param('reserv_endtime'));
|
||||
}
|
||||
|
||||
my $pref = {
|
||||
table_pos => "contenttranspos",
|
||||
fetch => "all",
|
||||
keyfield => "c_id",
|
||||
int10 => "IN::('2','3','7')",
|
||||
template_id => 205,
|
||||
start_date_time => $start_time,
|
||||
end_date_time => $end_time,
|
||||
};
|
||||
|
||||
my $record = {};
|
||||
$record = $dbt->collect_transpos($dbh,$pref);
|
||||
|
||||
return $record;
|
||||
}
|
||||
|
||||
#user bikes occupied
|
||||
sub user_bikes_occupied {
|
||||
my $self = shift;
|
||||
my $q = shift;
|
||||
my $dbh = shift;
|
||||
my $auth = shift;
|
||||
my $show_dialog = shift || "";
|
||||
|
@ -1825,9 +1961,20 @@ sub user_bikes_occupied {
|
|||
template_id => "218",#Faktura tpl_id
|
||||
keyfield => "c_id",
|
||||
ca_id => "$auth->{c_id}",
|
||||
int10 => "IN::('3','2')",
|
||||
int10 => "IN::('2','3')",
|
||||
"ct.close_time" => "is::null",
|
||||
};
|
||||
|
||||
if($q->param('calreserv')){
|
||||
$pref->{int10} = "IN::('2','3','7')";
|
||||
$pref->{end_time} = ">=::now()";
|
||||
}
|
||||
|
||||
if($q->param('request') eq "booking_request"){
|
||||
$pref->{int10} = "IN::('2','3','7')";
|
||||
$pref->{start_time} = ">=::now()";
|
||||
}
|
||||
|
||||
$pref->{int06} = $station if($station);#pos start-station
|
||||
|
||||
my $record = {};
|
||||
|
@ -1887,7 +2034,7 @@ sub rentals(){
|
|||
|
||||
|
||||
#bikes_available
|
||||
sub bikes_available(){
|
||||
sub bikes_available {
|
||||
my $self = shift;
|
||||
my $q = shift;
|
||||
my $varenv_prim = shift;
|
||||
|
@ -1899,6 +2046,9 @@ sub bikes_available(){
|
|||
my $station = $q->escapeHTML($q->param('station')) || "";
|
||||
my $station_id = "";
|
||||
$station_id = $1 if($station =~ /(\d+)$/);
|
||||
my $station_gps = "";
|
||||
$station_gps = $q->escapeHTML($q->param('Lat')) || "";
|
||||
$station_gps .= ", " . $q->escapeHTML($q->param('Lng')) || "";#TOD check space after ,
|
||||
|
||||
#to get A-A key for text
|
||||
my $pref_st = {
|
||||
|
@ -1910,6 +2060,7 @@ sub bikes_available(){
|
|||
};
|
||||
my $record_st = {};
|
||||
$pref_st->{int04} = "$station_id" if($station_id);
|
||||
$pref_st->{txt06} = "$station_gps" if($station_gps);
|
||||
$record_st = $dbt->fetch_record($dbh,$pref_st);
|
||||
|
||||
my $bike = $q->escapeHTML($q->param('bike')) || "";
|
||||
|
@ -1926,6 +2077,8 @@ sub bikes_available(){
|
|||
template_id => "205",
|
||||
int10 => "1",#1 = "available"
|
||||
};
|
||||
$pref->{int10} = "IN::('1','2','3')" if($q->param('calreserv'));#take all on calreserv
|
||||
|
||||
my $tariff_content = {};
|
||||
my $adrtarif_hash = {};
|
||||
$authed = 1 if(ref($auth) eq "HASH" && $auth->{c_id} > 0);
|
||||
|
@ -1948,8 +2101,7 @@ sub bikes_available(){
|
|||
my $record = {};
|
||||
$record = $dbt->fetch_record($dbh,$pref) if(ref($bike_node) eq "ARRAY" && @{$bike_node}[0]);
|
||||
my $op_return = {};
|
||||
|
||||
my $td_template = $dbt->rental_description_template($varenv_prim);
|
||||
my $td_template = $dbt->rental_description_template($varenv_prim);
|
||||
|
||||
#return list of occupied/requested bikes
|
||||
my $adjust_freedtime = 0;
|
||||
|
@ -1959,7 +2111,17 @@ sub bikes_available(){
|
|||
$further_freedtime_available = $pri->count_freedrental("rentals by bikes_available",$varenv,$auth->{c_id},$cttpos->{$id},$adjust_freedtime);
|
||||
}
|
||||
|
||||
my $bikes_blocked = {};
|
||||
$bikes_blocked = $self->bikes_reserved($q,$dbh) if($R::calreserv);
|
||||
|
||||
foreach my $id (sort { $record->{$a}->{barcode} <=> $record->{$b}->{barcode} } keys (%$record)){
|
||||
#return all reserved bikes
|
||||
foreach my $rid (sort { $bikes_blocked->{$a}->{barcode} <=> $bikes_blocked->{$b}->{barcode} } keys (%$bikes_blocked)){
|
||||
if($record->{$id}->{barcode} == $bikes_blocked->{$rid}->{barcode}){
|
||||
$return->{$id}->{blocked}->{$rid}->{start_time} = $bikes_blocked->{$rid}->{start_time};
|
||||
$return->{$id}->{blocked}->{$rid}->{end_time} = $bikes_blocked->{$rid}->{end_time};
|
||||
}
|
||||
}
|
||||
$return->{$id}->{authed} = "$authed";
|
||||
$return->{$id}->{station} = "$dbt->{operator}->{$varenv->{dbname}}->{oprefix}$record->{$id}->{int04}";
|
||||
$return->{$id}->{aa_ride} = "0";
|
||||
|
@ -2113,10 +2275,7 @@ sub bikes_all(){
|
|||
if(looks_like_number($bike_id)){
|
||||
$pref->{ barcode} = "=::$bike_id";
|
||||
#2022-12-02 not select occupied bikes in servicetool by direct select-bike
|
||||
$pref->{int10} = "!=::3";
|
||||
#}else{
|
||||
#2023-05-23 not select requested and occupied bikes in servicetool by list-bikes?
|
||||
#$pref->{int10} = "IN::(1,4,5,6)";
|
||||
#$pref->{int10} = "!=::3";#restriction disabled
|
||||
}
|
||||
|
||||
my $record = {};
|
||||
|
@ -2201,10 +2360,11 @@ sub bikes_all(){
|
|||
#if($q->param('authcookie') && $dbt->{merchant_ids}->{$varenv->{merchant_id}}->{id} && $dbt->{merchant_ids}->{$varenv->{merchant_id}}->{id} == 187 && scalar(@{$user_tour} >= 1)){
|
||||
if($q->param('authcookie') && $varenv->{merchant_id} && $varenv->{merchant_id} eq $dbt->{appsframe}->{shareetool}->{merchant_id} && scalar(@{$user_tour} >= 1)){
|
||||
#2023-01-18 temporarly for Konstanz deactivated
|
||||
if(${$user_tour}[0] !~ /KN\d/){
|
||||
#2024-04-08 activated
|
||||
#if(${$user_tour}[0] !~ /KN\d/){
|
||||
my @service_code = split(/\s/,$record->{$id}->{txt23});
|
||||
$return->{$id}->{service_code} = [@service_code];
|
||||
}
|
||||
#}
|
||||
}
|
||||
}elsif($record->{$id}->{int11} eq "3"){
|
||||
$return->{$id}->{system} = "sigo";
|
||||
|
@ -2368,12 +2528,14 @@ sub stations_available(){
|
|||
if($record->{$id}->{int04} == $record_bikes->{$b_id}->{int04}){
|
||||
push @bike_ids,$dbt->{operator}->{$varenv->{dbname}}->{oprefix} . $record_bikes->{$b_id}->{barcode};
|
||||
$bike_count++;
|
||||
$fleed = {
|
||||
if($record_bikes->{$b_id}->{fleed_phone} && $record_bikes->{$b_id}->{fleed_email}){
|
||||
$fleed = {
|
||||
name => "$record_bikes->{$b_id}->{fleed_name}",
|
||||
hours => "$record_bikes->{$b_id}->{fleed_hours}",
|
||||
phone => "$record_bikes->{$b_id}->{fleed_phone}",
|
||||
email => "$record_bikes->{$b_id}->{fleed_email}",
|
||||
};
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2436,6 +2598,8 @@ sub stations_available(){
|
|||
operator_email => $hotline_data->{txt08},
|
||||
};
|
||||
}
|
||||
#$return->{$id}->{operator_data}->{operator_name} = Encode::encode('utf-8', Encode::decode('iso-8859-1',$return->{$id}->{operator_data}->{operator_name})) if($return->{$id}->{operator_data}->{operator_name});
|
||||
#$return->{$id}->{operator_data}->{operator_hours} = Encode::encode('utf-8', Encode::decode('iso-8859-1',$return->{$id}->{operator_data}->{operator_hours})) if($return->{$id}->{operator_data}->{operator_hours});
|
||||
|
||||
#not desired 2024-02-15
|
||||
if(1==2){
|
||||
|
@ -3183,7 +3347,7 @@ sub auth_verify(){
|
|||
my $last_used_operator = $record->{txt19};#check if this is primary and/or useable
|
||||
#$bw->log("last_used_operator selected by txt19:",$last_used_operator,"");
|
||||
if($last_used_operator){
|
||||
my $dbh_operator = $dbt->dbconnect_extern("$last_used_operator","iso-8859-1");
|
||||
my $dbh_operator = $dbt->dbconnect_extern("$last_used_operator","");
|
||||
my $hotline_hash = {
|
||||
table => "contentuser",
|
||||
fetch => "one",
|
||||
|
@ -3198,8 +3362,10 @@ sub auth_verify(){
|
|||
"operator_phone" => "",
|
||||
"operator_email" => "",
|
||||
};
|
||||
$return->{last_used_operator}->{operator_name} = Encode::encode('utf-8', Encode::decode('iso-8859-1',$hotline_data->{txt01})) if($hotline_data->{txt01});
|
||||
$return->{last_used_operator}->{operator_hours} = Encode::encode('utf-8', Encode::decode('iso-8859-1',$hotline_data->{txt84})) if($hotline_data->{txt84});
|
||||
#$return->{last_used_operator}->{operator_name} = Encode::encode('utf-8', Encode::decode('iso-8859-1',$hotline_data->{txt01})) if($hotline_data->{txt01});
|
||||
#$return->{last_used_operator}->{operator_hours} = Encode::encode('utf-8', Encode::decode('iso-8859-1',$hotline_data->{txt84})) if($hotline_data->{txt84});
|
||||
$return->{last_used_operator}->{operator_name} = $hotline_data->{txt01} if($hotline_data->{txt01});
|
||||
$return->{last_used_operator}->{operator_hours} = $hotline_data->{txt84} if($hotline_data->{txt84});
|
||||
$return->{last_used_operator}->{operator_phone} = $hotline_data->{txt07} if($hotline_data->{txt07});
|
||||
$return->{last_used_operator}->{operator_email} = $hotline_data->{txt08} if($hotline_data->{txt08});
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue