beta App api extension with bikes-occupied on bikes-available request. Rental freed-time without rental-count restriction on TR.

This commit is contained in:
ragu 2023-10-24 07:26:06 +02:00
parent 60f21a4f85
commit 44d47011af
5 changed files with 85 additions and 38 deletions

View file

@ -1641,7 +1641,10 @@ sub user_rentals_history(){
my $self = shift;
my $q = shift || "";
my $auth = shift;
my $daily = shift || 0;
my %varenv = $cf->envonline();
my $today = strftime("%Y-%m-%d",localtime(time));
my $record_all = {};
my $pref = {
@ -1652,7 +1655,9 @@ sub user_rentals_history(){
ca_id => "$auth->{c_id}",
};
if(looks_like_number($q->param('month')) && $q->param('month') > 0){
if($daily > 0){
$pref->{start_time} = ">=::$today";
}elsif(looks_like_number($q->param('month')) && $q->param('month') > 0){
my $month = $q->param('month');
$pref->{mtime} = ">=::(now() - interval '$month month')";
}else{
@ -1884,11 +1889,12 @@ sub bikes_available(){
my $td_template = $dbt->rental_description_template($varenv_prim);
#return list of occupied/requested bikes
my $rentals_record = {};
my $rentals_response = {};
$rentals_record = $self->user_bikes_occupied($dbh,$auth,"");
$rentals_response = $self->rentals($varenv_prim,$rentals_record,$auth,"");#returns JSON rental values
$rentals_response->{further_freedtime_available} = 1 if(!keys (%$rentals_response));
my $adjust_freedtime = 0;
my $further_freedtime_available = 1;
my ($cttpos,$operator_hash) = $self->user_rentals_history($q,$auth,1);
foreach my $id (sort { lc($cttpos->{$b}->{itime}) cmp lc($cttpos->{$a}->{itime}) } keys(%$cttpos)){
$further_freedtime_available = $pri->count_freedrental("rentals by bikes_available",$varenv,$auth->{c_id},$cttpos->{$id},$adjust_freedtime);
}
foreach my $id (sort { $record->{$a}->{barcode} <=> $record->{$b}->{barcode} } keys (%$record)){
$return->{$id}->{authed} = "$authed";
@ -1984,7 +1990,7 @@ sub bikes_available(){
$tariff_content->{$tid}->{int17} =~ s/\./,/ if($lang eq "de");
$return->{$id}->{rental_description}->{tarif_elements}->{$td} = ["$td_template->{$td}->{int17}","$tariff_content->{$tid}->{int17} € / 24 $varenv_prim->{cms}->{'unit-hour'}->{txt}"];
}elsif($td_template->{$td}->{time02} && $tariff_content->{$tid}->{time02} =~ /[1-9]/){
if($rentals_response->{further_freedtime_available} == 1 || !$auth->{c_id}){
if($further_freedtime_available == 1 || !$auth->{c_id}){
$time_unit = $dbt->time_format($varenv_prim,$tariff_content->{$tid}->{time02});
$time_unit .= " / $varenv_prim->{cms}->{'unit-day'}->{txt}" if($dbt->{operator}->{$varenv->{dbname}}->{project} ne "Konstanz");
$return->{$id}->{rental_description}->{tarif_elements}->{$td} = ["$td_template->{$td}->{time02}","$time_unit"];

View file

@ -505,6 +505,7 @@ elsif($q->param('request') eq "bikes_available"){
}else{
($aowner,my $return_merchant) = $apif->fetch_merchant($q,\%varenv,$coo,$q->param('merchant_id'));
$varenv{merchant_id} = $return_merchant->{merchant_id};
$response = { %$response, %$return_merchant };
#on operator loop select, operator adr must be select to get user_group
my $auth = {};
@ -519,12 +520,20 @@ elsif($q->param('request') eq "bikes_available"){
}else{
$response->{bikes} = $apif->bikes_available($q,\%varenv,\%varenv,$authraw);
}
#return also bikes_occupied on bikes_available by operator request
if(1==1 && $varenv{syshost} ne "shareeapp-primary" && $dbt->{copri_conf}->{betau_id}->{$authraw->{c_id}}){
#return list of occupied/requested bikes
my $record = {};
$record = $apif->user_bikes_occupied($dbh,$authraw,"");
$response->{bikes_occupied} = $apif->rentals(\%varenv,$record,$authraw,"1");#returns JSON rental values
}
}
if(ref($response->{bikes}) ne "HASH"){
$response->{response_state} = "Failure 5003: cannot find any user defined bike tariff";
$response->{response_text} = "Abbruch, es konnte kein gültiger Tarif gefunden werden";
}
}
}#end bikes_available
#bikes_all with service_state calculater
#cronjob for maintenance update runs at ~ 7:00

View file

@ -835,7 +835,7 @@ sub fetch_record(){
#ct.* because of nd.txt01 and ct.txt01 .
my $sql = "SELECT ct.*,rel.*,nd.node_name,nd.parent_id,nd.type_id,nd.energy_id FROM $fetch->{table} ct, relation rel, nodes nd $where $order";
$bw->log("DBtank fetch_record : ",$sql,"") if($debug);
#$bw->log("DBtank fetch_record : ",$sql,"") if($debug);
my $sth = $dbh->prepare($sql);
my $rc = $sth->execute();

View file

@ -24,7 +24,6 @@ use Mod::Prelogic;
use Lib::Mlogic;
use Mod::Basework;
use Mod::DBtank;
use Mod::Libenzdb;
use Mod::APIfunc;
use Mod::Shareework;
use Mod::Prelib;
@ -43,7 +42,6 @@ sub handler {
my $pre = new Prelogic;
my $tk = new Shareework;
my $dbt = new DBtank;
my $db = new Libenzdb;
my $apif = new APIfunc;
my $but = new Buttons;
my $pl = new Prelib;
@ -252,8 +250,13 @@ sub handler {
if($mode =~ /logout/){
if($mode =~ /logout_sharee/){
$apif->authout($q,$coo);
}else{
$db->cook_out($coo);
}elsif($users_dms->{u_id}){
my $update_users = {
table => "users",
change => "no_time",
u_id => $users_dms->{u_id}
};
$dbt->update_one($dbh,$update_users,"cookie=''");
}
print redirect("$varenv{wwwhost}");
exit 0;
@ -265,7 +268,15 @@ sub handler {
if($R::login_sharee){
if($users_sharee->{c_id} && (!$payable_check || ($users_sharee->{txt31} && $tpl->{tpl_order} =~ /$users_sharee->{txt31}/))){
my $row = $db->updater("contentadr","c_id","$users_sharee->{c_id}","int12","1") if(!$payable_check);#Vde
if(!$payable_check){
my $update_adr = {
table => "contentadr",
mtime => "now()",
owner => $aowner,
c_id => $users_sharee->{c_id}
};
$dbt->update_one($dbh,$update_adr,"int12=1");
}
print redirect("$varenv{wwwhost}/$varenv{mandant}/Account/$varenv{accounting_1}$session");
exit 0;
}elsif($users_sharee->{c_id} && !$payable_check){
@ -299,6 +310,12 @@ sub handler {
#DMS & Tools
if($varenv{orga} eq "dms" && $users_dms->{u_id}){
my $update_users = {
table => "users",
change => "no_time",
u_id => $users_dms->{u_id}
};
if($R::cal_delta_start){
use Date::Calc qw(Add_Delta_YMD);
my $day = strftime "%d", localtime;
@ -308,21 +325,21 @@ sub handler {
($year,$mon,$day) = split(/-/,$users_dms->{cal_start}) if($users_dms->{cal_start});
my ($year1,$mon1,$day1) = split(/:/,$R::cal_delta_start);
my ($Dy,$Dm,$Dd) = Add_Delta_YMD($year,$mon,$day, $year1,$mon1,$day1);
$db->users_up("cal_start","$Dy-$Dm-$Dd",$users_dms->{u_id});
$dbt->update_one($dbh,$update_users,"cal_start='$Dy-$Dm-$Dd'");
}
if($R::cal_today){
my $today4db = strftime("%Y-%m-%d %H:%M",localtime(time));
$db->users_up("cal_start","$today4db",$users_dms->{u_id});
$dbt->update_one($dbh,$update_users,"cal_start='$today4db'");
}
if($R::cal_sort_updown){
$db->users_up("cal_sort_updown",$R::cal_sort_updown,$users_dms->{u_id});
$dbt->update_one($dbh,$update_users,"cal_sort_updown='$R::cal_sort_updown'");
}
if($R::col_sort && $node_meta->{ct_table}){
$db->users_up("col_sort_$node_meta->{ct_table}",$R::col_sort,$users_dms->{u_id});
$dbt->update_one($dbh,$update_users,"col_sort_$node_meta->{ct_table}='$R::col_sort'");
}
if($R::sort_updown){
$db->users_up("sort_updown_$node_meta->{ct_table}",$R::sort_updown,$users_dms->{u_id});
$dbt->update_one($dbh,$update_users,"sort_updown_$node_meta->{ct_table}='$R::sort_updown'");
}
#base_edit implements new DMS methodes without Pre* things
@ -420,15 +437,20 @@ sub handler {
#DMS Faktura
if($node_meta->{ct_table} eq "contenttrans"){
$bw->log("DMS action from $users_dms->{u_id} on $node_meta->{ct_table}",$q,"");
my $update_users = {
table => "users",
change => "no_time",
u_id => $users_dms->{u_id}
};
my $dbh_primary = $dbt->dbconnect_extern($dbt->{primary}->{sharee_primary}->{database}->{dbname});
my $users_dms_primary = { u_id => 0 };
$users_dms_primary = $dbt->select_users($dbh_primary,$users_dms->{u_id},"and int03 >= 1");
if($users_dms_primary->{u_id} && $users_dms_primary->{int03} >= 1 && $users_dms->{u_id} && $users_dms->{int03} >= 1 && $R::ct_trans eq "open"){#DMS Faktura read
$db->update_users4trans($R::c_id4trans,$R::tpl_id4trans,"",$users_dms->{u_id}) if(looks_like_number($R::c_id4trans) && looks_like_number($R::tpl_id4trans));
$dbt->update_one($dbh,$update_users,"c_id4trans=$R::c_id4trans,tpl_id4trans=$R::tpl_id4trans") if(looks_like_number($R::c_id4trans) && looks_like_number($R::tpl_id4trans));
}
if($users_dms_primary->{u_id} && $users_dms_primary->{int03} == 2 && $users_dms->{u_id} && $users_dms->{int03} == 2){#DMS Faktura rw
$db->update_users4trans($R::c_id4trans,$R::tpl_id4trans,"",$users_dms->{u_id}) if(looks_like_number($R::c_id4trans) && looks_like_number($R::tpl_id4trans));
$dbt->update_one($dbh,$update_users,"c_id4trans=$R::c_id4trans,tpl_id4trans=$R::tpl_id4trans") if(looks_like_number($R::c_id4trans) && looks_like_number($R::tpl_id4trans));
if($R::ct_trans =~ /set_workflow2invoice|set_workflow2storno/){
$return = $pl->set_workflow($q,$users_dms,$R::c_id4trans,$R::set_main_id4workflow) if(looks_like_number($R::c_id4trans) && looks_like_number($R::tpl_id4trans) && looks_like_number($R::set_main_id4workflow));
}elsif($R::ct_trans =~ /set_accounting2invoice/){
@ -624,6 +646,11 @@ sub handler {
#email and sms acknowledgments, check and save confirm states
if($R::confirm_userid && $R::confirm_userid =~ /^\d+$/ && ($R::confirm_code && length($R::confirm_code) >= 5 || $R::confirm_smscode && length($R::confirm_smscode) >= 5)){
my $update_adr = {
table => "contentadr",
mtime => "now()",
owner => $aowner,
};
#keep in mind, for now and just for testing confirm codes are just c_id
open(FILE,">>$varenv{logdir}/confirm.log") if($debug);
@ -639,25 +666,30 @@ sub handler {
my $authref = {
table => "contentadr",
fetch => "one",
template_id => "202",
c_id => $R::confirm_userid,
txt34 => "ilike::$confirm_code%",
};
my $confirmed_email = { c_id => 0 };
$confirmed_email = $dbt->fetch_record($dbh,$authref);
$confirmed_email = $dbt->fetch_tablerecord($dbh,$authref);
#($api_return,$users_sharee) = $apif->auth_verify($q,"",$R::confirm_code);
if($confirmed_email->{c_id}){
$db->updater("contentadr","c_id","$confirmed_email->{c_id}","int04","1");
$update_adr->{c_id} = $confirmed_email->{c_id};
$dbt->update_one($dbh,$update_adr,"int04=1");
#save verified email
$db->updater("contentadr","c_id","$confirmed_email->{c_id}","txt32","$confirmed_email->{txt08}");
$dbt->update_one($dbh,$update_adr,"txt32='$confirmed_email->{txt08}'");
print FILE "confirmed_email: $confirmed_email->{c_id} update because confirm_code:$confirm_code\n" if($debug);
#after mailAck, delete all douple adr with no mailAck
my $ctadr = $db->collect_ct4rel3("contentadr","","","ilike","txt08","$confirmed_email->{txt08}","","","");
my $authref = {
table => "contentadr",
fetch => "all",
keyfield => "c_id",
txt08 => "ilike::" . $q->escapeHTML($confirmed_email->{txt08}),
};
my $ctadr = $dbt->fetch_tablerecord($dbh,$authref);
foreach my $aid (keys(%$ctadr)){
if(!$ctadr->{$aid}->{int04}){
$db->delete_content("contentadr",$ctadr->{$aid}->{c_id});
$dbt->delete_content("contentadr",$ctadr->{$aid}->{c_id});
print FILE "c_id $ctadr->{$aid}->{c_id} $confirmed_email->{txt08} delete because of dopplel\n" if($debug);
}
}
@ -668,18 +700,17 @@ sub handler {
my $authref = {
table => "contentadr",
fetch => "one",
template_id => "202",
c_id => $R::confirm_userid,
txt34 => "ilike::%$confirm_smscode",
};
my $confirmed_sms = { c_id => 0 };
$confirmed_sms = $dbt->fetch_record($dbh,$authref);
$confirmed_sms = $dbt->fetch_tablerecord($dbh,$authref);
#($api_return,$users_sharee) = $apif->auth_verify($q,"",$R::confirm_smscode);
if($confirmed_sms->{c_id}){
$db->updater("contentadr","c_id","$confirmed_sms->{c_id}","int13","1");
$update_adr->{c_id} = $confirmed_sms->{c_id};
$dbt->update_one($dbh,$update_adr,"int13=1");
#save verified telnr
$db->updater("contentadr","c_id","$confirmed_sms->{c_id}","txt33","$confirmed_sms->{txt07}");
$dbt->update_one($dbh,$update_adr,"txt33='$confirmed_sms->{txt07}'");
print FILE "confirmed_sms: $confirmed_sms->{c_id} update because confirm_smscode:$confirm_smscode\n" if($debug);
}
}
@ -687,8 +718,6 @@ sub handler {
($api_return,$users_sharee) = $apif->auth_verify($q,"",$users_sharee->{c_id}) if($users_sharee->{c_id});
if($users_sharee->{int04} && $users_sharee->{int13}){
#2023-01-17 disabled because of should only be set by pseudocardpan ajax
#my $row = $db->updater("contentadr","c_id","$users_sharee->{c_id}","int12","0");#Vde
$dbt->update_operatorsloop($varenv{dbname},$users_sharee->{c_id},"update");
}else{
my $field = "int13";

View file

@ -56,6 +56,9 @@ sub count_freedrental {
my $further_freedtime_available = 1;
my $freed_count = 0;
my $max_freed_count = 1;
#workaround to freedtime all rentals
$max_freed_count = 100 if($dbt->{operator}->{$varenv->{dbname}}->{oprefix} eq "TR");
my $dbh = "";
my $today4db = strftime("%Y-%m-%d %H:%M:%S",localtime(time));
@ -98,7 +101,7 @@ sub count_freedrental {
$record_pos = $dbt->fetch_tablerecord($dbh,$pref_pos);
foreach my $pid (sort { $record_pos->{$a}->{c_id} <=> $record_pos->{$b}->{c_id} } keys (%$record_pos)){
$freed_count++;
if($freed_count > 1 && $pos->{c_id} != $record_pos->{$pid}->{c_id}){
if($freed_count > $max_freed_count && $pos->{c_id} != $record_pos->{$pid}->{c_id}){
$further_freedtime_available = 0;
if($adjust_freedtime && $pricing->{rentalog}->{rental_minute_all} >= 5){
@ -113,8 +116,8 @@ sub count_freedrental {
}
}
$further_freedtime_available = 0 if($freed_count == 1);
print FILE "if($freed_count > 1 && $pos->{c_id} != $record_pos->{$pid}->{c_id})\nfurther_freedtime_available:$further_freedtime_available\n" if($debug);
$further_freedtime_available = 0 if($freed_count >= $max_freed_count);
print FILE "if($freed_count >= $max_freed_count && $pos->{c_id} != $record_pos->{$pid}->{c_id})\nfurther_freedtime_available:$further_freedtime_available\n" if($debug);
}
}
close(FILE) if($debug);