From b2e5d72c517caeb9d793b3e433650ebe0d9aeaed Mon Sep 17 00:00:00 2001 From: ragu Date: Wed, 20 Apr 2022 12:07:48 +0200 Subject: [PATCH] Tarif refactoring+ --- copri4/main/src/Mod/APIfunc.pm | 24 ++- copri4/main/src/Mod/DBtank.pm | 28 +-- copri4/main/src/Mod/Prelogic.pm | 5 +- copri4/main/src/Mod/Premain.pm | 6 +- copri4/main/src/Mod/Pricing.pm | 197 +++++++++++------- copri4/main/src/Mod/RelationEdit.pm | 18 +- copri4/main/src/Tpl/BaseEdit.pm | 11 +- copri4/main/src/Tpl/Liste3.pm | 19 +- copri4/main/src/Tpl/TransPositionen.pm | 4 +- copri4/main/src/scripts/Ilockit_cloud.pl | 7 +- .../main/src/scripts/Ilockit_trackingcloud.pl | 16 +- copri4/main/src/scripts/sigo_client.pl | 2 +- copri4/main/src/scripts/tests/index.pl | 1 + copri4/shareeapp-operator/src/Lib/Mlogic.pm | 9 +- copri4/shareeweb-project/src/Lib/Mlogic.pm | 4 +- 15 files changed, 216 insertions(+), 135 deletions(-) diff --git a/copri4/main/src/Mod/APIfunc.pm b/copri4/main/src/Mod/APIfunc.pm index 936881b..eb73a7e 100755 --- a/copri4/main/src/Mod/APIfunc.pm +++ b/copri4/main/src/Mod/APIfunc.pm @@ -1163,6 +1163,7 @@ sub booking_update(){ if($record_pos->{int24}){ $update_pos->{owner_end} = "$owner"; $update_pos->{end_time} = "now()"; + #return after booking_update my $pricing = $pri->sharee_pricing($record_pos,"calc_price"); $update_pos->{int03} = "$pricing->{computed_hours}" if(looks_like_number($pricing->{computed_hours})); @@ -1213,6 +1214,7 @@ sub booking_update(){ $update_pos->{txt13} = "$dbt->{operator}->{$varenv{dbname}}->{oprefix}"; #end-Station prefix $update_cc->{txt13} = "$dbt->{operator}->{$varenv{dbname}}->{oprefix}"; + #return after booking_update my $pricing = $pri->sharee_pricing($record_pos,"calc_price"); $update_pos->{int03} = "$pricing->{computed_hours}" if(looks_like_number($pricing->{computed_hours})); $rows = $dbt->update_record($dbh,$update_pos,$record_pos); @@ -1240,6 +1242,7 @@ sub booking_update(){ $update_pos->{txt13} = "$dbt->{operator}->{$varenv{dbname}}->{oprefix}"; #end-Station prefix $update_cc->{txt13} = "$dbt->{operator}->{$varenv{dbname}}->{oprefix}"; + #return after booking_update my $pricing = $pri->sharee_pricing($record_pos,"calc_price"); $update_pos->{int03} = "$pricing->{computed_hours}" if(looks_like_number($pricing->{computed_hours})); $rows = $dbt->update_record($dbh,$update_pos,$record_pos); @@ -1478,12 +1481,22 @@ sub booking_update(){ #fetch tracking distance on Ilockit cloud by summary trip if(tracking && deviceId && available) if($booking->{int25} == 1 && $booking->{int10} == 1){ - $bw->log("$varenv{basedir}/src/scripts/Ilockit_trackingcloud.pl $varenv{syshost} get_tripsum $booking->{c_id}",$booking->{c_id},""); - system(`$varenv{basedir}/src/scripts/Ilockit_trackingcloud.pl $varenv{syshost} get_tripsum $booking->{c_id}`) if($booking->{int13});#if ilockit clouid sleep 2;#hopefully get distance in 2 sec. - $booking = $dbt->fetch_tablerecord($dbh,$booking_pos); + $bw->log("$varenv{basedir}/src/scripts/Ilockit_trackingcloud.pl $varenv{syshost} get_tripsum $booking->{c_id}",$booking->{c_id},""); + #if ilockit clouid + if($booking->{int13}){ + system("$varenv{basedir}/src/scripts/Ilockit_trackingcloud.pl $varenv{syshost} get_tripsum $booking->{c_id}"); + $booking = $dbt->fetch_tablerecord($dbh,$booking_pos); + #try it again with 20sec sleep + if(!$booking->{int26}){ + $bw->log("$varenv{basedir}/src/scripts/Ilockit_trackingcloud.pl $varenv{syshost} get_tripsum $booking->{c_id} 20",$booking->{c_id},""); + system("$varenv{basedir}/src/scripts/Ilockit_trackingcloud.pl $varenv{syshost} get_tripsum $booking->{c_id} 20 &"); + $booking = $dbt->fetch_tablerecord($dbh,$booking_pos); + } + } + my $co2saving = ""; - $booking->{int26} = 10 if(!$booking->{int26} && ($auth->{c_id} == 1842 || $auth->{c_id} == 5781 || $auth->{c_id} == 11765 || $auth->{c_id} == 1843));#10 km test + #$booking->{int26} = 10 if(!$booking->{int26} && ($auth->{c_id} == 1842 || $auth->{c_id} == 5781 || $auth->{c_id} == 11765 || $auth->{c_id} == 1843));#10 km test if($booking->{int26}){ $co2saving = "Einsparung: "; my $co2diff = $pri->co2calc($booking); @@ -1491,7 +1504,7 @@ sub booking_update(){ $co2saving .= "$co2diff kg CO2 und "; $co2saving .= "$sprit_price EUR "; $booking->{int26} =~ s/\./,/; - $co2saving .= "bei einer Strecke von $booking->{int26} KM (Demo)"; + $co2saving .= "bei einer Strecke von $booking->{int26} KM"; $booking_values->{co2saving} = $co2saving; } } @@ -1624,6 +1637,7 @@ sub user_bikes_occupied(){ #rentals +#called by user_bikes_occupied (bikes_occupied object) sub rentals(){ my $self = shift; my $record = shift; diff --git a/copri4/main/src/Mod/DBtank.pm b/copri4/main/src/Mod/DBtank.pm index 4c9e740..b50600f 100755 --- a/copri4/main/src/Mod/DBtank.pm +++ b/copri4/main/src/Mod/DBtank.pm @@ -869,9 +869,9 @@ sub update_record(){ $set .= " $key='$value',"; } } - if($key =~ /^(barcode|contentadr_id|int\d+|owner|owner_end|start_at\d+|end_at\d+)$/){ + if($key =~ /^(barcode|contentadr_id|int\d+|time\d+|owner|owner_end|start_at\d+|end_at\d+)$/){ $value =~ s/,/\./ if($value); - if($key =~ /int\d+|start_at\d+|end_at\d+/ && $value && $value =~ /\d+:\d+/){#azn time format + if($key =~ /int\d+|time\d+|start_at\d+|end_at\d+/ && $value && $value =~ /\d+:\d+/){#azn time format $set .= " $key='$value',"; }elsif(looks_like_number($value) || ($value && $value eq "null")){ $set .= " $key=$value,"; @@ -1269,31 +1269,35 @@ sub insert_pos(){ my $from_main_id = $ct->{main_id} || 0; my $station = $ct->{int04} || 0; my $rabatt = 0; - my $unit_price = $ct->{int02} || 0; - my $day_maxprice = 0; - my $abo_price = 0; + my $unit_price1 = 0; + my $unit_price2 = 0; + my $daymax_price = 0; + my $startup_price = 0; my $tariff_nr = 0; my $tariff_desc; - my $free_hours = 0; + my $unit_time = "00:00"; + my $fee_time = "00:00"; my $sharing_type = 0; my $menge = 0; if(ref($ct_tariff) eq "HASH" && $ct_tariff->{barcode}){ $rabatt = $ctadr->{int07} || 0; - $unit_price = $ct_tariff->{int02} || 0; + $unit_price1 = $ct_tariff->{int02} || 0; + $unit_price2 = $ct_tariff->{int15} || 0; $tariff_nr = $ct_tariff->{barcode} || 0; $tariff_desc = $ct_tariff->{ct_name}; - $day_maxprice = $ct_tariff->{int17} || 0; - $abo_price = $ct_tariff->{int15} || 0; - $free_hours = $ct_tariff->{int16} || 0; + $daymax_price = $ct_tariff->{int17} || 0; + $startup_price = $ct_tariff->{int16} || 0; + $unit_time = $ct_tariff->{time01} || "00:00"; + $fee_time = $ct_tariff->{time02} || "00:00"; $sharing_type = $ct_tariff->{int18} || 0; } my $sth; #Verleihräder if($ct->{template_id} && $ct->{template_id} == 205){#Leihrad_list - $sth = $dbh->prepare("INSERT INTO contenttranspos (ct_id,cc_id,ca_id,ct_name,barcode,txt01,txt08,txt02,txt09,itime,start_time,end_time,int02,int03,int06,int04,txt05,txt06,txt07,int10,int12,int13,owner,int07,txt04,int09,int17,int15,int16,int11,int18,int19,txt17,txt18,int20,int25,int34,txt22,txt10) VALUES ('$ctt_id','$ct->{c_id}','$ctadr->{c_id}','$ct_name','$ct->{barcode}','$ct->{txt01}','$user_name','$ct->{txt02}','$ctadr->{txt09}',now(),now(),'$endRental','$unit_price','$menge','$station','$station','$ct->{txt06}','$ct->{txt06}','$ct->{txt07}','$status','$from_main_id','$deviceId','$owner','$rabatt','$tariff_desc','$tariff_nr','$day_maxprice','$abo_price','$free_hours','$ct->{int11}','$sharing_type','$bike_charge','$ct->{txt17}','$ct->{txt18}','$ct->{int20}','$trackon','$staff','$ct->{txt22}','$reserveid') RETURNING c_id"); + $sth = $dbh->prepare("INSERT INTO contenttranspos (ct_id,cc_id,ca_id,ct_name,barcode,txt01,txt08,txt02,txt09,itime,start_time,end_time,int02,int03,int06,int04,txt05,txt06,txt07,int10,int12,int13,owner,int07,txt04,int09,int15,int16,int17,int11,int18,int19,txt17,txt18,int20,int25,int34,txt22,txt10,time01,time02) VALUES ('$ctt_id','$ct->{c_id}','$ctadr->{c_id}','$ct_name','$ct->{barcode}','$ct->{txt01}','$user_name','$ct->{txt02}','$ctadr->{txt09}',now(),now(),'$endRental','$unit_price1','$menge','$station','$station','$ct->{txt06}','$ct->{txt06}','$ct->{txt07}','$status','$from_main_id','$deviceId','$owner','$rabatt','$tariff_desc','$tariff_nr','$unit_price2','$startup_price','$daymax_price','$ct->{int11}','$sharing_type','$bike_charge','$ct->{txt17}','$ct->{txt18}','$ct->{int20}','$trackon','$staff','$ct->{txt22}','$reserveid','$unit_time','$fee_time') RETURNING c_id"); }else{ - $sth = $dbh->prepare("INSERT INTO contenttranspos (ct_id,cc_id,ca_id,ct_name,barcode,txt08,txt09,itime,int02,int03,txt01,txt06,txt07,int10,int12,owner) VALUES ('$ctt_id','$ct->{c_id}','$ctadr->{c_id}','$ct_name','0','$user_name','$ctadr->{txt09}',now(),'$unit_price','1','$ct->{txt01}','$ct->{txt06}','$ct->{txt07}','0','$from_main_id','$owner') RETURNING c_id"); + $sth = $dbh->prepare("INSERT INTO contenttranspos (ct_id,cc_id,ca_id,ct_name,barcode,txt08,txt09,itime,int02,int03,txt01,txt06,txt07,int10,int12,owner) VALUES ('$ctt_id','$ct->{c_id}','$ctadr->{c_id}','$ct_name','0','$user_name','$ctadr->{txt09}',now(),'$unit_price1','1','$ct->{txt01}','$ct->{txt06}','$ct->{txt07}','0','$from_main_id','$owner') RETURNING c_id"); } my $rows = $sth->execute(); my $last_id; diff --git a/copri4/main/src/Mod/Prelogic.pm b/copri4/main/src/Mod/Prelogic.pm index 59f6998..77a1b78 100755 --- a/copri4/main/src/Mod/Prelogic.pm +++ b/copri4/main/src/Mod/Prelogic.pm @@ -376,7 +376,6 @@ sub preinit(){ #2021-08-04 set also bike available $db->updater("content","c_id",$R::cc_id,"int10","1",$users_dms->{u_id}) if($R::cc_id); } - #TINK $menge counting #we believe setting by manually insert of int03=$menge via Transposition #$db->updater($table,"c_id",$pos_id,"int03","$menge",$users_dms->{u_id}); #set GPS @@ -386,8 +385,8 @@ sub preinit(){ #set StationID if($R::int04 =~ /^\d+$/){ $db->updater($table,"c_id",$pos_id,"int04","$R::int04",$users_dms->{u_id}); - #require "Mod/KMLout.pm"; - #my $kmlfile = Mod::KMLout::kmlGenerator("",""); + #disbaled because we don't know for sure + #$db->updater("content","c_id",$R::cc_id,"int04","$R::int04",$users_dms->{u_id}) if($R::cc_id); } $db->updater("contenttrans","c_id",$ctt->{c_id},"start_time","$start_datetime",$users_dms->{u_id}); diff --git a/copri4/main/src/Mod/Premain.pm b/copri4/main/src/Mod/Premain.pm index b5b4075..48c55bb 100755 --- a/copri4/main/src/Mod/Premain.pm +++ b/copri4/main/src/Mod/Premain.pm @@ -492,7 +492,7 @@ print ATTR "next: $next\n" if($debug); $valxx = "null" if(!looks_like_number($valxx));#empty } - if($_ =~ /^txt[\d+]|^int[\d+]|uri[\d+]|byte[\d+]/){ + if($_ =~ /^txt\d+|^int\d+|^time\d+|byte\d+/){ if(1==1){ #on IBAN/BIC change set override Mandantsreferenz to c_id to trigger payone if($table eq "contentadr" && (($_ eq "txt22" && $valxx ne "null" && $valxx ne $ct_exist1->{txt22}) || ($_ eq "txt23" && $valxx ne "null" && $valxx ne $ct_exist1->{txt23}))){ @@ -558,6 +558,10 @@ print ATTR "next: $next\n" if($debug); elsif($table eq "content" && $_ =~ /byte/){ $u_rows += $db->updater("$table","c_id",$c_id,$_,"\\x$valxx",$users_dms->{u_id}); } + elsif($_ =~ /time\d+/){ + return "failure::Formatfehler, Eingabe der Zeiteinheit bitte in Stunden:Minuten (hh:mm)." if($valxx !~ /\d{1,2}:\d{2}/); + $u_rows += $db->updater("$table","c_id",$c_id,$_,"$valxx",$users_dms->{u_id}); + } else{ $u_rows += $db->updater("$table","c_id",$c_id,$_,$valxx,$users_dms->{u_id}); } diff --git a/copri4/main/src/Mod/Pricing.pm b/copri4/main/src/Mod/Pricing.pm index 371c045..d9e688c 100755 --- a/copri4/main/src/Mod/Pricing.pm +++ b/copri4/main/src/Mod/Pricing.pm @@ -61,6 +61,33 @@ sub only_first_free(){ } +#converts clock-time to minutes +sub clock_minutes { + my $self = shift; + my $clockfloat = shift;# like 12:35 + my $day = 0; + my $hour = 0; + my $min = 0; + + if($clockfloat =~ /(\d+)\sday\s(\d+):(\d+)/){ + $day = $1; + $hour = $2; + $min = $3; + }elsif($clockfloat =~ /(\d+):(\d+)/){ + $hour = $1; + $min = $2; + } + + my $hours = 0; + $hours = $hour if($hour && $hour > 0); + $hours += 24 * $day if($day && $day > 0); + + my $minutes = $min; + $minutes = ($hours * 60) + $min if($hours && $hours > 0); + + return $minutes; +} + #new counting rental time in hours method (last sharee_pricing) sub counting_rental { my $self = shift; @@ -68,10 +95,7 @@ sub counting_rental { my $ctpos = shift; my $todo = shift; my $today4db = strftime("%Y-%m-%d %H:%M:%S",localtime(time)); - my $return = {}; - my $logging = {}; - $logging->{ID} = "c_id:$ctpos->{c_id}/ct_id:$ctpos->{ct_id}/ca_id:$ctpos->{ca_id}"; my $computed_end_time = $ctpos->{end_time} || $today4db; $computed_end_time = $today4db if($ctpos->{int10} && $ctpos->{int10} == 3); @@ -79,91 +103,116 @@ sub counting_rental { my $dt0 = DateTime::Format::Pg->parse_datetime($ctpos->{start_time}); my $dt1 = DateTime::Format::Pg->parse_datetime($computed_end_time); - my $dur01 = $dt0->subtract_datetime($dt1); - my ($durhh,$durmm) = $dur01->in_units( 'hours','minutes' ); - $durhh = sprintf('%.2d',$durhh); - $durmm = sprintf('%.2d',$durmm); + my $dur10 = $dt1->subtract_datetime($dt0); + my ($durdd,$durhh,$durmm) = $dur10->in_units( 'days', 'hours','minutes' ); + $durhh = sprintf('%.2d',$durhh); + $durmm = sprintf('%.2d',$durmm); + my $real_clock = "$durhh:$durmm"; + $real_clock = "$durdd day $durhh:$durmm" if($durdd); + my $computed_clock = $real_clock; + my $rental_minute = $self->clock_minutes($computed_clock); - - #calculates rental time range in hours - my ($start_datetime,$end_datetime,$hours) = $cal->contenttranspos_dating($ctpos->{c_id},$ctpos->{start_time},"$computed_end_time","$today4db"); - $logging->{hours_input} = $hours; - $logging->{tariff} = "$ctpos->{txt04} - $ctpos->{int09}"; - - my $price = 2; #FIXME to real val. must be not 0 - $price = sprintf('%.2f',$ctpos->{int02}) if($ctpos->{int02} && $ctpos->{int02} > 0); - my $total = 0; - - my $days_pricemax = $ctpos->{int17} || 9; - $logging->{days_pricemax} = $days_pricemax; - #example my $days_pricemax = 5; #konrad max 15,- € bike/day depends on 3,- €/hour + #init with some defaults + my $total_price = 0; + my $ctpos_freed = { c_id => 0 }; - #calculate if rental hours greater than hours for max daily_price - my $days_hour4price = $days_pricemax / $price; - $logging->{days_hour4price} = $days_hour4price; - my $real_hours = $hours; + #Tariff unit by time + my $tariff_unitbyminute = 60;#defaults to Stundentarif + if($ctpos->{time01} && $ctpos->{time01} =~ /[1-9]/){ + $tariff_unitbyminute = $self->clock_minutes($ctpos->{time01}); + } - if($ctpos->{int16} && $ctpos->{int16} > 0){#z.b. 30 Min/Gratis --> 0.5 - my $ctpos_freed = $self->only_first_free($ctpos); - #Bsp 1h = 60min , 60*0,02 = 1,2min - if(!$ctpos_freed->{c_id} || $real_hours <= 0.02){ - $hours -= $ctpos->{int16}; - $logging->{hours_freed} = $hours; - }else{ - $logging->{hours_freed} = "Not freed because of (!$ctpos_freed->{c_id} && $ctpos->{int16} || $real_hours <= 0.02)"; + #fee if ex. 00:30 Min/Gratis + if($ctpos->{time02} && $ctpos->{time02} =~ /[1-9]/){ + $ctpos_freed = $self->only_first_free($ctpos); + if(!$ctpos_freed->{c_id}){ + my ($dhh,$dmm) = split(/:/,$ctpos->{time02}); + #adding free minutes to start_time + $dt0->add( hours => $dhh, minutes => $dmm ) if(looks_like_number($dhh) && looks_like_number($dmm)); + + my $cdur10 = $dt1->subtract_datetime($dt0); + my ($durdd,$durhh,$durmm) = $cdur10->in_units( 'days', 'hours','minutes' ); + $durhh = sprintf('%.2d',$durhh); + $durmm = sprintf('%.2d',$durmm); + $computed_clock = "$durhh:$durmm"; + $computed_clock = "$durdd day $durhh:$durmm" if($durdd); + $rental_minute = $self->clock_minutes($computed_clock); } } - #If available then take saved hours + my $hours = "";#old + my $rental_units = 0; + my $price_by_allunits = 0; + my $max_daily_unit = 0;#how many rental_minute is one daily_unit + my $fee_daily_minutes = 0; + my $rental_days_price = 0; + my $restal_minute = 0; + my $rental_time_price = 0; + my $rounded_time_factor = 0; + + #readonly if bike available then take saved $total_price if($ctpos->{int10} && $ctpos->{int10} == 1 && $todo eq "readonly"){ - if($ctpos->{int03} && $ctpos->{int03} > 0){ - $hours = $ctpos->{int03}; - $total = $hours * $price if(looks_like_number($hours) && looks_like_number($price)); - }else{ - $hours = 0; - $total = 0; + if($ctpos->{int03} && $ctpos->{int03} > 0 && $ctpos->{int02} && $ctpos->{int02} > 0){ + $total_price = $ctpos->{int03} * $ctpos->{int02}; } } - #jede angebrochene Std. - elsif(looks_like_number($hours) && $hours > 0){ - if($days_hour4price > 0 && $hours >= $days_hour4price && $hours <= 24){ - $logging->{_hours_lower24} = "$days_hour4price > 0 && $hours >= $days_hour4price && $hours <= 24"; - $logging->{__hours_lower24} = $hours; - $hours = $days_hour4price; - $logging->{hours_lower24} = $hours; - } - elsif($days_hour4price > 0 && $hours >= 24){ - $logging->{hours_greate24} = "$days_hour4price > 0 && $hours >= 24"; - my $days = $hours / 24; - my $days_int = $days; - my $dez = 0; - ($days_int,$dez) = split(/\./, $days) if($days =~ /\.\d/); - my $days_hour = $days_int * 24; - my $rest = $hours - $days_hour; - $rest = $days_hour4price if($rest > $days_hour4price); - $hours = ($days_int * $days_hour4price) + $rest; - $logging->{hours_compute} = "$hours = ($days_int * $days_hour4price) + $rest"; - } + #on time unit + elsif($rental_minute && $rental_minute > 0 && $ctpos->{int02} && $ctpos->{int02} > 0){ + $rental_units = $rental_minute / $tariff_unitbyminute; + $price_by_allunits = $rental_units * $ctpos->{int02}; - $logging->{hours_preround} = $hours; - $hours = $lb->round_half($hours); - $logging->{hours_postround} = $hours; - $total = $hours * $price if(looks_like_number($hours) && looks_like_number($price)); - }else{ - $hours = 0; + #max fee per day (day = 1440 minutes) + if($ctpos->{int17} && $price_by_allunits >= $ctpos->{int17}){ + $max_daily_unit = $ctpos->{int17} / $ctpos->{int02}; + $fee_daily_minutes = $max_daily_unit * $tariff_unitbyminute; + + my $days_dec = $rental_minute / 1440; + my ($days,$ddec) = split(/\./, $days_dec) if($days_dec =~ /\.\d/); + $rental_days_price = $days * $ctpos->{int17} if($days > 0); + $restal_minute = $rental_minute - $days * 1440; + if($restal_minute >= $fee_daily_minutes){ + $rental_days_price += $ctpos->{int17}; + }else{ + my $rental_time_factor = $restal_minute / $tariff_unitbyminute; + $rounded_time_factor = $rental_time_factor; + if($rental_time_factor =~ /(\d+)\.(\d+)/){ + $rounded_time_factor = $1 + 1; + } + $rental_time_price = $rounded_time_factor * $ctpos->{int02}; + } + }else{ + my $rental_time_factor = $rental_minute / $tariff_unitbyminute; + $rounded_time_factor = $rental_time_factor; + if($rental_time_factor =~ /(\d+)\.(\d+)/){ + $rounded_time_factor = $1 + 1; + } + $rental_time_price = $rounded_time_factor * $ctpos->{int02}; + } } - $total = sprintf('%.2f', $total); - #Bsp 1h = 60min , 60*0,02 = 1,2min - $hours = "0" if($real_hours <= 0.02); + + $total_price = $rental_days_price + $rental_time_price; + $total_price = sprintf('%.2f', $total_price); $return->{start_time} = "$ctpos->{start_time}"; $return->{end_time} = "$computed_end_time"; - $return->{real_hours} = "$real_hours"; - $return->{computed_hours} = "$hours"; - $return->{unit_price} = "$price"; - $return->{total_price} = "$total"; + $return->{real_hours} = "$real_clock"; + $return->{computed_hours} = "$computed_clock"; + $return->{unit_price} = "$ctpos->{int02}"; + $return->{total_price} = "$total_price"; - $bw->log("hour computed:",$logging,""); + $return->{rentalog}->{real_hours} = "$real_clock"; + $return->{rentalog}->{computed_hours} = "$computed_clock"; + $return->{rentalog}->{rental_minute} = "$rental_minute"; + $return->{rentalog}->{rental_units} = "$rental_units"; + $return->{rentalog}->{tariff_unitbyminute} = "$tariff_unitbyminute"; + $return->{rentalog}->{restal_minute} = "$restal_minute"; + $return->{rentalog}->{rounded_time_factor} = "$rounded_time_factor"; + $return->{rentalog}->{price_by_allunits} = "$price_by_allunits"; + $return->{rentalog}->{rental_days_price} = "$rental_days_price"; + $return->{rentalog}->{rental_time_price} = "$rental_time_price"; + $return->{rentalog}->{ctpos_freed} = "$ctpos_freed->{c_id}"; + + $bw->log("Pricing counting_rental return:",$return,""); return $return; }#end counting_rental @@ -188,7 +237,6 @@ sub fetch_rentalfeed { $return->{system} = "sigo" if($ctpos->{int11} && $ctpos->{int11} == 3); if($ctpos->{int11}){ - #$return->{gps} = "$ctpos->{txt06}";#end_gps ($return->{gps}->{latitude},$return->{gps}->{longitude}) = split(/,/,$ctpos->{txt06}); #if($ctpos->{txt10} =~ /requested|occupied/) @@ -204,7 +252,6 @@ sub fetch_rentalfeed { $return->{Ilockit_GUID} = "$ctpos->{txt17}" if($ctpos->{int11} == 2); $return->{Ilockit_ID} = "$ctpos->{txt18}" if($ctpos->{int11} == 2); - #$return->{gps} = "$ctpos->{txt06}";#start_gps ($return->{gps}->{latitude},$return->{gps}->{longitude}) = split(/,/,$ctpos->{txt06}); $return->{lock_state} = "locked" if($ctpos->{int20} == 1); $return->{lock_state} = "unlocked" if($ctpos->{int20} == 2); diff --git a/copri4/main/src/Mod/RelationEdit.pm b/copri4/main/src/Mod/RelationEdit.pm index 86cf0e8..bbd523e 100755 --- a/copri4/main/src/Mod/RelationEdit.pm +++ b/copri4/main/src/Mod/RelationEdit.pm @@ -88,16 +88,10 @@ sub tpl(){ $ct_users = $db->collect_users("users") if($u_group eq "manager");#users map #we mean roots for sub-NodePath selection - my $module; my @viewsel = split /\//,$1 if($path =~ /^\/(.*)/); my $depth = scalar(@viewsel); my $view_root = $viewsel[0] || "root"; - $module = $db->get_node("$view_root","$lang","<","200000"); - if(!$module->{main_id} && ($path =~ /^\/([\w-\sßäöüÄÖÜ]+)\/([\w-\sßäöüÄÖÜ]+)/)){ - $module = $db->get_node2($1,$2,$lang); - } - my $module_id = "$module->{main_id}" || "100000"; my $selector = "this_is_no_selection"; $selector = $1 if($path =~ /\/(Waren|Kunden|Veranstaltung|Nachrichten)/); @@ -111,20 +105,10 @@ sub tpl(){ my $depth=0; my $j=0; my ($m_id,$uri) = $lb->make_uri5($nodes->{$id}->{main_id},$nodes); - #print "$module->{node_name}|$selector|$m_id:$uri
"; - #if(($uri =~ /$module->{node_name}/) && ($uri !~ /000 root/)){ if(($uri =~ /\w\/\w/) && ($uri !~ /000 root/)){ @viewsel = split(/\//,$uri) if($uri =~ /^\/(.*)/); $depth = scalar(@viewsel); - if($varenv{orga} ne "dms"){ - if($depth >= 3){ - my $ct4rel = $db->collect_ct4rel("$table",$nodes->{$id}->{main_id},$lang,"","","","",""); - foreach my $id (keys(%$ct4rel)){ - $j++ if($ct4rel->{$id}->{c_id}); - } - push (@_menu_rel, "$m_id:$uri"); - } - }elsif($varenv{orga} eq "dms"){ + if($varenv{orga} eq "dms"){ #sharee-copri workaround to get only bike menue if($selector && ($path =~ /\/$selector/) && ($uri =~ /$selector/) && ($node_meta->{template_id} == 205)){#Waren bikes if($depth >= 2){ diff --git a/copri4/main/src/Tpl/BaseEdit.pm b/copri4/main/src/Tpl/BaseEdit.pm index e0585ec..e25673b 100755 --- a/copri4/main/src/Tpl/BaseEdit.pm +++ b/copri4/main/src/Tpl/BaseEdit.pm @@ -408,7 +408,8 @@ EOF 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)); } - elsif($key =~ /int01/ && "$size" eq "select" && $node_meta->{tpl_id} == 210){#tariff_unit + #changed to time01 + elsif(1==2 && $key =~ /int01/ && "$size" eq "select" && $node_meta->{tpl_id} == 210){#tariff_unit my @_unit_valxx = (); while (my ($key, $value) = each %{ $dbt->{copri_conf}->{tariff_unit} }) { push @_unit_valxx, "$key:$value";#[0.5:0,5 Std] @@ -599,8 +600,14 @@ EOF print $q->Tr(); print $q->td({-class=>'left_italic_cms',-colspan=>1},"$des"),"\n"; print $q->td({-class=>'content1_cms',-colspan=>'2'},$q->textfield(-class=>'etxt', -style=>"width:$w;",-name=>"$key", -override=>'1', -default=>"$K_int"), $postdes),"\n"; - } + elsif($key =~ /time\d+/){ + my $w = $size . "em"; + $ctrel->{$key} =~ s/:00$//; + print $q->Tr(); + print $q->td({-class=>'left_italic_cms',-colspan=>1},"$des"),"\n"; + print $q->td({-class=>'content1_cms',-colspan=>'2'},$q->textfield(-class=>'etxt', -style=>"width:$w;",-name=>"$key", -override=>'1', -default=>"$ctrel->{$key}"), $postdes),"\n"; + } if($key =~ /date_time/){ #print $q->hidden(-name=>'t_id', -override=>'1',-value=>"$times_id"); diff --git a/copri4/main/src/Tpl/Liste3.pm b/copri4/main/src/Tpl/Liste3.pm index 231cf85..b3c9662 100755 --- a/copri4/main/src/Tpl/Liste3.pm +++ b/copri4/main/src/Tpl/Liste3.pm @@ -570,7 +570,7 @@ sub tpl(){ $s_val = $searchref->{$key}; #print "$key=$searchref->{$key}|"; - if($key =~ /byte|node|txt|int|uri|ct_name|c_id|barcode|sort|public/){ + if($key =~ /byte|node|txt|int|time\d+|ct_name|c_id|barcode|sort|public/){ if($table eq "content" && $tpl_id == 225 && $key eq "int04"){ print $q->td({-class=>"search_line"},$q->textfield(-class=>'stxt',-name=>"s_$key",-default=>"$s_val",-size=>"$size",-maxlength=>40, -autofocus=>1),"\n"); }elsif($table eq "content" && $key eq "barcode"){ @@ -597,7 +597,7 @@ sub tpl(){ $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}->{tariff_unit} if($tpl_id == 210 && $key eq "int01"); $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 })) { @@ -633,7 +633,7 @@ sub tpl(){ $e_mtime = $searchref->{end_date_time}; } - print $q->td({-nowrap=>1,-class=>"search_line"},$q->textfield(-id=>'datepicker1',-class=>'stxt',-name=>"s_start_$key",-default=>"$s_mtime",-size=>"$size",-maxlength=>20)),"\n" if($key =~ /time/); + print $q->td({-nowrap=>1,-class=>"search_line"},$q->textfield(-id=>'datepicker1',-class=>'stxt',-name=>"s_start_$key",-default=>"$s_mtime",-size=>"$size",-maxlength=>20)),"\n" if($key =~ /time$/); } @@ -662,7 +662,7 @@ sub tpl(){ my ($key,$val,$size,$title) = split /=/,$_; my $sort_title=" $title"; $val = "$val" if($key eq $users_dms->{col_sort}); - if($key =~ /byte|txt|time|node|int|uri|save|state|owner|c_id|ct_name|barcode|sort|public/){ + if($key =~ /byte|txt|time|node|int|time\d+|save|state|owner|c_id|ct_name|barcode|sort|public/){ $i++; print $q->th($q->a({-class=>"sortnav",-href=>"?col_sort=$key\&offset=$offset\&limit=$limit",-title=>"$sort_title"},"$val")),"\n"; } @@ -920,13 +920,13 @@ sub tpl(){ $kost_key = 1 if($key =~ /node05|node08/); my $txtstyle = "text-align:left;"; my $isize = "26"; - if($key =~ /barcode|c_id|ct_name|int|state|sort|public/){ + if($key =~ /barcode|c_id|ct_name|int|time\d+|state|sort|public/){ $txtstyle = "text-align:right;max-width:8em;"; $isize = "5"; $isize = "5" if($key =~ /int/); } $isize = $size if($size =~ /\d/); - $ct4rel->{$id}->{$key} = $lb->time4de($ct4rel->{$id}->{$key},"1") if($key =~ /time/); + $ct4rel->{$id}->{$key} = $lb->time4de($ct4rel->{$id}->{$key},"1") if($key =~ /time$/); $ct4rel->{$id}->{$key} = $q->unescapeHTML($ct4rel->{$id}->{$key});# if($key !~ /byte/); my $br4text = $R::node2edit || ""; $ct4rel->{$id}->{$key} = $lb->newline($ct4rel->{$id}->{$key},"","$br4text"); @@ -1037,7 +1037,7 @@ sub tpl(){ print $q->td({-class=>'tdtxt',-style=>"$txtstyle $set_style"},"$bonustarif"),"\n"; - }elsif($key =~ /int|save|time|sort|public/){ + }elsif($key =~ /int|save|time$|sort|public/){ if($key eq "int06" && $ct4rel->{$id}->{int06}){ $ct4rel->{$id}->{int06} =~ s/,.*//; } @@ -1084,6 +1084,11 @@ sub tpl(){ my $K_int = unpack "H*", $ct4rel->{$id}->{$key}; $txtstyle = "text-align:left;"; print $q->td({-class=>'tdtxt',-style=>"$txtstyle $set_style"},"$K_int"),"\n"; + }elsif($key =~ /time\d+/){ + $txtstyle = "text-align:right;"; + $ct4rel->{$id}->{$key} =~ s/:00$//; + print $q->td({-class=>'tdtxt',-style=>"$txtstyle $set_style"},"$ct4rel->{$id}->{$key}"),"\n"; + } } } diff --git a/copri4/main/src/Tpl/TransPositionen.pm b/copri4/main/src/Tpl/TransPositionen.pm index 29f187b..242ba42 100755 --- a/copri4/main/src/Tpl/TransPositionen.pm +++ b/copri4/main/src/Tpl/TransPositionen.pm @@ -209,8 +209,8 @@ EOF print $q->hidden(-name=>'cc_id', -value=>"$cttpos->{$id}->{cc_id}", -override=>'1'); print $q->hidden(-name=>'c_id4trans', -override=>'1', -value=>"$rel4tpl->{content_id}"); print $q->hidden(-name=>'tpl_id4trans', -override=>'1', -value=>"$node_meta->{tpl_id}"); - print $but->singlesubmit2("ct_trans","save_pos","$ib{save_pos}","","ebutton5"), - $but->singlesubmit2("ct_trans","delete_pos","$ib{delete_pos}"),"\n"; + print $but->singlesubmit2("ct_trans","save_pos","$ib{save_pos}","background-color:white;padding:20px;","")," ", + $but->singlesubmit2("ct_trans","delete_pos","$ib{delete_pos}","background-color:white;padding:20px;",""),"\n"; }elsif(!$ctt->{close_time}){ print $q->a({-class=>"editnav",-href=>"/DMS/Faktura?trans2edit=transpos\&c_idpos=$cttpos->{$id}->{c_id}\&c_id4trans=$rel4tpl->{content_id}\&tpl_id4trans=$node_meta->{tpl_id}\&owner=$users_dms->{u_id}",-title=>"Datensatz bearbeiten"}, $q->img({-src=>"$varenv{metahost}/glyphicons/glyphicons-151-edit.png"})),"\n"; } diff --git a/copri4/main/src/scripts/Ilockit_cloud.pl b/copri4/main/src/scripts/Ilockit_cloud.pl index 2922094..1ee6c9c 100755 --- a/copri4/main/src/scripts/Ilockit_cloud.pl +++ b/copri4/main/src/scripts/Ilockit_cloud.pl @@ -92,12 +92,15 @@ sub utctime { my $time = Time::Piece->strptime($date, "%Y-%m-%dT%H:%M:%S"); print FILE "localtime: " . $time->datetime . "\n";#localtime my $utc_epoch = $time->epoch; - #$utc_epoch -= 2*60*60;# -2 std # #only -1 hour, because of deviceTime and serverTime differs #'deviceTime' => '2021-10-14T08:19:35.000+0000', #'serverTime' => '2021-10-14T07:19:37.000+0000', - $utc_epoch -= 1*60*60;# -1 std + + #TODO + $utc_epoch -= 2*60*60;# -2 std (Sommerzeit) + #$utc_epoch -= 1*60*60;# -1 std (Winterzeit) + $utc_epoch += $latency; $time = gmtime($utc_epoch);#epoch print FILE "utctime: " . $time->datetime . "\n";#utc zulu date time diff --git a/copri4/main/src/scripts/Ilockit_trackingcloud.pl b/copri4/main/src/scripts/Ilockit_trackingcloud.pl index 36061ab..d65da71 100755 --- a/copri4/main/src/scripts/Ilockit_trackingcloud.pl +++ b/copri4/main/src/scripts/Ilockit_trackingcloud.pl @@ -43,9 +43,14 @@ my %varenv = $cf->envonline($syshost); my $lang = "de"; my $now_dt = strftime "%Y-%m-%d %H:%M:%S", localtime; +my $api_file = "/var/www/copri4/shareeconf/apikeys.cfg"; +my $aconf = Config::General->new($api_file); +my %apikeyconf = $aconf->getall; +#print "---> " . $apikeyconf{Ilockitcloud}->{username} . "\n"; + my $ua = LWP::UserAgent->new; $ua->agent("sharee APIclient"); -$ua->credentials( 'tracking.ilockit.bike:443', 'api', 'r.guempelein@sharee.bike', 'mohj2ooN'); +$ua->credentials( 'tracking.ilockit.bike:443', 'api', "$apikeyconf{Ilockitcloud}->{username}", "$apikeyconf{Ilockitcloud}->{passwd}"); my $json = JSON->new->allow_nonref; my $response_in = {}; @@ -55,6 +60,7 @@ my $owner = 183; my $todo = $ARGV[1]; #my $deviceId = $ARGV[2] || ""; my $pos_id = $ARGV[2] || ""; +my $sleep = $ARGV[3] || ""; open(FILE,">>$varenv{logdir}/Ilockit_tracking.log"); print FILE "\n\n*** $now_dt\n"; @@ -87,8 +93,9 @@ sub utctime { my $time = Time::Piece->strptime($date, "%Y-%m-%dT%H:%M:%S"); print FILE "localtime: " . $time->datetime . "\n";#localtime my $utc_epoch = $time->epoch; - #$utc_epoch -= 2*60*60;# -2 std (Sommerzeit) - $utc_epoch -= 1*60*60;# -1 std (Winterzeit) + #TODO + $utc_epoch -= 2*60*60;# -2 std (Sommerzeit) + #$utc_epoch -= 1*60*60;# -1 std (Winterzeit) $utc_epoch += $latency; $time = gmtime($utc_epoch);#epoch print FILE "utctime: " . $time->datetime . "\n";#utc zulu date time @@ -111,7 +118,8 @@ sub get_pos { if($todo eq "get_tripsum" && $pos_id){ - print FILE "trying $todo && $pos_id" . "\n"; + print FILE "trying $todo && $pos_id | sleep $sleep" . "\n"; + sleep $sleep if($sleep); my $rows = &get_tripsum($pos_id); print FILE "got rows $rows" . "\n"; }else{ diff --git a/copri4/main/src/scripts/sigo_client.pl b/copri4/main/src/scripts/sigo_client.pl index a8ee36c..cf41a16 100755 --- a/copri4/main/src/scripts/sigo_client.pl +++ b/copri4/main/src/scripts/sigo_client.pl @@ -39,7 +39,7 @@ if($todo eq "sigo_available"){ print $0 . Dumper($return) . "\n"; } -if($todo eq "sigo_reserve"){ +if($todo eq "sigo_booking"){ my $auth = { c_id => 1842 }; #my $bikeId = "380116b5-0522-43da-ab66-477744a731a3";# bike 1150 my $bike = "SX1150";# bike 1150 from app booking_request diff --git a/copri4/main/src/scripts/tests/index.pl b/copri4/main/src/scripts/tests/index.pl index bb41b0c..38ccc32 100755 --- a/copri4/main/src/scripts/tests/index.pl +++ b/copri4/main/src/scripts/tests/index.pl @@ -34,6 +34,7 @@ my %varenv = $cf->envonline(); my $operator_key = $q->param('api_test'); my $bike = $q->param('bike'); + #my $bike = "FR4781"; my $lang = "de"; my $dyn_js = " diff --git a/copri4/shareeapp-operator/src/Lib/Mlogic.pm b/copri4/shareeapp-operator/src/Lib/Mlogic.pm index dcd64e9..8f58df6 100755 --- a/copri4/shareeapp-operator/src/Lib/Mlogic.pm +++ b/copri4/shareeapp-operator/src/Lib/Mlogic.pm @@ -41,9 +41,14 @@ 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")){ my $coo = $q->cookie('domcookie') || $q->param('sessionid') || ""; + #my $api_test = "sharee_kn"; - my $api_test = "sharee_fr01"; - print $q->div({-style=>'text-align:right;height:25px;padding:6px 15px 6px 0px;background-color:white'},$q->a({-style=>"color:#$bgcolor1;", -href=>"$varenv->{metahost}/src/scripts/tests/index.pl?sessionid=$coo\&api_test=$api_test", -target=>'_blank'}," [ $api_test ] "),"$users_sharee->{txt08}",$q->a({-style=>"color:#$bgcolor1;", -href=>"logout_sharee$session"},"logout")),"\n"; + my $api_test = "sharee_fr01"; my $bike="FR1538"; + #my $api_test = "sharee_wue"; + #my $api_test = "sharee_sx"; my $bike="SX1150"; + #my $api_test = "sharee_ren"; my $bike="REN2"; + print $q->div({-style=>'float:right;text-align:right;height:25px;padding:6px 15px;background-color:white'},$q->a({-style=>"background-color:#ffffff;color:#$bgcolor1;", -href=>"$varenv->{metahost}/src/scripts/tests/index.pl?sessionid=$coo\&api_test=$api_test\&bike=$bike", -target=>'_blank'}," [ tests --> $api_test ] "),"$users_sharee->{txt08}",$q->a({-style=>"color:#$bgcolor1;", -href=>"logout_sharee$session"},"logout")),"\n"; + } print "
\n"; diff --git a/copri4/shareeweb-project/src/Lib/Mlogic.pm b/copri4/shareeweb-project/src/Lib/Mlogic.pm index cf905cf..55a1978 100755 --- a/copri4/shareeweb-project/src/Lib/Mlogic.pm +++ b/copri4/shareeweb-project/src/Lib/Mlogic.pm @@ -49,10 +49,10 @@ sub tpl(){ if($users_sharee->{c_id} eq $varenv->{superu_id} || $dbt->{copri_conf}->{stage} eq "test"){ my $coo = $q->cookie('domcookie') || $q->param('sessionid') || $dbt->{website}->{$varenv->{syshost}}->{merchant_id}; #my $api_test = "sharee_kn"; - #my $api_test = "sharee_fr01"; + my $api_test = "sharee_fr01"; my $bike="FR1538"; #my $api_test = "sharee_wue"; #my $api_test = "sharee_sx"; my $bike="SX1150"; - my $api_test = "sharee_ren"; my $bike="REN2"; + #my $api_test = "sharee_ren"; my $bike="REN2"; print $q->div({-style=>'float:right;text-align:right;height:25px;padding:6px 15px;background-color:white'},$q->a({-style=>"background-color:#ffffff;color:#$bgcolor1;", -href=>"$varenv->{metahost}/src/scripts/tests/index.pl?sessionid=$coo\&api_test=$api_test\&bike=$bike", -target=>'_blank'}," [ tests --> $api_test ] ")),"\n"; }