From da31898968f710a198922593c6ac043a9e68bf0a Mon Sep 17 00:00:00 2001 From: ragu Date: Tue, 19 Dec 2023 05:13:56 +0100 Subject: [PATCH] Refactoring user registration payment methodes --- copri4/main/src/Mod/APIfunc.pm | 18 +- copri4/main/src/Mod/APIjsonserver.pm | 2 +- copri4/main/src/Mod/APIpayone.pm | 1 + copri4/main/src/Mod/APIvelo.pm | 12 +- copri4/main/src/Mod/Basework.pm | 2 +- copri4/main/src/Mod/DBtank.pm | 137 +- copri4/main/src/Mod/Indexsharee.pm | 43 +- copri4/main/src/Mod/Libenz.pm | 2 - copri4/main/src/Mod/Libenzdb.pm | 2181 ----------------- copri4/main/src/Mod/Modalbox.pm | 2 - copri4/main/src/Mod/Payment.pm | 166 +- copri4/main/src/Mod/Prelib.pm | 28 +- copri4/main/src/Mod/Pricing.pm | 46 + copri4/main/src/Mod/Shareework.pm | 19 +- copri4/main/src/Tpl/Address3.pm | 13 +- copri4/main/src/Tpl/Liste3.pm | 60 +- copri4/main/src/Tpl/MandantConf.pm | 40 +- copri4/main/src/Tpl/SubListe.pm | 12 +- copri4/main/src/Tpl/TransPositionen.pm | 35 +- copri4/main/src/scripts/velofaktur_client.pl | 6 +- copri4/shareeapp-operator/src/Lib/Mlogic.pm | 8 +- copri4/shareeapp-operator/src/Tpl/Anmelden.pm | 13 +- copri4/shareeapp-operator/src/Tpl/FormEdit.pm | 324 +-- .../shareeapp-operator/src/Tpl/PayoneLink.pm | 111 + .../shareeapp-operator/src/Tpl/PayoneSEPA.pm | 54 +- .../src/Tpl/PayoneSelect.pm | 4 +- .../shareeapp-operator/src/Tpl/RentalData.pm | 375 +++ copri4/shareeweb-project/src/Lib/Mlogic.pm | 10 +- 28 files changed, 974 insertions(+), 2750 deletions(-) delete mode 100755 copri4/main/src/Mod/Libenzdb.pm create mode 100755 copri4/shareeapp-operator/src/Tpl/PayoneLink.pm create mode 100755 copri4/shareeapp-operator/src/Tpl/RentalData.pm diff --git a/copri4/main/src/Mod/APIfunc.pm b/copri4/main/src/Mod/APIfunc.pm index dec471e..ef6998d 100755 --- a/copri4/main/src/Mod/APIfunc.pm +++ b/copri4/main/src/Mod/APIfunc.pm @@ -1902,7 +1902,7 @@ sub bikes_available(){ $return->{$id}->{station} = "$dbt->{operator}->{$varenv->{dbname}}->{oprefix}$record->{$id}->{int04}"; $return->{$id}->{aa_ride} = "0"; $return->{$id}->{aa_ride} = "1" if($record_st->{$record->{$id}->{int04}}->{int42}); - $return->{$id}->{uri_operator} = "$varenv->{wwwhost}"; + $return->{$id}->{uri_operator} = "$dbt->{operator}->{$varenv->{dbname}}->{operatorApp}"; ($return->{$id}->{gps}->{latitude},$return->{$id}->{gps}->{longitude}) = split(/,/,$record->{$id}->{txt06}); $return->{$id}->{bike} = "$dbt->{operator}->{$varenv->{dbname}}->{oprefix}$record->{$id}->{barcode}"; @@ -2084,7 +2084,7 @@ sub bikes_all(){ foreach my $id (sort { $record->{$a}->{barcode} <=> $record->{$b}->{barcode} } keys (%$record)){ if(1==1){ $bikes_on_station->{$record->{$id}->{int04}}->{bike_ist} += 1; - $return->{$id}->{uri_operator} = "$varenv->{wwwhost}"; + $return->{$id}->{uri_operator} = "$dbt->{operator}->{$varenv->{dbname}}->{operatorApp}"; $return->{$id}->{station} = "$dbt->{operator}->{$varenv->{dbname}}->{oprefix}$record->{$id}->{int04}"; ($return->{$id}->{gps}->{latitude},$return->{$id}->{gps}->{longitude}) = split(/,/,$record->{$id}->{txt06}); $return->{$id}->{bike} = "$dbt->{operator}->{$varenv->{dbname}}->{oprefix}$record->{$id}->{barcode}"; @@ -2302,7 +2302,7 @@ sub stations_available(){ $return->{$id}->{capacity} = "$record->{$id}->{int05}" || "1"; $return->{$id}->{station} = "$dbt->{operator}->{$varenv->{dbname}}->{oprefix}$record->{$id}->{int04}"; - $return->{$id}->{uri_operator} = "$varenv->{wwwhost}"; + $return->{$id}->{uri_operator} = "$dbt->{operator}->{$varenv->{dbname}}->{operatorApp}"; ($return->{$id}->{gps}->{latitude},$return->{$id}->{gps}->{longitude}) = split(/,/,$record->{$id}->{txt06}); my $description = $q->unescapeHTML($record->{$id}->{txt01}) || ""; $return->{$id}->{description} = "$description"; @@ -2497,7 +2497,7 @@ sub stations_all(){ } } - $return->{$id}->{uri_operator} = "$varenv->{wwwhost}"; + $return->{$id}->{uri_operator} = "$dbt->{operator}->{$varenv->{dbname}}->{operatorApp}"; ($return->{$id}->{gps}->{latitude},$return->{$id}->{gps}->{longitude}) = split(/,/,$record->{$id}->{txt06}); if($record->{$id}->{description}){ my $description = $q->unescapeHTML($record->{$id}->{txt01}) || ""; @@ -2940,6 +2940,16 @@ sub auth_verify(){ $update_primary->{txt26} = $q->escapeHTML($user_agent) if($user_agent); } + #check prepaid account + if($auth_primary->{int03} == 3){ + my $prepaidhash = { prepaid_total => 0 }; + $prepaidhash = $pri->collect_prepaid($dbh_primary,$auth_primary) if($auth_primary->{c_id}); + if(!$prepaidhash->{prepaid_total} || $prepaidhash->{prepaid_total} < 0){ + my $vde = $auth_primary->{int12} || 1; + $update_primary->{int12} = $vde; + } + } + my $rows = $dbt->update_record($dbh_primary,$update_primary,$auth_primary); $auth_primary = $dbt->fetch_record($dbh_primary,$authref); } diff --git a/copri4/main/src/Mod/APIjsonserver.pm b/copri4/main/src/Mod/APIjsonserver.pm index bdea494..855abfa 100755 --- a/copri4/main/src/Mod/APIjsonserver.pm +++ b/copri4/main/src/Mod/APIjsonserver.pm @@ -71,7 +71,7 @@ my $response = { apiserver => "$apiserver", response => "$respreq", uri_primary => "$dbt->{primary}->{sharee_primary}->{primaryApp}", - copri_version => "4.1.23.22", + copri_version => "4.1.23.23", user_id => "", authcookie => "", new_authcoo => "0", diff --git a/copri4/main/src/Mod/APIpayone.pm b/copri4/main/src/Mod/APIpayone.pm index a2b7913..52ef0f9 100755 --- a/copri4/main/src/Mod/APIpayone.pm +++ b/copri4/main/src/Mod/APIpayone.pm @@ -171,6 +171,7 @@ sub handler { #update adr also on primary my $dbh_primary = $dbt->dbconnect($dbt->{primary}->{sharee_primary}->{database}->{dbname}); $dbt->update_record($dbh_primary,$update_adr,$ctadr); + print FILE Dumper($update_adr) . "\n"; } } } diff --git a/copri4/main/src/Mod/APIvelo.pm b/copri4/main/src/Mod/APIvelo.pm index 7ead9ae..5a7345f 100755 --- a/copri4/main/src/Mod/APIvelo.pm +++ b/copri4/main/src/Mod/APIvelo.pm @@ -47,13 +47,17 @@ sub handler { my $debug=1; my $user_agent = $q->user_agent(); my $dbh = ""; - - $bw->log("APIvelo POST:\n--> user-agent: '$user_agent' to syshost: $varenv{syshost}\n",$q,""); + my %headers = map { $_ => $q->http($_) } $q->http(); + #$bw->log("APIvelo POST:\n--> user-agent: '$user_agent' to syshost: $varenv{syshost}\n",$q,""); print $q->header(-type => "application/json", -charset => "utf-8", -'Access-Control-Allow-Origin' => "*"); open(FILE,">>$varenv{logdir}/APIvelo.log") if($debug); print FILE "\n*** $now_dt user-agent: '$user_agent' to syshost: $varenv{syshost}\n" if($debug); +#print FILE "headers:" . Dumper(%headers) . "\n"; + for my $header ( keys %headers ) { + print FILE "$header: $headers{$header}\n"; + } print FILE "<=== veloDUMP\n " . Dumper($q) . "\n" if($debug); print FILE "<=== DUMP postdata:\n " . Dumper($q->param('POSTDATA')) . "\n" if($debug); @@ -68,7 +72,7 @@ eval { #- int30=velofactur station ID #- int31=velofactur slot ID - my $jrout = $json->pretty->encode({ fakturjson => $response_in }); + my $jrout = $json->pretty->encode($response_in); print FILE "<=== JSON POST from velofactur:\n$jrout\n" if($debug); my $record_cc = { c_id => 0 }; @@ -118,7 +122,7 @@ eval { #$update_cc->{int29} = 1; } - $rows = $dbt->update_record($dbh_operator,$update_cc,$record_cc); + #$rows = $dbt->update_record($dbh_operator,$update_cc,$record_cc); $bw->log("velofactur updates dbname: $sharee_operator, c_id=$record_cc->{c_id} by fakturjson $response_in->{Typ} | rows:$rows",$update_cc,""); print FILE "---> velofactur updates dbname: $sharee_operator, c_id=$record_cc->{c_id} by fakturjson $response_in->{Typ} | rows:$rows\n" . Dumper($update_cc) . "\n" if($debug); } diff --git a/copri4/main/src/Mod/Basework.pm b/copri4/main/src/Mod/Basework.pm index 0af714b..ffb0311 100755 --- a/copri4/main/src/Mod/Basework.pm +++ b/copri4/main/src/Mod/Basework.pm @@ -133,7 +133,7 @@ sub isuser_rentable { my $varenv = shift; my $rentable_check=0; - if($auth->{int03} && $auth->{ct_name} && ($auth->{int03} == 1 && $auth->{ct_name} =~ /\w{2}-\d+/) || ($auth->{int03} == 2 && length($auth->{ct_name}) >= 19) || ($auth->{int03} == 3 && $auth->{ct_name} =~ /Prepay-\d+/i)){ + if($auth->{int03} && $auth->{ct_name} && ($auth->{int03} == 1 && $auth->{ct_name} =~ /\w{2}-\d+/) || ($auth->{int03} == 2 && length($auth->{ct_name}) >= 19) || ($auth->{int03} == 3 && $auth->{ct_name} =~ /Prepaid-\d+/i)){ $rentable_check=1; if($auth->{txt08} && $auth->{int04} == 1 && $auth->{int13} == 1 && !$auth->{int12} && $auth->{int14}){ $rentable_check=2;#if 2 then everything should be alright. rental is enabled diff --git a/copri4/main/src/Mod/DBtank.pm b/copri4/main/src/Mod/DBtank.pm index 68fba1f..a3ae116 100755 --- a/copri4/main/src/Mod/DBtank.pm +++ b/copri4/main/src/Mod/DBtank.pm @@ -429,27 +429,47 @@ sub collect_node { return ($nodes,$rows); } -#only used by dead_relation -sub collect_relation { +#collect main_ids +sub collect_noderec { my $self = shift; my $dbh = shift || $dbh_intern; - my $where = shift || "1=1"; + my $main_id = shift; - my $sth = $dbh->prepare("SELECT * FROM relation where $where"); - my $rc = $sth->execute(); - my $rel = $sth->fetchall_hashref("rel_id"); - return $rel; + my $main_ids = "$main_id,"; + my ($main_collect,$rows) = $self->collect_node($dbh,$main_id); + if(ref($main_collect) eq "HASH"){ + foreach my $id (keys (%$main_collect)){ + if($main_collect->{$id}->{node_name}){ + $main_ids .= "$main_collect->{$id}->{main_id},"; + my ($main_collect2,$rows) = $self->collect_node($dbh,$main_collect->{$id}->{main_id}) if($main_collect->{$id}->{main_id}); + if(ref($main_collect2) eq "HASH"){ + foreach my $id (keys (%$main_collect2)){ + $main_ids .= "$main_collect2->{$id}->{main_id},"; + my ($main_collect3,$rows) = $self->collect_node($dbh,$main_collect2->{$id}->{main_id}) if($main_collect2->{$id}->{main_id}); + if(ref($main_collect3) eq "HASH"){ + foreach my $id (keys (%$main_collect3)){ + $main_ids .= "$main_collect3->{$id}->{main_id},"; + } + } + } + } + } + } + } + $main_ids =~ s/,$//; + return $main_ids; } -#not used -sub collect_relct { +#collect relation nodes +sub collect_rel4nodes(){ my $self = shift; my $dbh = shift || $dbh_intern; - my $ref = shift; - my $sth = $dbh->prepare("SELECT * FROM relation rel, $ref->{table} c where rel.content_id > 0 and rel.template_id=224 and rel.content_id=c.c_id order by rel.content_id"); + my $main_ids = shift; + + my $sth = $dbh->prepare("SELECT * FROM relation rel, nodes nd where rel.main_id=nd.main_id and parent_id IN ($main_ids)"); my $rc = $sth->execute(); - my $rel = $sth->fetchall_hashref("rel_id"); - return $rel; + my $rel4nd = $sth->fetchall_hashref("rel_id"); + return $rel4nd; } # Nodes einer Ebene mit relation @@ -582,21 +602,6 @@ sub fetch_rel4tpl4nd(){ return $rel; } -#azn time worktime from Von Bis -sub select_worktime { - my $self = shift; - my $dbh = shift || $dbh_intern; - my $fetch = shift; - - my $sql = "SELECT $fetch->{end_at} - $fetch->{start_at} AS worktime FROM $fetch->{table} where ct_id = $fetch->{ct_id} and barcode = $fetch->{barcode} and $fetch->{end_at} is not null and $fetch->{start_at} is not null"; - my $sth = $dbh->prepare($sql); - my $rc = $sth->execute(); - my $record = $sth->fetchrow_hashref(); - $bw->log("DBtank select_worktime: ",$sql,"") if($debug); - - return $record; -} - #all accounting position of contenttrans sub collect_contenttrans(){ my $self = shift; @@ -1190,6 +1195,28 @@ sub delete_content(){ return $rows; } +#collect content with contenttranspos +sub collect_postime(){ + my $self = shift; + my $dbh = shift || $dbh_intern; + my $table = shift; + my $start_date_time = shift; + my $end_date_time = shift; + my $start_date2 = shift || ""; + my $end_date2 = shift || ""; + + $start_date_time =~ s/,/./g; + $end_date_time =~ s/,/./g; + my $where = "where cp.cc_id=c.c_id"; + $where .= " and cp.start_time >= $start_date_time"; + $where .= " and cp.end_time <= $end_date_time"; + $where .= " and (cp.start_time >= '$start_date2' OR cp.end_time >= '$start_date2')" if($start_date2 && $end_date2); + my $sth = $dbh->prepare("SELECT cp.* from content c, $table cp $where order by cp.end_time"); + my $rc = $sth->execute(); + my $ct = $sth->fetchall_hashref("cc_id"); + return $ct; +} + #collect contenttranspos with contenttrans sub collect_transpos { @@ -1563,7 +1590,7 @@ sub insert_pos(){ 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,txt12,itime,start_time,end_time,int01,int02,int03,int06,txt05,txt06,txt07,int10,int12,template_id,int13,owner,int07,txt04,int09,int17,int15,int11,int18,int19,txt17,txt18,int20,int25,int29,int34,txt22,txt11,int35,int36,int37,int42,time01,time02) VALUES ('$ctt_id','$ct->{c_id}','$ctadr->{c_id}','$ct_name','$ct->{barcode}','$ct->{txt01}','$user_name','$ct->{txt02}','$ctadr->{txt09}','$prefix',now(),now(),'$endRental','1','$unit_price','$menge','$start_station','$ct->{txt06}','$ct->{txt06}','$ct->{txt07}','$status','$from_main_id','$from_template_id','$deviceId','$owner','$rabatt','$tariff_desc','$tariff_nr','$daymax_price','$abo_price','$ct->{int11}','$sharing_type','$bike_charge','$ct->{txt17}','$ct->{txt18}','1','$trackon','$bike_type_id','$staff','$sig_book->{bikeId}','$sig_book->{rentalId}','$unit_price1','$unit_price2','$start_price','$aa_station','$unit_time','$free_time') RETURNING c_id"); }else{ - $sth = $dbh->prepare("INSERT INTO contenttranspos (ct_id,cc_id,ca_id,ct_name,barcode,txt08,txt09,itime,int01,int02,int03,txt01,int10,int12,int16,template_id,owner) VALUES ('$ctt_id','$ct->{c_id}','$ctadr->{c_id}','$ct_name','$ct->{barcode}','$user_name','$ctadr->{txt09}',now(),'1','$unit_price','1','$ct->{txt01}','0','$from_main_id','$fibumark','$from_template_id','$owner') RETURNING c_id"); + $sth = $dbh->prepare("INSERT INTO contenttranspos (ct_id,cc_id,ca_id,ct_name,barcode,txt08,itime,int01,int02,int03,txt01,int10,int12,int16,template_id,owner) VALUES ('$ctt_id','$ct->{c_id}','$ctadr->{c_id}','$ct_name','$ct->{barcode}','$user_name',now(),'1','$unit_price','1','$ct->{txt01}','0','$from_main_id','$fibumark','$from_template_id','$owner') RETURNING c_id"); } my $rows = $sth->execute(); my $last_id; @@ -1675,7 +1702,7 @@ sub evaluationsfragen { } #search table content. -sub search_content(){ +sub search_content { my $self = shift; my $dbh = shift || $dbh_intern; my $searchref = shift; @@ -1683,14 +1710,12 @@ sub search_content(){ my $users_dms = shift; my $main_ids = shift || 0; my $tplids = shift || 0; - my $ct_ids = shift || 0; my $v_journal = shift || ""; my $ck4ex = shift || ""; my $table = $node_meta->{ct_table}; $main_ids =~ s/,$//; $tplids =~ s/,$//; - $ct_ids =~ s/,$//; $ck4ex =~ s/\s/,/g; $ck4ex =~ s/,$//; @@ -1706,12 +1731,11 @@ sub search_content(){ my $debug=0; $debug=1; open(FILE,">>$varenv{logdir}/Liste3.log") if($debug); - print FILE "*** $stamp_time Libenzdb.search_content3 ***\n" if($debug); + print FILE "*** $stamp_time search_content3 ***\n" if($debug); print FILE Dumper($searchref) if($debug); - print FILE "$table,$node_meta->{node_name},$owner,$sort_updown,$main_ids,$tplids,$ct_ids,$v_journal,$ck4ex\n" if($debug); + print FILE "$table,$node_meta->{node_name},$owner,$sort_updown,$main_ids,$tplids,$v_journal,$ck4ex\n" if($debug); close(FILE) if($debug); - my $table_pos = $searchref->{table_pos} || ""; my $txt_where; my $cptxt_where; @@ -1726,23 +1750,22 @@ sub search_content(){ $opref->{$key} = "="; ($opref->{$key}, $valref->{$key}) = split(/::/, $searchref->{$key}) if($searchref->{$key} =~ /::/); if($key =~ /table_pos/){ - $table_pos = $valref->{$key}; + $table_pos = $valref->{$key}; } if($key =~ /c_id|int\d+|barcode|time|sort|owner/){ $searchref->{$key} =~ s/,/./g; if($searchref->{$key} =~ /(\<\=|\>\=|\<|\>|\=)/){ - $opref->{$key} = $1; + $opref->{$key} = $1; } if($searchref->{$key} =~ /([-0-9\.]+)/){ - $valref->{$key} = $1; + $valref->{$key} = $1; } if($searchref->{$key} =~ /null/){ - $opref->{$key} = "is"; + $opref->{$key} = "is"; } chomp($valref->{$key}); } $valref->{$key} = $q->escapeHTML($valref->{$key}); - #print $key . ":" . $opref->{$key} . ":" . $valref->{$key} . "\n"; if($table_pos =~ /contentpos|contentadrpos|users/){ if($key =~ /ct_name/){ @@ -1756,46 +1779,36 @@ sub search_content(){ if($key eq "ct_name" && $valref->{$key} =~ /^\d+$/){ $txt_where .= " and (ct.$key ilike '$valref->{$key}' OR ct.barcode $opref->{$key} $valref->{$key})"; }elsif($key eq "ct_name"){ - $txt_where .= " and ct.$key ilike '$valref->{$key}%'"; + $txt_where .= " and ct.$key ilike '$valref->{$key}%'"; }elsif($key =~ /_id|barcode|int\d+|sort|owner/ && (looks_like_number($valref->{$key}) || $valref->{$key} =~ /null|0/)){ $txt_where .= " and ct.$key $opref->{$key} $valref->{$key}"; }elsif($key =~ /txt|uri/){ $txt_where .= " and ct.$key ilike '%$valref->{$key}%'"; }elsif($key eq "state"){ #searchs also order_state - $txt_where .= " and (ct.state ilike '%$valref->{$key}%' OR ct.txt22 ilike '%$valref->{$key}%')"; + $txt_where .= " and (ct.state ilike '%$valref->{$key}%' OR ct.txt22 ilike '%$valref->{$key}%')"; }elsif($key =~ /byte/){ $txt_where .= " and ct.$key = '\\x$valref->{$key}'"; } - - #sum pos doesn't work anymore - #if($key =~ /int01/ && $table eq "contenttrans" && looks_like_number($valref->{$key})){ - #$cpgroup_where .= " group by cp.ct_id HAVING sum(cp.int02) $opref->{$key} $valref->{$key}"; - #} } - #if($key =~ /end_/ && $key =~ /time$/){ - #$valref->{$key} .= " 23:59" if($valref->{$key} !~ /\d:\d/); - #} - - if(!$v_journal){ if($table_pos =~ /contentpos|contentadrpos|users/ && $key =~ /mtime/ && $valref->{$key} =~ /\d+\.\d+\.\d+/){ - $cptxt_where .= " and cp.mtime >= '$valref->{$key}'" if($key =~ /start/); - $cptxt_where .= " and cp.mtime < '$valref->{$key}'" if($key =~ /end/); + $cptxt_where .= " and cp.mtime >= '$valref->{$key}'" if($key =~ /start/); + $cptxt_where .= " and cp.mtime < '$valref->{$key}'" if($key =~ /end/); } elsif($table_pos =~ /contentpos|contentadrpos|users/ && $key eq "template_id_pos" && $valref->{$key}){ - $cptxt_where .= " and cp.template_id = $valref->{$key}"; + $cptxt_where .= " and cp.template_id = $valref->{$key}"; } elsif($key =~ /mtime/ && $valref->{$key} =~ /\d+\.\d+\.\d+/){ - $txt_where .= " and ct.mtime >= '$valref->{$key}'" if($key =~ /start/); - $txt_where .= " and ct.mtime < '$valref->{$key}'" if($key =~ /end/); + $txt_where .= " and ct.mtime >= '$valref->{$key}'" if($key =~ /start/); + $txt_where .= " and ct.mtime < '$valref->{$key}'" if($key =~ /end/); } }elsif($v_journal){ if($key =~ /itime/ && $valref->{$key} =~ /\d+\.\d+\.\d+/){ - $txt_where .= " and ct.itime >= '$valref->{$key}'" if($key =~ /start/); - $txt_where .= " and ct.itime < '$valref->{$key}'" if($key =~ /end/); + $txt_where .= " and ct.itime >= '$valref->{$key}'" if($key =~ /start/); + $txt_where .= " and ct.itime < '$valref->{$key}'" if($key =~ /end/); } if($key =~ /start_mtime/ && $valref->{$key} =~ /^\d+$/){ $txt_where .= " and ct.int11 = '$valref->{$key}'";#int11 = c_id-abschluss key @@ -1822,7 +1835,6 @@ sub search_content(){ } } }# - if($v_journal =~ /Tagesbericht/){ $txt_where .= " and (ct.state ~ '[a-z]') and ct.int01 is not null and ct.close_time is null"; $txt_where .= " and ct.int14 is $opos" if($opos eq "null"); @@ -1838,10 +1850,6 @@ sub search_content(){ $sth = $dbh->prepare("SELECT cp.* FROM contenttranspos cp WHERE cp.ct_id IN (SELECT ct.c_id FROM relation rel, contenttrans ct WHERE rel.content_id=ct.c_id and rel.main_id IN ($main_ids) and rel.template_id IN ($tplids) $txt_where) $cptxt_where ORDER BY cp.$cp_scol $updown"); }elsif($valref->{long_rent} || $valref->{start_date_time} =~ /^\d+\.\d+\.\d+/ || $valref->{end_date_time} =~ /^\d+\.\d+\.\d+/ || $cpgroup_where){ $sth = $dbh->prepare("SELECT * FROM relation rel, $table ct WHERE rel.content_id=ct.c_id and rel.main_id IN ($main_ids) and rel.template_id IN ($tplids) $txt_where and c_id IN (SELECT cp.ct_id from contenttranspos cp WHERE 1=1 $cptxt_where $cpgroup_where) ORDER BY $scol $updown LIMIT $limit OFFSET $offset"); - }elsif($v_journal && $ct_ids){#and executes ct_ids - $ct_ids = 0 if(!$ct_ids); - $sth = $dbh->prepare("SELECT * FROM relation rel, $table ct WHERE rel.content_id=ct.c_id and rel.main_id IN ($main_ids) and rel.template_id IN ($tplids) and rel.content_id IN ($ct_ids) $txt_where ORDER BY $scol $updown LIMIT $limit OFFSET $offset"); - }elsif($table_pos && $table_pos eq "contentpos"){ $sth = $dbh->prepare("SELECT cp.* FROM contentpos cp WHERE cp.cc_id IN (SELECT ct.c_id FROM relation rel, content ct WHERE rel.content_id=ct.c_id and rel.main_id IN ($main_ids) and rel.template_id IN ($tplids) $txt_where) $cptxt_where ORDER BY cp.$scol $updown LIMIT $limit OFFSET $offset"); }elsif($table_pos && $table_pos eq "contentadrpos"){ @@ -1856,7 +1864,6 @@ sub search_content(){ }else{ $sth = $dbh->prepare("SELECT * FROM relation rel, $table ct WHERE rel.content_id=ct.c_id and rel.main_id IN ($main_ids) and rel.template_id IN ($tplids) $txt_where ORDER BY $scol $updown LIMIT $limit OFFSET $offset"); } - my $rc = $sth->execute(); my $s_id = "c_id"; $s_id = "u_id" if($table_pos && $table_pos eq "users"); diff --git a/copri4/main/src/Mod/Indexsharee.pm b/copri4/main/src/Mod/Indexsharee.pm index 1a27b81..cb93069 100755 --- a/copri4/main/src/Mod/Indexsharee.pm +++ b/copri4/main/src/Mod/Indexsharee.pm @@ -38,7 +38,7 @@ sub handler { my $cf = new Config; my $ml = new Mlogic; my $bw = new Basework; - my $tk = new Shareework; + my $shwo = new Shareework; my $dbt = new DBtank; my $apif = new APIfunc; my $but = new Buttons; @@ -195,8 +195,8 @@ sub handler { $apif->authout($q,$coo); #create_account. 2. inserts contentadr - my $tinkc_id = $tk->create_account($aowner); - ($returnwww,$feedb) = $tk->save_account($q,$tinkc_id,\%varenv,$aowner); + my $shareec_id = $shwo->create_account($aowner); + ($returnwww,$feedb) = $shwo->save_account($q,$shareec_id,\%varenv,$aowner); #Like login_sharee, redundant my $hw_id = unpack ('H*', pack('Nc', time, $$ % 0xff));#old $co @@ -218,8 +218,8 @@ sub handler { #if user-pw authorized, then ignore conflict_ because it matches exist user-data #should be result to Uhps page - if($tinkc_id && $returnwww && $returnwww =~ /conflict_txt07|conflict_txt08/){ - $return = $tk->delete_account($tinkc_id,$users_dms->{u_id}); + if($shareec_id && $returnwww && $returnwww =~ /conflict_txt07|conflict_txt08/){ + $return = $shwo->delete_account($shareec_id,$users_dms->{u_id}); $apif->authout($q,$coo) if($coo); print redirect("$varenv{wwwhost}/$varenv{mandant}/Anmelden?conflict_failure=1"); exit 0; @@ -353,9 +353,9 @@ sub handler { my $delete_key = "delete_adr"; $feedb->{message} = "failure::Datensatz wirklich löschen. ::?base_edit=$delete_key\&exit_box2=1\&c_id=$R::c_id ::löschen"; }elsif($R::c_id && $R::base_edit eq "delete_adr"){ - $return = $tk->delete_account($R::c_id,$users_dms->{u_id}); + $return = $shwo->delete_account($R::c_id,$users_dms->{u_id}); }elsif($R::c_id && $R::base_edit eq "save_adr"){ - ($returnwww,$feedb) = $tk->save_account($q,$R::c_id,\%varenv,$users_dms->{u_id}); + ($returnwww,$feedb) = $shwo->save_account($q,$R::c_id,\%varenv,$users_dms->{u_id}); } }else{ $feedb->{message} = "failure::Abbruch. Schreibender Zugriff \"Kunden Stammdaten\" verweigert."; @@ -540,12 +540,15 @@ sub handler { #save_account. 3. updates contentadr if($users_sharee->{c_id} && $R::sharee_edit && $R::sharee_edit =~ /save_account/){ - ($returnwww,$feedb) = $tk->save_account($q,$users_sharee->{c_id},\%varenv,$aowner); + ($returnwww,$feedb) = $shwo->save_account($q,$users_sharee->{c_id},\%varenv,$aowner); } - if($users_sharee->{c_id} && $R::sharee_edit && $R::sharee_edit =~ /save_transact/){ - $returnwww = $tk->save_transact($q,$users_sharee->{c_id},$coo,$aowner); + $returnwww = $shwo->save_transact($q,$users_sharee->{c_id},$coo,$aowner); } + #we do it in PayoneLink.pm + #if($users_sharee->{c_id} && $R::sharee_edit && $R::sharee_edit =~ /generate_payonelink/){ + # $returnwww = $pay->generate_payonelink($q,\%varenv,$users_sharee,$R::prepaid_id,$R::prepaid_amount,$aowner); + #} if($returnwww && $returnwww =~ /failure::(.*)/){ $returnwww =~ s/::/=/g; @@ -554,10 +557,8 @@ sub handler { if($returnwww =~ /txt22|txt23/){ #should be result to Uhps page if($returnwww =~ /conflict_txt22/){ - $return = $tk->delete_account($users_sharee->{c_id},$users_dms->{u_id}); - $apif->authout($q,$coo) if($coo); - print redirect("$varenv{wwwhost}/$varenv{mandant}/Anmelden?conflict_failure=1$session_and"); - exit 0; + print redirect("$varenv{wwwhost}/$varenv{mandant}/Account/$varenv{accounting_2}?cum=1\&conflict_failure=1$session_and\&$returnwww"); + exit 0; } print redirect("$varenv{wwwhost}/$varenv{mandant}/Account/$varenv{accounting_2}?cum=1$session_and\&$returnwww"); }elsif($returnwww =~ /int03/){ @@ -586,7 +587,6 @@ sub handler { print FILE "$_=$val\n"; $payone_return .= "$_=$val\n";# if($_ =~ /error|message/i); } - close(FILE); my $update_adr = { table => "contentadr", @@ -637,10 +637,10 @@ sub handler { #int12=0 should be set after capture success in payment module if(($users_sharee->{int04} != 1) && ($users_sharee->{txt08} =~ /\w\@\w/)){ - $tk->emailack(\%varenv,$users_sharee->{c_id}); + $shwo->emailack(\%varenv,$users_sharee->{c_id}); } if(($users_sharee->{int13} != 1) && ($users_sharee->{txt07} =~ /\d{9}/ && length($users_sharee->{txt07}) <= 16)){ - $tk->smsack($users_sharee); + $shwo->smsack($users_sharee); } close(FILE) if($debug); }else{ @@ -657,6 +657,9 @@ sub handler { $dbt->update_record($dbh,$update_adr,$users_sharee) if($users_sharee->{c_id} > 0); $dbt->update_operatorsloop($varenv{dbname},$users_sharee->{c_id},"update"); } + + print FILE Dumper($update_adr) . "\n" if($debug); + close(FILE); }#end payone response with pseudocardpan } @@ -668,10 +671,10 @@ sub handler { print FILE "trigger confirm-code request by $R::sharee_edit\n" if($debug); if(($users_sharee->{int04} != 1 && $R::sharee_edit =~ /send_email/) && ($users_sharee->{txt08} =~ /\w\@\w/)){ - $tk->emailack(\%varenv,$users_sharee->{c_id}); + $shwo->emailack(\%varenv,$users_sharee->{c_id}); } if(($users_sharee->{int13} != 1 && $R::sharee_edit =~ /send_sms/) && ($users_sharee->{txt07} =~ /\d{9}/ && length($users_sharee->{txt07}) <= 16)){ - $tk->smsack($users_sharee); + $shwo->smsack($users_sharee); } close(FILE) if($debug); }#send confirm code @@ -771,7 +774,7 @@ sub handler { if($R::email && $R::sharee_edit =~ /password_forgotten/){ my $hw_id = unpack ('H*', pack('Nc', time, $$ % 0xff));#old $co - $tk->send_password(\%varenv,$R::email,$hw_id,$aowner); + $shwo->send_password(\%varenv,$R::email,$hw_id,$aowner); } #redirections diff --git a/copri4/main/src/Mod/Libenz.pm b/copri4/main/src/Mod/Libenz.pm index 549ba15..d5e0982 100755 --- a/copri4/main/src/Mod/Libenz.pm +++ b/copri4/main/src/Mod/Libenz.pm @@ -18,7 +18,6 @@ use CGI::Carp qw(fatalsToBrowser); use Calendar::Simple; use Date::Calc qw(:all); use Mod::Callib; -use Mod::Libenzdb; use Mod::Buttons; use Lib::Config; use Scalar::Util qw(looks_like_number); @@ -26,7 +25,6 @@ use Scalar::Util qw(looks_like_number); my $cf = new Config; my $cb = new Callib; my $but = new Buttons; -my $db = new Libenzdb; my $q = new CGI; #my $pi = new Image::Magick; diff --git a/copri4/main/src/Mod/Libenzdb.pm b/copri4/main/src/Mod/Libenzdb.pm deleted file mode 100755 index 6707e39..0000000 --- a/copri4/main/src/Mod/Libenzdb.pm +++ /dev/null @@ -1,2181 +0,0 @@ -package Libenzdb; -# -#Deprecated module, please use DBtank.pm -# -# SPDX-License-Identifier: AGPL-3.0-or-later -# Copyright (c) Rainer Gümpelein, TeilRad GmbH -# -#uncomment for perl -cw src/Mod/Libenzdb.pm -#use lib qw(/var/www/copri4/main/src); -# -use strict; -use warnings; -use POSIX; -use DBI; -use CGI; -use CGI ':standard'; -use Text::CSV_XS; -use Spreadsheet::WriteExcel; -use Lib::Config; -use Scalar::Util qw(looks_like_number); -use Digest::MD5 qw(md5 md5_hex); -use Date::Calc qw(check_date); -use Mod::DBtank; -use Data::Dumper; - - -my $cf = new Config; -my $dbt = new DBtank; -my $q = new CGI; -$q->import_names('R'); - -sub new { - my $class = shift; - my $self = {}; - bless($self,$class); - return $self; -} - -my $today = strftime("%d.%m.%Y",localtime(time)); -my $date_time = strftime("%d.%m.%Y %H:%M",localtime(time)); -my %varenv = $cf->envonline(); - -my $dbh = $dbt->dbconnect(); - -sub dbdisconnect { - my $self = shift; - $dbh->disconnect; - return; -} - - -#get table column info -sub table_info(){ - my $self = shift; - my ($table,$dbinit) = @_; - $dbh = $dbt->dbconnect() if($dbinit);#because of ajax - my $sth = $dbh->prepare("SELECT attnum,attname FROM pg_class c join pg_attribute a on c.oid = a.attrelid WHERE c.relname = '$table' AND a.attnum >= 0;"); - my $rc = $sth->execute(); - my $column = $sth->fetchall_hashref("attnum"); - $sth->finish; - $dbh->disconnect if($dbinit); - return $column; -} - -# new node -sub insert_node(){ - my $self = shift; - my ($parent_id,$main_id,$node_name,$lang,$sort,$template_id,$c_id,$owner) = @_; - - my $node_path = $node_name; - #für sub-menü hack - $node_path =~ s/\!/\//; - $node_name =~ s/\!.*//; - #split name path - ($node_name,$node_path) = split(/\?/,$node_name) if($node_name =~ /\?/); - - $template_id = "0" if(!$template_id); - $c_id = "0" if(!$c_id); - $sort = "0" if(!$sort); - $owner = "0" if(!$owner); - my ($sth2,$rc); - $sth2 = $dbh->prepare("INSERT INTO nodes (main_id,parent_id,lang,node_name,node_path,n_sort,owner) VALUES('$main_id','$parent_id','$lang',trim('$node_name'),trim('$node_path'),'$sort','$owner')"); - $rc = $sth2->execute(); - $sth2 = $dbh->prepare("INSERT INTO relation (main_id,template_id,content_id,lang,change) VALUES('$main_id','$template_id','$c_id','$lang','now()') RETURNING rel_id"); - $rc = $sth2->execute(); - - my $last_id; - $sth2->bind_columns(\$last_id); - my $rel_id = $sth2->fetchrow_array(); - - return $rel_id; -} -########################## - - -# get next free node -sub get_freenode(){ - my $self = shift; - my $prefix_id = shift; - my $s_id = "$prefix_id"; - my $e_id = "$prefix_id"; - $s_id .= "00001"; - $e_id .= "99999"; - my $main_id; - #print "$s_id - $e_id"; - for (my $x_id=$s_id; $x_id < $e_id; $x_id++){ - my $sth1 = $dbh->prepare("SELECT main_id from nodes where main_id='$x_id'"); - my $rc1 = $sth1->execute(); - $main_id = $sth1->fetchrow_array(); - if(!$main_id){ - #print "$x_id"; - return $x_id; - } - } -} -# - -# get next free template id -sub get_freetpl(){ - my $self = shift; - my ($s_id,$e_id) = @_; - my $tpl_id; - for (my $x_id=$s_id; $x_id < $e_id; $x_id++){ - my $sth1 = $dbh->prepare("SELECT tpl_id from template where tpl_id='$x_id'"); - my $rc1 = $sth1->execute(); - $tpl_id = $sth1->fetchrow_array(); - if(!$tpl_id){ - return $x_id; - } - } -} -# - - -# Delete node and relation! (without content) -sub delete_node(){ - my $self = shift; - my ($main_id,$lang) = @_; - my $sth = $dbh->prepare("DELETE FROM relation WHERE main_id='$main_id' and lang='$lang' and content_id='0'"); - my $rc = $sth->execute(); - $sth = $dbh->prepare("DELETE FROM nodes WHERE main_id='$main_id' and lang='$lang'"); - $rc = $sth->execute(); - #$dbh->commit or die $dbh->errstr; - $sth->finish(); - return $rc; -} - -#all nodes -sub collect_node4all(){ - my $self = shift; - my ($main_id,$lang,$u_id,$min_main_id,$max_main_id) = @_; - my $where = "where 1=1"; - #$where .= " and node_public='1'" if(!$u_id && $varenv{mlogic} eq "web"); - $where .= " and parent_id = '$main_id'" if($main_id); - $where .= " and main_id >= '$min_main_id'" if($min_main_id); - $where .= " and main_id <= '$max_main_id'" if($max_main_id); - my $sth = $dbh->prepare("SELECT * FROM nodes $where"); - my $rc = $sth->execute(); - my $nodes = $sth->fetchall_hashref("n_id"); - $sth->finish; - return $nodes; -} - -# Nodes einer Ebene -sub collect_node(){ - my $self = shift; - my ($main_id,$lang,$u_id,$dbinit) = @_; - $dbh = $dbt->dbconnect() if($dbinit); - my $where = ""; - #$where = " and node_public='1'" if(!$u_id && $varenv{mlogic} eq "web"); - my $sth = $dbh->prepare("SELECT * FROM nodes WHERE parent_id='$main_id' and lang='$lang' $where"); - my $rc = $sth->execute(); - my $nodes = $sth->fetchall_hashref("main_id"); - $sth->finish; - $dbh->disconnect if($dbinit); - return $nodes; -} - -# Nodes with relation -sub collect_noderel(){ - my $self = shift; - my ($main_id,$lang,$u_id,$dbinit) = @_; - $dbh = $dbt->dbconnect() if($dbinit); - my $where=""; - #$where = " and nd.node_public='1'" if(!$u_id && $varenv{mlogic} eq "web"); - my $sth = $dbh->prepare("SELECT * FROM nodes nd, relation rel WHERE nd.main_id=rel.main_id and nd.parent_id='$main_id' and nd.lang='$lang' and rel.content_id=0 $where"); - my $rc = $sth->execute(); - my $nodes = $sth->fetchall_hashref("main_id"); - $sth->finish; - $dbh->disconnect if($dbinit); - return $nodes; -} - - -# Nodes recursive -sub collect_noderec(){ - my $self = shift; - my ($main_id,$lang,$excluded,$u_id,$hashref) = @_; - $main_id =~ s/,$//; - my $main_ids = "$main_id,"; - my $main_ids_ref; - my $main_collect = &collect_node("",$main_id,$lang,$u_id,"",""); - if(ref($main_collect) eq "HASH"){ - #$main_ids_ref = { $main_collect }; - foreach my $id (keys (%$main_collect)){ - if($main_collect->{$id}->{node_name} !~ /$excluded/){ - $main_ids .= "$main_collect->{$id}->{main_id},"; - #print "$main_id:$main_collect->{$id}->{main_id}
"; - my $main_collect2 = &collect_node("",$main_collect->{$id}->{main_id},$lang,$u_id,"") if($main_collect->{$id}->{main_id}); - if(ref($main_collect2) eq "HASH"){ - #$main_ids_ref = { $main_collect, $main_collect2 }; - foreach my $id (keys (%$main_collect2)){ - $main_ids .= "$main_collect2->{$id}->{main_id},"; - my $main_collect3 = &collect_node("",$main_collect2->{$id}->{main_id},$lang,$u_id,"") if($main_collect2->{$id}->{main_id}); - if(ref($main_collect3) eq "HASH"){ - #$main_ids_ref = { $main_collect, $main_collect2, $main_collect3 }; - foreach my $id (keys (%$main_collect3)){ - $main_ids .= "$main_collect3->{$id}->{main_id},"; - } - } - } - } - } - } - } - $main_ids =~ s/,$//; - if($hashref){#disabled and never uesd - return $main_ids_ref; - }else{ - return $main_ids; - } -} - -# Nodes -sub collect_node2(){ - my $self = shift; - my $main_ids = shift; - $main_ids =~ s/,$//; - my $sth = $dbh->prepare("SELECT * FROM nodes WHERE main_id IN ($main_ids)"); - my $rc = $sth->execute(); - my $nodes = $sth->fetchall_hashref("main_id"); - $sth->finish; - return $nodes; -} - -# Nodes with variable -sub collect_node3(){ - my $self = shift; - my ($column1,$op1,$content1,$column2,$op2,$content2,$main_ids) = @_; - $main_ids =~ s/,$//; - my $where = "$column1 $op1 '$content1'"; - $where .= " and $column2 $op2 '$content2'" if($content2); - $where .= " and main_id IN ($main_ids)"; - my $sth = $dbh->prepare("SELECT * FROM nodes WHERE $where"); - my $rc = $sth->execute(); - my $nodes = $sth->fetchall_hashref("main_id"); - $sth->finish; - return $nodes; -} - -# Nodes Anhand der main_id -sub get_node4all(){ - my $self = shift; - my ($main_id) = @_; - my $sth = $dbh->prepare("SELECT * FROM nodes WHERE main_id='$main_id'"); - my $rc = $sth->execute(); - my $nodes = $sth->fetchall_hashref("lang"); - $sth->finish; - return $nodes; -} - -# Node Anhand der main_id für multilang -sub get_node4multi(){ - my $self = shift; - my ($main_id,$lang,$owner,$parent_id,$dbinit) = @_; - $dbh = $dbt->dbconnect() if($dbinit); - $owner=0 if(!$owner); - my $sel=""; - $sel .= " and owner='$owner'" if($owner > 0); - $sel .= " and parent_id='$parent_id'" if($parent_id && $parent_id =~ /^\d+$/ && $parent_id > 0); - $sel .= " order by parent_id $parent_id" if($parent_id && $parent_id =~ /ASC|DESC/);#workaround Verleihräder - my $sth = $dbh->prepare("SELECT * FROM nodes WHERE main_id='$main_id' and lang='$lang' $sel"); - my $rc = $sth->execute(); - my $node = $sth->fetchrow_hashref(); - $dbh->disconnect if($dbinit); - return $node; -} - - -# get child node -sub get_subnode(){ - my $self = shift; - my ($main_id,$lang,$n_sort) = @_; - my $where; - $where = "and n_sort = '$n_sort'" if($n_sort); - my $sth = $dbh->prepare("SELECT * FROM nodes WHERE parent_id='$main_id' and lang='$lang' $where"); - my $rc = $sth->execute(); - my $node = $sth->fetchrow_hashref(); - return $node; -} - - -# Node Anhand des node_name und parent_id -sub get_nodeset(){ - my $self = shift; - my ($parent_id,$node_name,$lang,$dbinit) = @_; - $dbh = $dbt->dbconnect() if($dbinit); - $node_name = $q->escapeHTML($node_name); - my $sel_node_name; - $sel_node_name = "and (nodes.node_path='$node_name' OR nodes.node_name='$node_name')" if($node_name); - my $sth = $dbh->prepare("SELECT * FROM nodes, relation WHERE nodes.main_id=relation.main_id $sel_node_name and nodes.lang='$lang' and nodes.parent_id='$parent_id'"); - my $rc = $sth->execute(); - my $node = $sth->fetchrow_hashref(); - $dbh->disconnect if($dbinit); - return $node; -} - -# Node Anhand des node_name and parent_id -sub get_node(){ - my $self = shift; - my ($node_name,$lang,$operator,$parent_id) = @_; - #print "($node_name,$lang,$operator,$parent_id)"; - $node_name = $q->escapeHTML($node_name); - my $where = "lang='$lang'"; - $where .= " and parent_id $operator '$parent_id'" if($parent_id); - my $sth = $dbh->prepare("SELECT * FROM nodes WHERE (node_path='$node_name' OR node_name='$node_name') and $where"); - #print "SELECT * FROM nodes WHERE (node_path='$node_name' OR node_name='$node_name') and $where"; - my $rc = $sth->execute(); - my $node = $sth->fetchrow_hashref(); - return $node; -} - -# Node main_id and template_id and node_name -sub get_node4rel(){ - my $self = shift; - my ($main_id,$template_id,$node_name,$content_id) = @_; - my $where = "no.main_id=rel.main_id"; - $where .= " and rel.template_id=$template_id" if($template_id); - $where .= " and no.main_id=$main_id" if($main_id); - $where .= " and no.node_name ilike '$node_name'" if($node_name); - $where .= " and no.node_public = '1'" if($varenv{wwwhost} =~ /tinkdms/); - $where .= " and rel.content_id = '0'" if($content_id eq "null"); - my $sth = $dbh->prepare("SELECT * FROM nodes no, relation rel WHERE $where "); - my $rc = $sth->execute(); - my $node = $sth->fetchrow_hashref(); - return $node; -} - - -# Node Anhand des node_name und parent-node_name -sub get_node2(){ - my $self = shift; - my ($parentsel,$node_name,$lang) = @_; - $node_name = $q->escapeHTML($node_name); - my $sth = $dbh->prepare("SELECT * FROM nodes WHERE (node_path='$node_name' OR node_name='$node_name') and lang='$lang' and parent_id IN (SELECT main_id from nodes where (node_path='$parentsel' OR node_name='$parentsel') and lang='$lang')"); - my $rc = $sth->execute(); - my $node = $sth->fetchrow_hashref(); - return $node; -} -# Node Anhand des node_name und parent_id -sub get_node3(){ - my $self = shift; - my ($parent_id,$node_name,$lang) = @_; - my $sth = $dbh->prepare("SELECT * FROM nodes WHERE node_name='$node_name' and lang='$lang' and parent_id='$parent_id'"); - my $rc = $sth->execute(); - my $node = $sth->fetchrow_hashref(); - return $node; -} - -# all templates -sub collect_tpl(){ - my $self = shift; - my ($tpl_ids,$key) = @_; - my $where = "where tpl_id != 98 and tpl_id != 97";#without meta-Config and EditNode - $where .= " and tpl_id IN ($tpl_ids)" if($tpl_ids); - $where .= " and tpl_order like '%$key%'" if($key); - my $sth = $dbh->prepare("SELECT * FROM template $where"); - my $rc = $sth->execute(); - my $tpl_all = $sth->fetchall_hashref("tpl_id"); - $sth->finish; - return $tpl_all; -} - -# get template row -sub get_tpl(){ - my $self = shift; - my ($template_id) = @_; - $template_id= 0 if(!$template_id); - my $sth = $dbh->prepare("SELECT * FROM template WHERE tpl_id='$template_id'"); - my $rc = $sth->execute(); - my $tpl = $sth->fetchrow_hashref(); - return $tpl; -} - -# get template row -sub get_tpl2(){ - my $self = shift; - my ($tpl_name) = @_; - my $sth = $dbh->prepare("SELECT * FROM template WHERE tpl_name='$tpl_name'"); - my $rc = $sth->execute(); - my $tpl = $sth->fetchrow_hashref(); - return $tpl; -} - - - -# get all relation from main_id -sub get_rel4all(){ - my $self = shift; - my ($main_id) = @_; - my $sth = $dbh->prepare("SELECT * FROM relation WHERE main_id='$main_id'"); - my $rc = $sth->execute(); - my $rel = $sth->fetchall_hashref("lang"); - $sth->finish; - return $rel; -} - - -# get relation row -sub get_relation(){ - my $self = shift; - my ($main_id,$lang,$rel_id) = @_; - my $where = "1=1"; - $where .= " and main_id='$main_id' and lang='$lang'" if($main_id); - $where .= " and rel_id='$rel_id'" if($rel_id); - my $sth = $dbh->prepare("SELECT * FROM relation WHERE $where"); - my $rc = $sth->execute(); - my $rel = $sth->fetchrow_hashref(); - return $rel; -} - -#NO isnt't consistent, because of after delete, we need a empty relation -#get empty relation row -sub get_rel4empty(){ - my $self = shift; - my ($main_id,$lang,$content_id,$template_id) = @_; - my $where = "main_id='$main_id' and lang='$lang'"; - $where .= " and (content_id = '0' OR content_id is null)"; - $where .= " and template_id='$template_id'" if($template_id > 0); - my $sth = $dbh->prepare("SELECT * FROM relation WHERE $where"); - my $rc = $sth->execute(); - my $rel = $sth->fetchrow_hashref(); - return $rel; -} - - - -# get relation with template -sub get_rel4tpl(){ - my $self = shift; - my ($main_id,$lang,$content_id,$template_id,$ascdesc,$rel_id,$realct) = @_; - $content_id=0 if(!$content_id); - my $where = "WHERE relation.template_id=template.tpl_id and lang='$lang'"; - $where .= " and relation.main_id='$main_id'" if($main_id > 0); - $where .= " and relation.content_id='$content_id'" if($content_id > 0); - $where .= " and relation.template_id='$template_id'" if($template_id > 0); - $where .= " and relation.rel_id='$rel_id'" if($rel_id > 0); - $where .= " and content_id $realct" if($realct);# MandantConf >0 - $where .= " order by content_id $ascdesc" if($ascdesc); - my $sth = $dbh->prepare("SELECT * FROM relation,template $where"); - my $rc = $sth->execute(); - my $rel = $sth->fetchrow_hashref(); - return $rel; -} - -# get relation, template, nodes -sub get_rel4tpl4nd(){ - my $self = shift; - my ($main_id,$lang,$content_id,$template_id,$ascdesc,$rel_id) = @_; - $content_id=0 if(!$content_id); - my $where = "WHERE nodes.main_id=relation.main_id and relation.template_id=template.tpl_id"; - $where .= " and relation.main_id='$main_id'" if($main_id > 0); - $where .= " and relation.content_id='$content_id'" if($content_id > 0); - $where .= " and relation.template_id='$template_id'" if($template_id > 0); - $where .= " and relation.rel_id='$rel_id'" if($rel_id > 0); - $where .= " order by content_id $ascdesc" if($ascdesc); - my $sth = $dbh->prepare("SELECT * FROM relation,template,nodes $where"); - my $rc = $sth->execute(); - my $rel = $sth->fetchrow_hashref(); - return $rel; -} - - - -# get content based by owner -sub get_content4owner(){ - my $self = shift; - my ($table,$owner) = @_; - my $where = "WHERE owner='$owner'"; - my $sth = $dbh->prepare("SELECT * FROM $table $where"); - my $rc = $sth->execute(); - my $rel = $sth->fetchrow_hashref(); - return $rel; -} - -# delete relation (without node) -sub delete_relation(){ - my $self = shift; - my ($main_id,$lang,$rel_id) = @_; - my $sth = $dbh->prepare("DELETE FROM relation WHERE main_id='$main_id' and lang='$lang' and rel_id='$rel_id'"); - my $rc = $sth->execute(); - $sth->finish(); - return $rc; -} - -# delete template (without node) -sub delete_template(){ - my $self = shift; - my ($tpl_id) = @_; - my $sth = $dbh->prepare("DELETE FROM template WHERE tpl_id='$tpl_id'"); - my $rc = $sth->execute(); - $sth->finish(); - return $rc; -} - -# insert relation -sub insert_relation(){ - my $self = shift; - my ($table,$main_id,$lang,$c_id,$tpl_id,$offer_id) = @_; - my $foreign_key=""; - my $foreign_id = $c_id;#alle bis auf offer - $foreign_key = "cc_id" if("$table" eq "content"); - $foreign_key = "cp_id" if("$table" eq "contentpers"); - $foreign_key = "cu_id" if("$table" eq "contentuser"); - $foreign_key = "co_id" if("$table" eq "offer"); - $foreign_id = 0 if(!$c_id); - $foreign_id = $offer_id if("$table" eq "offer"); - $c_id = 0 if(!$c_id); - $offer_id = 0 if(!$offer_id); - $tpl_id = 0 if(!$tpl_id); - my $sth = $dbh->prepare("INSERT INTO relation ($foreign_key,main_id,content_id,offer_id,template_id,lang,change) VALUES('$foreign_id','$main_id','$c_id','$offer_id','$tpl_id','$lang','now()') RETURNING rel_id"); - my $rows = $sth->execute(); - - my $last_id; - $sth->bind_columns(\$last_id); - my $rel_id = $sth->fetchrow_array(); - - return $rel_id; -} - -# insert relationlist for multi relation in listing mode -sub insert_relationlist(){ - my $self = shift; - my ($table,$main_id,$lang,$c_id,$tpl_id,$foreign_key,$dbinit) = @_; - $dbh = $dbt->dbconnect() if($dbinit);#because of ajax - $c_id = 0 if(!$c_id); - $tpl_id = 0 if(!$tpl_id); - my $sth = $dbh->prepare("INSERT INTO relation (main_id,content_id,$foreign_key,template_id,lang,change) VALUES('$main_id','$c_id','$c_id','$tpl_id','$lang','now()') RETURNING rel_id"); - my $rows = $sth->execute(); - - my $last_id; - $sth->bind_columns(\$last_id); - my $rel_id = $sth->fetchrow_array(); - - $dbh->disconnect if($dbinit); - return $rel_id; -} - -# obsolet -# update relation -sub update_relation(){ - my $self = shift; - my ($main_id,$lang,$new_main_id,$template_id,$c_id,$rel_id,$foreign_key) = @_; - my $foreign_id = $c_id; - $foreign_id = 0 if(!$c_id); - $c_id = 0 if(!$c_id); - my $rel_set = "change='now()'"; - $rel_set .= ",main_id='$new_main_id'" if($new_main_id); - $rel_set .= ",template_id='$template_id'" if($template_id =~ /\d/); - $rel_set .= ",content_id='$c_id'" if($c_id =~ /\d/); - $rel_set .= ",$foreign_key='$foreign_id'" if($foreign_key && $foreign_id); - $rel_set .= ",template_id='0'" if(!$template_id); - $rel_set .= ",content_id='0'" if(!$c_id); - - my $where = "where main_id='$main_id' and lang='$lang' and rel_id='$rel_id'"; - my $sth = $dbh->prepare("UPDATE relation SET $rel_set $where"); - my $rows = $sth->execute(); - return $rows; -} - -sub update_relation2(){ - my $self = shift; - my ($main_id,$lang,$new_main_id,$new_template_id,$rel_id,$dbinit) = @_; - $dbh = $dbt->dbconnect() if($dbinit);#because of ajax - my $rel_set = "change='now()'"; - $rel_set .= ",main_id='$new_main_id'" if($new_main_id); - $rel_set .= ",template_id='$new_template_id'" if($new_template_id); - my $where = "where lang='$lang' and rel_id='$rel_id'"; - $where .= " and main_id='$main_id'" if($main_id); - my $sth = $dbh->prepare("UPDATE relation SET $rel_set $where"); - my $rows = $sth->execute(); - $dbh->disconnect if($dbinit); - return $rows; -} - -#change all relations of main_id (maybe changeing template ore node) -sub update_relation3(){ - my $self = shift; - my ($main_id,$lang,$new_main_id,$template_id) = @_; - my $rel_set = "change='now()'"; - $rel_set .= ",main_id='$new_main_id'" if($new_main_id); - $rel_set .= ",template_id='$template_id'" if($template_id =~ /\d/); - my $where = "where lang='$lang' and main_id='$main_id'"; - my $sth = $dbh->prepare("UPDATE relation SET $rel_set $where"); - my $rows = $sth->execute(); - return $rows; -} - - -sub update_users4trans(){ - my $self = shift; - my ($c_id4trans,$tpl_id4trans,$kind_of_trans,$u_id) = @_; - my $sth = $dbh->prepare("UPDATE users SET - c_id4trans='$c_id4trans', - tpl_id4trans='$tpl_id4trans' - where u_id=$u_id"); - my $rows = $sth->execute(); - return $rows; -} - -sub cleanup_users(){ - my $self = shift; - my $u_id = shift; - my $sth = $dbh->prepare("UPDATE users SET - c_id4trans='0', - tpl_id4trans='0' - where u_id=$u_id"); - my $rows = $sth->execute(); - return $rows; -} - -# final users_update -sub users_up(){ - my $self = shift; - my ($column,$value,$u_id) = @_; - #if($value){ - my $sth = $dbh->prepare("UPDATE users SET $column='$value' where u_id='$u_id'"); - my $rows = $sth->execute(); - return $rows; - #} -} - -# all content -sub collect_content(){ - my $self = shift; - my $sth = $dbh->prepare("SELECT c_id,ct_name FROM content"); - my $rc = $sth->execute(); - my $ct_all = $sth->fetchall_hashref("c_id"); - $sth->finish; - return $ct_all; -} - -# all content or tt_news_cat -sub collect_content2(){ - my $self = shift; - my ($table,$column,$content,$id_key) = @_; - $id_key="c_id" if(!$id_key); - my $sel=""; - $sel = "where $column='$content'" if($content); - my $sth = $dbh->prepare("SELECT * FROM $table $sel"); - my $rc = $sth->execute(); - my $ct_all = $sth->fetchall_hashref("$id_key"); - $sth->finish; - return $ct_all; -} - -# all content, mainly used by get_freenr -sub collect_content3(){ - my $self = shift; - my ($table,$column,$content,$key) = @_; - $key = "barcode" if(!$key); - my $where; - $where = "where $column = '$content'" if($content); - my $sth = $dbh->prepare("SELECT * FROM $table $where"); - my $rc = $sth->execute(); - my $ct_all = $sth->fetchall_hashref("$key"); - $sth->finish; - return $ct_all; -} - - -#collect relation nodes -sub collect_rel4nodes(){ - my $self = shift; - my ($main_ids,$content_id,$template_id,$key) = @_; - my $where; - $where .= " and parent_id IN ($main_ids)" if($main_ids); - if($content_id =~ /\d\s\d/){ - $content_id =~ s/\s/,/g; - $where .= " and rel.content_id IN ($content_id)"; - }elsif($content_id){ - $where .= " and rel.content_id='$content_id'"; - } - $where .= " and rel.template_id='$template_id'" if($template_id); - my $sth = $dbh->prepare("SELECT * FROM relation rel, nodes nd where rel.main_id=nd.main_id $where"); - my $rc = $sth->execute(); - $key = "main_id" if(!$key); - my $rel4nd = $sth->fetchall_hashref("$key"); - $sth->finish; - return $rel4nd; -} - -#collect relation templates -sub collect_rel4tpl(){ - my $self = shift; - my ($main_id) = @_; - my $where; - $where .= " and rel.main_id='$main_id'" if($main_id); - my $sth = $dbh->prepare("SELECT * FROM relation rel, template tpl where rel.template_id=tpl.tpl_id $where"); - my $rc = $sth->execute(); - my $rel4tpl = $sth->fetchall_hashref("main_id"); - $sth->finish; - return $rel4tpl; -} - -# all content4relation -sub collect_ct4rel(){ - my $self = shift; - my ($table,$main_ids,$lang,$scol,$offset,$limit,$sort4edit,$tplids,$relids,$sort_updown,$content_ids,$id) = @_; - $main_ids =~ s/,$//; - $tplids =~ s/,$//; - $relids =~ s/,$//; - $content_ids =~ s/,$//; - my $updown = "ASC"; - $updown = "DESC" if($sort_updown eq "down"); - - my $where; - if($relids =~ /\d/){ - $where .= " and rel.rel_id IN ($relids)"; - }elsif($table eq "contenttrans"){ - $where .= " and ct.close_time is null"; - } - #$where .= " and rel.main_id='$main_id'" if($main_id); - $where .= " and rel.main_id IN ($main_ids)" if($main_ids); - $where .= " and rel.template_id IN ($tplids)" if($tplids =~ /\d/); - $where .= " and rel.content_id IN ($content_ids)" if($content_ids =~ /\d/); - $where .= " and sort like '$sort4edit%'" if($sort4edit); - $where .= " ORDER BY $scol $updown" if($scol); - $where .= " LIMIT $limit" if($limit); - $where .= " OFFSET $offset" if($offset); - my $sth = $dbh->prepare("SELECT * FROM $table ct, relation rel where ct.c_id=rel.content_id and rel.lang='$lang' $where"); - my $rc = $sth->execute(); - $id = "c_id" if(!$id); - my $ct4rel = $sth->fetchall_hashref("$id"); - $sth->finish; - return $ct4rel; -} - -# all content4relation for main_ids -sub collect_ct4rel2(){ - my $self = shift; - my ($table,$main_ids,$lang,$scol,$offset,$limit,$owner,$id,$u_id,$trader) = @_; - $main_ids =~ s/,$//; - my $where; - $where = " and ct.close_time is null" if($table eq "contenttrans"); - $where .= " and ct.owner = '$owner'" if($owner); - $where = " and ct.trader = '$trader'" if($trader); - #$where .= " and ct.content_public = '1'" if($u_id !~ /\d|always_public/); - $where .= " and ct.content_public = '1'" if($u_id == 0 || $u_id !~ /\d/); - if($scol && $limit){ - $where .= " ORDER BY $scol LIMIT $limit OFFSET $offset"; - }elsif($scol){ - $where .= " ORDER BY $scol"; - } - my $sth = $dbh->prepare("SELECT * FROM $table ct, relation rel where ct.c_id=rel.content_id and rel.main_id IN ($main_ids) $where"); - my $rc = $sth->execute(); - $id="c_id" if(!$id); - #$id="rel_id" if(!$id && $varenv{mlogic} eq "web"); #impliziert mehrfach-einträge, siehe Kacheln - #$id="main_id" if($varenv{mlogic} eq "web"); - my $ct4rel = $sth->fetchall_hashref("$id"); - $sth->finish; - return $ct4rel; -} - - -# all content4relation with optional c_ids and operator -sub collect_ct4rel3(){ - my $self = shift; - my ($table,$column1,$content1,$op2,$column2,$content2,$tpl_ids,$c_ids,$id) = @_; - $tpl_ids =~ s/,$//; - $c_ids =~ s/,$//; - my $where="where ct.c_id=rel.content_id"; - if($content1 =~ /\d+,\d+/){ - $where .= " and rel.$column1 IN ($content1)"; - }elsif($content1){ - $where .= " and rel.$column1='$content1'"; - } - if("$content2" || "$content2" eq "0"){ - $where .= " and ct.$column2 $op2 $content2" if($column2 =~ /int/); - $where .= " and ct.$column2 $op2 '$content2'" if($column2 !~ /int/); - } - $where .= " and rel.template_id IN ($tpl_ids)" if($tpl_ids); - $where .= " and ct.c_id IN ($c_ids)" if($c_ids); - my $sth = $dbh->prepare("SELECT * FROM $table ct, relation rel $where"); - my $rc = $sth->execute(); - $id="c_id" if(!$id); - my $ct_all = $sth->fetchall_hashref($id); - $sth->finish; - return $ct_all; -} - -# all content + relation + nodes -sub collect_ct4rel4nd(){ - my $self = shift; - my ($table,$main_ids,$lang,$scol,$offset,$limit,$colname,$colval,$tpl_ids,$rel_ids,$id,$parent_id) = @_; - $tpl_ids =~ s/,$//; - $main_ids =~ s/,$//; - $rel_ids =~ s/,$//; - my $where; - if($colname && $colname =~ /int/ && $colval eq "null"){ - $where .= " and $colname is $colval"; - }elsif($colname && $colval){ - $where .= " and $colname = '$colval'"; - } - $where .= " and rel.template_id IN ($tpl_ids)" if($tpl_ids); - $where .= " and rel.main_id IN ($main_ids)" if($main_ids); - $where .= " and nd.parent_id = '$parent_id'" if($parent_id); - $where .= " and rel.rel_id IN ($rel_ids)" if($rel_ids); - $where .= " and nd.node_public='1'" if($varenv{wwwhost} =~ /k9/); - - my $scol_table = "ct"; - $scol_table = "nd" if($scol eq "n_sort"); - if($scol && $limit){ - $where .= " ORDER BY $scol_table.$scol LIMIT $limit OFFSET $offset"; - }elsif($scol){ - $where .= " ORDER BY $scol_table.$scol"; - } - my $sth = $dbh->prepare("SELECT * FROM $table ct, relation rel, nodes nd where ct.c_id=rel.content_id and nd.main_id=rel.main_id $where"); - my $rc = $sth->execute(); - my $ct4rel = $sth->fetchall_hashref("$id"); - $sth->finish; - return $ct4rel; -} - - -#collect content with contenttranspos by c.c_id... -sub collect_postime(){ - my $self = shift; - my ($table,$start_date_time,$end_date_time,$start_date2,$end_date2) = @_; - $start_date_time =~ s/,/./g; - $end_date_time =~ s/,/./g; - my $where = "where cp.cc_id=c.c_id"; - $where .= " and cp.start_time >= $start_date_time"; - $where .= " and cp.end_time <= $end_date_time"; - $where .= " and (cp.start_time >= '$start_date2' OR cp.end_time >= '$start_date2')" if($start_date2 && $end_date2); - my $sth = $dbh->prepare("SELECT cp.* from content c, $table cp $where order by cp.end_time"); - my $rc = $sth->execute(); - my $ct = $sth->fetchall_hashref("cc_id"); - $sth->finish; - return $ct; -} - - -#all position of contenttrans -sub collect_contentpos(){ - my $self = shift; - my ($table,$c_id) = @_; - my $tb = "contenttrans"; - my $tbpos = "contenttranspos"; - if($table eq "contenttver"){ - $tb = "contenttver"; - $tbpos = "contenttverpos"; - } - my $where = "where ctt.c_id=pos.ct_id and ctt.c_id='$c_id'"; - - if($c_id){ - my $sth = $dbh->prepare("SELECT pos.* FROM $tbpos pos, $tb ctt $where"); - my $rc = $sth->execute(); - my $cpos = $sth->fetchall_hashref("c_id"); - my $rows = $sth->rows; - $sth->finish; - return ($cpos,$rows); - }else{ - my $cpos = { c_id => 0 }; - my $rows = 0; - return ($cpos,$rows); - } -} - -# get content 4 time row where c_id -sub get_time4ct(){ - my $self = shift; - my ($table,$ctpos_id,$cvpos_id,$owner) = @_; - my $pos_key = "ctpos_id"; - my $pos_id = $ctpos_id; - $pos_id = "0" if(!$ctpos_id); - if($cvpos_id){ - $pos_key = "cvpos_id"; - $pos_id = $cvpos_id; - } - - $owner=0 if(!$owner); - my $ownersel=""; - $ownersel = "and owner='$owner'" if($owner > 0); - my $sth = $dbh->prepare("SELECT * FROM $table ct,timetable WHERE ct.c_id='$pos_id' and ct.c_id=timetable.$pos_key $ownersel"); - my $rc = $sth->execute(); - my $ct = $sth->fetchrow_hashref(); - return $ct; -} - -# get content row where c_id -sub get_content(){ - my $self = shift; - my ($c_id,$owner) = @_; - $c_id=0 if(!$c_id); - $owner=0 if(!$owner); - my $ownersel=""; - $ownersel = "and owner='$owner'" if($owner > 0); - my $sth = $dbh->prepare("SELECT * FROM content WHERE c_id='$c_id' $ownersel"); - my $rc = $sth->execute(); - my $ct = $sth->fetchrow_hashref(); - return $ct; -} - - -sub get_contentrow(){ - my $self = shift; - my ($table,$c_id,$column,$content,$column2,$content2,$column3,$content3) = @_; - my $where = "1 = 1"; - if($c_id){ - $where .= " and c_id='$c_id'"; - }elsif($column && $content){ - $where .= " and $column='$content'"; - }else{ - exit 1; - } - if($column2 && $content2){ - $where .= " and $column2='$content2'"; - } - if($column3 && $content3){ - $where .= " and $content3"; # length(ct_name) >= 11 matches PO-14058223 and 9550010000059998099 - $where .= " and (int03=1 OR int03=2)" if($column3 eq "ct_name"); - } - - my $sth = $dbh->prepare("SELECT * FROM $table WHERE $where"); - my $rc = $sth->execute(); - my $ct = $sth->fetchrow_hashref(); - return $ct; -} - -#get not closed contenttrans row -sub get_contenttrans(){ - my $self = shift; - my ($userID,$main_id,$main_id_ch) = @_; - my $sth = $dbh->prepare("SELECT * FROM contenttrans ct, relation rel WHERE ct.c_id=rel.content_id and rel.main_id IN ($main_id,$main_id_ch) and ct.txt08 ilike '$userID' and (ct.state is null OR ct.state = '') and ct.close_time is null"); - my $rc = $sth->execute(); - my $ct = $sth->fetchrow_hashref(); - return $ct; -} - -# insert contenttrans -# only used in Prelogic and should be deleted. -sub insert_contenttrans(){ - my $self = shift; - my ($ctadr,$main_id,$tpl_id,$owner) = @_; - $owner="199" if(!$owner); - my $sth = $dbh->prepare("INSERT INTO contenttrans (ct_name,txt00,int10,int03,txt02,txt01,txt03,txt06,txt07,txt08,txt09,txt15,txt17,txt18,txt19,owner,itime) VALUES('----','Rechnung','$ctadr->{c_id}','$ctadr->{int03}','$ctadr->{txt02}','$ctadr->{txt01}','$ctadr->{txt03}','$ctadr->{txt06}','$ctadr->{txt07}','$ctadr->{txt08}','$ctadr->{txt09}','$ctadr->{txt15}','$ctadr->{txt17}','$ctadr->{txt18}','$ctadr->{txt19}','$owner','now()') RETURNING c_id"); - - my $rows = $sth->execute(); - my $last_id; - $sth->bind_columns(\$last_id); - my $c_id = $sth->fetchrow_array(); - - my $sth3 = $dbh->prepare("INSERT INTO relation (ca_id,main_id,content_id,template_id,change) VALUES('$ctadr->{c_id}','$main_id','$c_id','$tpl_id','now()')"); - $sth3->execute(); - return $c_id; -} - -# get content row where c_id -sub get_content1(){ - my $self = shift; - my ($table,$c_id,$owner,$mtime) = @_; - $c_id=0 if(!$c_id); - $owner=0 if(!$owner); - #my $ownersel; - #$ownersel = "and owner='$owner'" if($owner > 0); - my $sel = "1 = 1"; - $sel .= " and c_id='$c_id'"; - $sel .= " and owner='$owner'" if($owner > 0); - $sel .= " and mtime <= '$mtime'" if($mtime); - #my $sth = $dbh->prepare("SELECT * FROM $table WHERE c_id='$c_id' $ownersel"); - my $sth = $dbh->prepare("SELECT * FROM $table WHERE $sel"); - my $rc = $sth->execute(); - my $ct = $sth->fetchrow_hashref(); - return $ct; -} - -# get content row -sub get_content2(){ - my $self = shift; - my ($table,$ct_name,$owner,$mtime,$column,$content,$op) = @_; - $owner=0 if(!$owner); - my $sel = "1 = 1"; - $sel .= " and ct_name='$ct_name'" if($ct_name); - $sel .= " and owner='$owner'" if($owner > 0); - $sel .= " and mtime >= '$mtime'" if($mtime); - $op="=" if(!$op); - $sel .= " and $column $op '$content'" if($content && $content ne "null"); - $sel .= " and $column $op $content" if($content && $content eq "null"); - my $sth = $dbh->prepare("SELECT * FROM $table WHERE $sel order by c_id DESC"); - my $rc = $sth->execute(); - my $ct = $sth->fetchrow_hashref(); - return $ct; -} - -sub get_content4new(){ - my $self = shift; - my ($table,$ct_name,$barcode,$txt11) = @_; - my $sel = "ct_name = '$ct_name'"; - $sel .= " OR barcode='$barcode'" if($barcode =~ /^\d+$/); - $sel .= " OR txt11='$txt11'" if($txt11); - my $sth = $dbh->prepare("SELECT * FROM $table WHERE $sel order by c_id DESC"); - my $rc = $sth->execute(); - my $ct = $sth->fetchrow_hashref(); - return $ct; -} - - -# get content row where ct_name and ct_id -sub get_content5(){ - my $self = shift; - my ($table,$ct_name,$c_id,$ct_id,$operator) = @_; - my $sel = "1 = 1"; - my $op="="; - $op="!=" if($operator eq "not"); - $sel .= " and ct_name = '$ct_name'" if($ct_name); - $sel .= " and c_id $op '$c_id'" if($c_id); - $sel .= " and ct_id = '$ct_id'" if($ct_id); - my $sth = $dbh->prepare("SELECT * FROM $table WHERE $sel order by c_id DESC"); - my $rc = $sth->execute(); - my $ct = $sth->fetchrow_hashref(); - return $ct; -} - - -# get content row where column content -sub get_content6(){ - my $self = shift; - my ($table,$column1,$content1,$column2,$content2,$column3,$content3,$column4,$content4,$owner) = @_; - my $where = "$column1 = '$content1'"; - $where = "$column1 is $content1" if($content1 eq "null"); - $where .= " and $column2 = '$content2'" if($content2); - $where .= " and $column3 = '$content3'" if($content3); - $where .= " and $column4 <= $content4" if($content4); - $where .= " and owner = '$owner'" if($owner); - my $sth; - if($table eq "timetable"){ - $sth = $dbh->prepare("SELECT * FROM $table WHERE $where"); - }else{ - $sth = $dbh->prepare("SELECT * FROM $table WHERE $where order by c_id DESC"); - } - my $rc = $sth->execute(); - my $ct = $sth->fetchrow_hashref(); - return $ct; -} - - -# get last content row via c_id and operator -sub get_content7(){ - my $self = shift; - my ($table,$column,$content,$column2,$op2,$content2) = @_; - my $where = "1 = 1"; - $where .= " and $column = '$content'" if($content && $content > 0); - $where .= " and $column2 $op2 '$content2'" if("$content2" || "$content2" eq "0"); - my $sth = $dbh->prepare("SELECT * FROM $table where $where order by mtime DESC"); - my $rc = $sth->execute(); - my $ct = $sth->fetchrow_hashref(); - return $ct; -} - -# get last content row for sorted insert -sub get_content2sort(){ - my $self = shift; - my ($table,$sort,$sortop,$col1,$val1,$col2,$val2) = @_; - $sortop = "=" if(!$sortop); - my $where = "1 = 1"; - $where .= " and sort $sortop '$sort'" if($sort > 0); - $where .= " and $col1 = '$val1'" if($val1); - $where .= " and $col2 != '$val2'" if($val2); - my $sth = $dbh->prepare("SELECT * FROM $table where $where order by sort DESC"); - my $rc = $sth->execute(); - my $ct = $sth->fetchrow_hashref(); - return $ct; -} - -# get last content,relation! row for sorted insert -sub get_content3sort(){ - my $self = shift; - my ($table,$main_id) = @_; - my $where = "$table.c_id=relation.content_id"; - $where .= " and relation.main_id= '$main_id'" if($main_id); - my $sth = $dbh->prepare("SELECT * FROM $table,relation where $where order by $table.sort DESC"); - my $rc = $sth->execute(); - my $ct = $sth->fetchrow_hashref(); - return $ct; -} - -# get last content row via c_id like for sorted insert -sub get_like2sort(){ - my $self = shift; - my ($table,$column,$content,$column2,$op2,$content2,$column3,$op3,$content3) = @_; - my $where = "1 = 1"; - $where .= " and $column ilike '$content%'" if($content && $content > 0); - $where .= " and $column2 $op2 '$content2'" if("$content2" || "$content2" eq "0"); - $where .= " and $column3 $op3 '$content3'" if("$content3"); - #my $sth = $dbh->prepare("SELECT * FROM $table where $where order by $column DESC"); - my $sth = $dbh->prepare("SELECT * FROM $table where $where order by mtime DESC"); - my $rc = $sth->execute(); - my $ct = $sth->fetchrow_hashref(); - return $ct; -} - -# get last barcode row -sub get_barcode(){ - my $self = shift; - my ($table,$bc4table) = @_; - my $min_content = "0"; - $min_content = "1000" if($table eq "contentadr"); - my $sth = $dbh->prepare("SELECT * FROM $table where $bc4table >= '$min_content' order by $bc4table DESC"); - my $rc = $sth->execute(); - my $ct = $sth->fetchrow_hashref(); - return $ct; -} - - -# get content row where cookie -sub get_content3(){ - my $self = shift; - my ($table,$ct_name,$owner,$coo) = @_; - $owner=0 if(!$owner); - my $sel = "1 = 1"; - $sel .= " and ct_name='$ct_name'" if($ct_name); - $sel .= " and owner='$owner'" if($owner > 0); - $sel .= " and coo='$coo'" if($coo); - my $sth = $dbh->prepare("SELECT * FROM $table WHERE $sel"); - my $rc = $sth->execute(); - my $ct = $sth->fetchrow_hashref(); - return $ct; -} - -sub get_ctnode(){ - my $self = shift; - my ($table,$tpl_id,$nd_col,$nd_con,$ct_col,$ct_op,$ct_con,$rel_col,$rel_con) = @_; - $ct_op = "=" if(!$ct_op); - my $where = "nd.main_id=rel.main_id and rel.content_id=ct.c_id"; - $where .= " and rel.template_id='$tpl_id'" if($tpl_id); - $where .= " and nd.$nd_col='$nd_con'" if($nd_col && $nd_con); - $where .= " and ct.$ct_col $ct_op '$ct_con'" if($ct_col && $ct_con); - $where .= " and rel.$rel_col = '$rel_con'" if($rel_col && $rel_con); - my $sth = $dbh->prepare("SELECT * FROM nodes nd, relation rel, $table ct WHERE $where"); - my $rc = $sth->execute(); - my $ct = $sth->fetchrow_hashref(); - return $ct; -} - -# get content row over relation where nodes n_id -sub get_ct4node(){ - my $self = shift; - my ($tpl_id,$nd_column,$nd_content,$ct_column,$ct_content) = @_; - - my $where = "nd.main_id=rel.main_id and rel.content_id=ct.c_id"; - $where .= " and rel.template_id='$tpl_id'" if($tpl_id); - $where .= " and nd.$nd_column='$nd_content'" if($nd_column && $nd_content); - $where .= " and ct.$ct_column >= '$ct_content'" if($ct_column && $ct_content); - my $sth = $dbh->prepare("SELECT * FROM nodes nd, relation rel, content ct WHERE $where"); - my $rc = $sth->execute(); - my $ct = $sth->fetchrow_hashref(); - return $ct; -} - -# get content row over relation -sub get_ctrel(){ - my $self = shift; - my ($table,$main_id,$lang,$rel_id,$c_id,$tpl_id,$sort,$dbinit) = @_; - $dbh = $dbt->dbconnect() if($dbinit);#because of ajax - my $sel = "rel.lang='$lang' and rel.content_id=ct.c_id"; - $sel .= " and rel.main_id='$main_id'" if ($main_id && $main_id > 0); - $sel .= " and rel.rel_id='$rel_id'" if ($rel_id && $rel_id > 0); - $sel .= " and rel.rel_id='0'" if ($rel_id && $rel_id eq "null"); - $sel .= " and rel.content_id='$c_id'" if ($c_id && $c_id > 0); - $sel .= " and rel.template_id='$tpl_id'" if ($tpl_id && $tpl_id > 0); - $sel .= " and ct.sort='$sort'" if ($sort); - my $sth = $dbh->prepare("SELECT * FROM relation rel, $table ct WHERE $sel"); - my $rc = $sth->execute(); - my $ct = $sth->fetchrow_hashref(); - $dbh->disconnect if($dbinit); - return $ct; -} - - -# get content row over relation -sub get_ctrel2(){ - my $self = shift; - my ($table,$ct_name,$main_id,$lang,$rel_id,$c_id,$tpl_id,$zcolumn,$zcontent,$zcoperator,$orderby,$adesc) = @_; - my $sel = "rel.lang='$lang' and rel.content_id=ct.c_id"; - if("$zcolumn" eq "barcode" && $zcontent =~ /^\d+$/ && $zcontent < 9223372036854775807){ - $sel .= " and (ct_name='$ct_name' OR $zcolumn='$zcontent')"; - }elsif("$zcolumn" eq "start_time"){ - if($zcontent && $varenv{dataflow} =~ /wiki/ && $zcoperator && $zcoperator eq "="){ - $sel .= " and start_time='$zcontent'"; - }elsif($zcontent){ - $sel .= " and start_time>='$zcontent'"; - } - }else{ - $sel .= " and ct_name='$ct_name'" if($ct_name); - } - $sel .= " and rel.main_id='$main_id'" if ($main_id > 0); - $sel .= " and rel.rel_id='$rel_id'" if ($rel_id > 0); - $sel .= " and rel.content_id='$c_id'" if ($c_id > 0); - #$sel .= " and (ct.txt12 ilike '$pre_lager%' OR ct.txt12 like '_')" if($pre_lager); - - if($tpl_id =~ /\d,\d/){ - $sel .= " and rel.template_id IN ($tpl_id)"; - }elsif($tpl_id > 0){ - $sel .= " and rel.template_id='$tpl_id'"; - } - - #It must be available (Gutschein oder RFID) - # $sel .= " and ct.int03 > 0"; - my $order = ""; - $order = "order by $orderby $adesc" if($orderby); - my $sth = $dbh->prepare("SELECT * FROM relation rel, $table ct WHERE $sel $order"); - my $rc = $sth->execute(); - my $ct = $sth->fetchrow_hashref(); - return $ct; -} - -# with like and tplids -sub get_ctrel3(){ - my $self = shift; - my ($table,$column,$content,$column2,$op2,$content2,$tplids,$sum) = @_; - my $rval="*"; - $rval = "sum(ct.int03) AS int03" if($sum eq "sum_kaution"); - my $where; - $where .= " and $column ilike '$content%'" if($content && $content > 0); - $where .= " and $column2 $op2 '$content2'" if("$content2" || "$content2" eq "0"); - my $sth = $dbh->prepare("SELECT $rval FROM relation rel, $table ct WHERE rel.content_id=ct.c_id and rel.template_id IN ($tplids) and rel.lang='de' $where"); - my $rc = $sth->execute(); - my $ct = $sth->fetchrow_hashref(); - return $ct; -} - -# get content row over relation and start_time -sub get_ctrel4(){ - my $self = shift; - my ($table,$ct_name,$main_id,$lang,$rel_id,$c_id,$tpl_id,$column,$op,$content) = @_; - $op = "=" if(!$op); - my $sel = "rel.lang='$lang' and rel.content_id=ct.c_id"; - $sel .= " and $column $op '$content'" if($column && $content); - $sel .= " and ct_name='$ct_name'" if($ct_name); - $sel .= " and rel.main_id='$main_id'" if ($main_id > 0); - $sel .= " and rel.rel_id='$rel_id'" if ($rel_id > 0); - $sel .= " and rel.content_id='$c_id'" if ($c_id > 0); - $sel .= " and rel.template_id='$tpl_id'" if($tpl_id > 0); - my $sth = $dbh->prepare("SELECT * FROM relation rel, $table ct WHERE $sel"); - my $rc = $sth->execute(); - my $ct = $sth->fetchrow_hashref(); - return $ct; -} - -# search nodes -sub search_nodes(){ - my $self = shift; - my ($search_pattern,$lang) = @_; - $search_pattern =~ s/\s/\%/g; - my $sth = $dbh->prepare("SELECT * from nodes nd where nd.lang='$lang' and nd.node_name ilike '%$search_pattern%'"); - my $rc = $sth->execute(); - my $search = $sth->fetchall_hashref("main_id"); - $sth->finish; - return $search; -} - -#search json contentuser for automcomplete -sub get_jsoncuser(){ - my $self = shift; - my ($table,$lang,$mandant_id,$key,$value) = @_; - my $dbh = $dbt->dbconnect();#because of ajax external handle request - - my $sel = "c_id = '$mandant_id'"; - my $sth = $dbh->prepare("SELECT ct.$key FROM $table ct WHERE $sel"); - my $rc = $sth->execute(); - my $rows = $sth->rows; - - $dbh->disconnect; - return $sth; -} - - -#search json address for automcomplete -sub search_jsonadr(){ - my $self = shift; - my ($table,$lang,$search,$mandant_id,$retype) = @_; - my $dbh = $dbt->dbconnect();#because of ajax external handle request - my $template_id=200;#$table eq content - $template_id=202 if($table eq "contentadr"); - - my $mjkey; - $mjkey = $1 if($retype =~ /combobox_(txt\d+)/); - my $sth; - if($retype =~ /combobox_txt/ && $search =~ /^\d+$/ && $mjkey =~ /txt\d+/){ - my $sel = "c_id = '$search'"; - $sth = $dbh->prepare("SELECT ct.c_id AS id ,ct.$mjkey AS name FROM $table ct, relation rel WHERE ct.c_id=rel.content_id and rel.template_id=$template_id and $sel"); - }else{ - my $sel = "txt01 ilike '%$search%'"; - $sth = $dbh->prepare("SELECT ct.txt01 || ', ' || ct.c_id AS value, ct.txt01 AS vorname_name, ct.c_id FROM $table ct, relation rel WHERE ct.c_id=rel.content_id and rel.template_id=$template_id and $sel"); - } - my $rc = $sth->execute(); - my $rows = $sth->rows; - - $dbh->disconnect; - return $sth; -} - - -#search json for automcomplete -sub search_json(){ - my $self = shift; - my ($table,$lang,$ct_name,$mandant_id) = @_; - my $dbh = $dbt->dbconnect();#because of ajax external handle request - #my $sel = "rel.lang='$lang' and rel.content_id=ct.c_id"; - my $sel = "1=1"; - my $sel2; - - if($ct_name =~ /^\d+$/ && $table eq "content"){ - $sel .= " and (ct_name ilike '$ct_name%' OR CAST(barcode AS text) like '$ct_name%')"; - }else{ - $sel .= " and ct_name ilike '$ct_name%'"; - } - my $sth = ""; - - #If select only mandant specific warenstamm - if($dbt->{shareedms_conf}->{waren}){ - my $main_ids = &collect_noderec("",$dbt->{shareedms_conf}->{waren},$lang,"nothing"); - $sth = $dbh->prepare("SELECT ct.ct_name || ' , ' || ct.barcode || ' , ' || ct.txt12 AS value, ct.ct_name AS spart_ct_name, ct.c_id FROM $table ct, relation rel WHERE ct.c_id=rel.content_id and rel.main_id IN ($main_ids) and $sel $sel2"); - }else{ - $sth = $dbh->prepare("SELECT ct.ct_name || ' , ' || ct.barcode || ' , ' || ct.txt12 AS value, ct.ct_name AS spart_ct_name, ct.c_id FROM $table ct WHERE $sel $sel2"); - } - my $rc = $sth->execute(); - my $rows = $sth->rows; - - $dbh->disconnect; - return $sth; -} - -sub search_content3(){ - my $self = shift; - my ($searchref,$table,$mandant_id,$node_meta,$owner,$lang,$main_ids,$tplids,$ct_ids,$v_journal,$time,$kontext,$scol,$sort_updown,$offset,$limit,$export,$todo,$ck4ex,$opos) = @_; - - $main_ids =~ s/,$//; - $tplids =~ s/,$//; - $ct_ids =~ s/,$//; - - my $stamp_time = strftime("%d.%m.%Y %H:%M",localtime(time)); - my $debug; - $debug=1; - open(FILE,">>$varenv{logdir}/Liste3.log") if($debug); - print FILE "*** $stamp_time Libenzdb.search_content3 ***\n" if($debug); - print FILE Dumper($searchref) if($debug); - print FILE "$table,$mandant_id,$node_meta->{node_name},$owner,$lang,$main_ids,$tplids,$ct_ids,$v_journal,$time,$kontext,$scol,$sort_updown,$offset,$limit,$export,$todo,$ck4ex,$opos\n" if($debug); - close(FILE) if($debug); - - - my $table_pos = $searchref->{table_pos} || ""; - my $txt_where; - my $cptxt_where; - my $cpgroup_where; - - my $valref = {}; - my $opref = {}; - foreach my $key (keys(%$searchref)){ - if($searchref->{$key} || $searchref->{$key} eq "0"){ - $valref->{$key} = $searchref->{$key};#because of escapeHTML manipulates special chars - $opref->{$key} = "="; - if($key =~ /table_pos/){ - $table_pos = $valref->{$key}; - } - if($key =~ /c_id|int\d+|barcode|time|sort|owner/){ - $searchref->{$key} =~ s/,/./g; - if($searchref->{$key} =~ /(\<\=|\>\=|\<|\>|\=)/){ - $opref->{$key} = $1; - } - if($searchref->{$key} =~ /([-0-9\.]+)/){ - $valref->{$key} = $1; - } - if($searchref->{$key} =~ /null/){ - $opref->{$key} = "is"; - } - chomp($valref->{$key}); - } - $valref->{$key} = $q->escapeHTML($valref->{$key}); - #print $key . ":" . $opref->{$key} . ":" . $valref->{$key} . "\n"; - - if($table_pos =~ /contentpos|contentadrpos|users/){ - #my $tinfo = &table_info("","contenttranspos"); - if($key =~ /ct_name/){ - $cptxt_where .= " and cp.$key ilike '$valref->{$key}'"; - }elsif($key =~ /txt/){ - $cptxt_where .= " and cp.$key ilike '%$valref->{$key}%'"; - }elsif($key =~ /barcode|int|owner/ && (looks_like_number($valref->{$key}) || $valref->{$key} eq "null")){ - $cptxt_where .= " and cp.$key $opref->{$key} $valref->{$key}"; - } - $txt_where .= " and ct.txt11 ilike '%$valref->{$key}%'" if($key eq "txt11");#Rahmennr. hack - }else{ - if($key eq "ct_name" && $valref->{$key} =~ /^(\d+)(0\d)$/){#wg. strichcode ohne "-" - $txt_where .= " and (ct.$key ilike '$valref->{$key}' OR ct.barcode $opref->{$key} $valref->{$key})"; - }elsif($key eq "ct_name" && $varenv{wwwhost} =~ /regiox|woge/){ - $txt_where .= " and ct.$key ilike '%$valref->{$key}%'"; - }elsif($key eq "ct_name"){ - $txt_where .= " and ct.$key ilike '$valref->{$key}'"; - }elsif($key =~ /int01/ && $table eq "contenttrans" && looks_like_number($valref->{$key})){ - #$cpgroup_where .= " group by cp.ct_id HAVING sum(cp.int02*cp.int03) $opref->{$key} $valref->{$key}";#special calc pos sum - #TODO, set DB int03=Menge default to 1 and testing - $cpgroup_where .= " group by cp.ct_id HAVING sum(cp.int02) $opref->{$key} $valref->{$key}";#special calc pos sum - }elsif($key =~ /_id|barcode|int\d+|sort|owner/ && (looks_like_number($valref->{$key}) || $valref->{$key} =~ /null|0/)){ - $txt_where .= " and ct.$key $opref->{$key} $valref->{$key}"; - }elsif($key =~ /txt|uri/){ - $txt_where .= " and ct.$key ilike '%$valref->{$key}%'"; - }elsif($key eq "state"){ - #order_state hack - $txt_where .= " and (ct.state ilike '%$valref->{$key}%' OR ct.txt22 ilike '%$valref->{$key}%')"; - }elsif($key =~ /byte/){ - $txt_where .= " and ct.$key = '\\x$valref->{$key}'"; - } - } - - if($key =~ /end_itime|end_mtime|end_date_time|pay_time/){ - $valref->{$key} .= " 23:59" if($valref->{$key} !~ /\d:\d/); - } - - - if(!$v_journal){ - if($table_pos =~ /contentpos|contentadrpos|users/ && $key =~ /mtime/ && $valref->{$key} =~ /\d+\.\d+\.\d+/){ - $cptxt_where .= " and cp.mtime >= '$valref->{$key}'" if($key =~ /start/); - $cptxt_where .= " and cp.mtime < '$valref->{$key}'" if($key =~ /end/); - } - elsif($table_pos =~ /contentpos|contentadrpos|users/ && $key eq "template_id_pos" && $valref->{$key}){ - $cptxt_where .= " and cp.template_id = $valref->{$key}"; - } - elsif($key =~ /mtime/ && $valref->{$key} =~ /\d+\.\d+\.\d+/){ - $txt_where .= " and ct.mtime >= '$valref->{$key}'" if($key =~ /start/); - $txt_where .= " and ct.mtime < '$valref->{$key}'" if($key =~ /end/); - } - elsif($key =~ /bctime/ && $valref->{$key} =~ /\d+\.\d+\.\d+/){ - $txt_where .= " and ct.bctime >= '$valref->{$key}'" if($key =~ /start/); - $txt_where .= " and ct.bctime < '$valref->{$key}'" if($key =~ /end/); - } - - }elsif($v_journal){ - if($key =~ /itime/ && $valref->{$key} =~ /\d+\.\d+\.\d+/){ - $txt_where .= " and ct.itime >= '$valref->{$key}'" if($key =~ /start/); - $txt_where .= " and ct.itime < '$valref->{$key}'" if($key =~ /end/); - } - if($key =~ /start_mtime/ && $valref->{$key} =~ /^\d+$/){ - $txt_where .= " and ct.int11 = '$valref->{$key}'";#int11 = c_id-abschluss key - }elsif($key =~ /start_mtime/ && $valref->{$key} =~ /date.*\d+\.\d+\.\d+/){ - $txt_where .= " and ct.mtime >= $valref->{$key}"; - }elsif($key =~ /start_mtime/ && $valref->{$key} =~ /\d+\.\d+\.\d+/){ - $txt_where .= " and ct.mtime >= '$valref->{$key}'"; - } - if($key =~ /end_mtime/ && $valref->{$key} =~ /\d+\.\d+\.\d+/){ - $txt_where .= " and ct.mtime < '$valref->{$key}'"; - } - - if($key =~ /start_pay_time/ && $valref->{$key} =~ /\d+\.\d+\.\d+/){ - $txt_where .= " and ct.pay_time >= '$valref->{$key}'"; - } - if($key =~ /end_pay_time/ && $valref->{$key} =~ /\d+\.\d+\.\d+/){ - $txt_where .= " and ct.pay_time < '$valref->{$key}'"; - } - - } - - } - }#end foreach($searchref) - - $txt_where .= " and ct.int03 < ct.int08" if($todo =~ /Mindermenge/); - if($v_journal =~ /Tagesbericht/){ - $txt_where .= " and (ct.state ~ '[a-z]') and ct.int01 is not null and ct.close_time is null"; - $txt_where .= " and ct.int14 is $opos" if($opos eq "null"); - } - #end valref --------------------------------------------------------------------------- - - $ck4ex =~ s/\s/,/g; - $txt_where = " and ct.c_id IN ($ck4ex)" if($export =~ /check4export/); - #$txt_where = " and rel.rel_id IN ($ck4ex)" if($export =~ /check4ex_rel/); - # - #SUM contenttranspos bsp - #SELECT cp.ct_id, sum(cp.int02*cp.int03) from contenttranspos cp WHERE 1=1 and cp.end_time <= '31.10.2017 23:59' and cp.start_time >= '01.10.2017' group by cp.ct_id,cp.int02,cp.int03 HAVING sum(cp.int02*cp.int03) > 10; - - #print "$v_journal|$table_pos\n"; - #print "txt_where: $txt_where
\n"; - #print "cptxt_where: $cptxt_where
\n"; - - my $sth = ""; - my $updown = "ASC"; - $updown = "DESC" if($sort_updown eq "down"); - if($v_journal =~ /_parts/){#collects ct_ids - my $cp_scol = "ct_name"; - $cp_scol = $1 if($scol =~ /(ct_name|barcode|mtime|txt0[1-9]|int0[1-9])/); - $sth = $dbh->prepare("SELECT cp.* FROM contenttranspos cp WHERE cp.ct_id IN (SELECT ct.c_id FROM relation rel, contenttrans ct WHERE rel.content_id=ct.c_id and rel.main_id IN ($main_ids) and rel.template_id IN ($tplids) and rel.lang='$lang' $txt_where) $cptxt_where ORDER BY cp.$cp_scol $updown"); - }elsif($valref->{long_rent} || $valref->{start_date_time} =~ /^\d+\.\d+\.\d+/ || $valref->{end_date_time} =~ /^\d+\.\d+\.\d+/ || $cpgroup_where){ - $sth = $dbh->prepare("SELECT * FROM relation rel, $table ct WHERE rel.content_id=ct.c_id and rel.main_id IN ($main_ids) and rel.template_id IN ($tplids) and rel.lang='$lang' $txt_where and c_id IN (SELECT cp.ct_id from contenttranspos cp WHERE 1=1 $cptxt_where $cpgroup_where) ORDER BY $scol $updown LIMIT $limit OFFSET $offset"); - }elsif($v_journal && $ct_ids){#and executes ct_ids - $ct_ids = 0 if(!$ct_ids); - $sth = $dbh->prepare("SELECT * FROM relation rel, $table ct WHERE rel.content_id=ct.c_id and rel.main_id IN ($main_ids) and rel.template_id IN ($tplids) and rel.content_id IN ($ct_ids) and rel.lang='$lang' $txt_where ORDER BY $scol $updown LIMIT $limit OFFSET $offset"); - - }elsif($table_pos && $table_pos eq "contentpos"){ - $sth = $dbh->prepare("SELECT cp.* FROM contentpos cp WHERE cp.cc_id IN (SELECT ct.c_id FROM relation rel, content ct WHERE rel.content_id=ct.c_id and rel.main_id IN ($main_ids) and rel.template_id IN ($tplids) and rel.lang='$lang' $txt_where) $cptxt_where ORDER BY cp.$scol $updown LIMIT $limit OFFSET $offset"); - }elsif($table_pos && $table_pos eq "contentadrpos"){ - if($valref->{template_id_pos} eq 602){#because of user_minianswer have to be anonym - $sth = $dbh->prepare("SELECT cp.* FROM contentadrpos cp WHERE 1=1 $cptxt_where ORDER BY cp.$scol $updown LIMIT $limit OFFSET $offset"); - }else{ - $sth = $dbh->prepare("SELECT ct.txt01,ct.txt08,cp.c_id,cp.mtime,cp.barcode,cp.int01,cp.txt02 FROM contentadr ct, contentadrpos cp WHERE ct.c_id=cp.ca_id $txt_where $cptxt_where ORDER BY cp.$scol $updown LIMIT $limit OFFSET $offset"); - } - }elsif($table_pos && $table_pos eq "users"){ - $sth = $dbh->prepare("SELECT cp.* FROM contentadr ct, users cp WHERE ct.c_id=cp.u_id $txt_where $cptxt_where ORDER BY cp.$scol $updown LIMIT $limit OFFSET $offset"); - - }else{ - $sth = $dbh->prepare("SELECT * FROM relation rel, $table ct WHERE rel.content_id=ct.c_id and rel.main_id IN ($main_ids) and rel.template_id IN ($tplids) and rel.lang='$lang' $txt_where ORDER BY $scol $updown LIMIT $limit OFFSET $offset"); - } - - my $rc = $sth->execute(); - my $s_id = "c_id"; - $s_id = "u_id" if($table_pos && $table_pos eq "users");#because to view multi relation - my $search = $sth->fetchall_hashref("$s_id"); - $sth->finish; - - #save_query - #my $save_query = $q->escapeHTML("$txt_where"); - - #CSV/FiBu Export### - if($export){ - - my $ctf = &get_content1("","contentuser","$mandant_id"); - my @tpl_order = split /,/,$node_meta->{tpl_order}; - - #wg. Buchungsgruppen bzw. Ursprung-nodes (int12) --> Konten im FiBu Export - my $colmain_ids = &collect_noderec("",$node_meta->{main_id},$lang,"999999"); - my $nodes = &Libenzdb::collect_node2("","$colmain_ids"); - my $ctt;my $ctadr;my $aw_ids; - my $what; - $what = "$export-" if($export =~ /CSV|FIBU/); - open(CSV, "> $varenv{pdf}/$what$owner-$time.csv") or die "Can't open $varenv{pdf}/$owner-$time.csv\n"; - - #CSV Table Header - my $col_header="Ordner"; - foreach(@tpl_order){ - my ($key,$val) = split /=/,$_; - if($key eq "txt01"){ - $col_header .= ";Name-01;Name-02;Name-03"; - }else{ - $col_header .= ";$val"; - } - } - print CSV "$col_header\n"; - - foreach my $id (sort { - if($sort_updown eq "down"){ - if ($scol =~ /barcode|int/) { - $search->{$b}->{$scol} <=> $search->{$a}->{$scol} - }else{ - lc($search->{$b}->{$scol}) cmp lc($search->{$a}->{$scol}) - } - }else{ - if ($scol =~ /barcode|int/) { - $search->{$a}->{$scol} <=> $search->{$b}->{$scol} - }else{ - lc($search->{$a}->{$scol}) cmp lc($search->{$b}->{$scol}) - } - } - } keys(%$search)){ - - my $s_main_id = "$search->{$id}->{main_id}"; - $s_main_id = "$search->{$id}->{int12}" if(($v_journal && ($v_journal =~ /_parts/)) || ($node_meta->{node_name} eq "Faktura")); - - #lxfibu vars - my ($l_soll,$l_umsatz,$l_ustnr,$l_haben,$l_gvc,$l_beldat,$l_beleg,$l_opbeleg,$l_skonto,$l_kostnr,$l_text,$l_text2); - #SOLL alias state/Zahlungsart - foreach my $tid (keys (%$ctt)){ - if($search->{$id}->{ct_id} == $ctt->{$tid}->{c_id}){ - my ($date,$time); - $ctt->{$tid}->{mtime} =~ s/:\d{2}\..*$//; - ($date,$time) = split(/ /,$ctt->{$tid}->{mtime}); - $l_beldat = "$date"; - $l_beleg = "$ctt->{$tid}->{txt00}" . "-" . "$ctt->{$tid}->{ct_name}"; - $l_opbeleg = "$ctt->{$tid}->{ct_name}" if(("$ctt->{$tid}->{txt00}" eq "Rechnung") && ($ctt->{$tid}->{state} =~ /Abbuchung|Überweisung|PayPal/)); - $ctf->{txt43} = $1 if($ctf->{txt43} =~ /(\d+)/); - $ctf->{txt44} = $1 if($ctf->{txt44} =~ /(\d+)/); - $ctf->{txt45} = $1 if($ctf->{txt45} =~ /(\d+)/); - $ctf->{txt46} = $1 if($ctf->{txt46} =~ /(\d+)/); - $ctf->{txt47} = $1 if($ctf->{txt47} =~ /(\d+)/); - $ctf->{txt48} = $1 if($ctf->{txt48} =~ /(\d+)/); - $ctf->{txt49} = $1 if($ctf->{txt49} =~ /(\d+)/); - $ctf->{txt50} = $1 if($ctf->{txt50} =~ /(\d+)/); - $l_soll = $ctf->{txt43} if($ctt->{$tid}->{state} eq "Bar"); - $l_soll = $ctf->{txt44} if($ctt->{$tid}->{state} eq "EC-Karte"); - $l_soll = $ctf->{txt45} if($ctt->{$tid}->{state} eq "Kreditkarte"); - $l_soll = $ctf->{txt46} if($ctt->{$tid}->{state} eq "Abbuchung"); - $l_soll = $ctf->{txt47} if($ctt->{$tid}->{state} eq "Überweisung"); - $l_soll = $ctf->{txt48} if($ctt->{$tid}->{state} eq "Geldkarte"); - $l_soll = $ctf->{txt50} if($ctt->{$tid}->{state} eq "PayPal"); - $ctf->{txt31} =~ s/,/|/; - $l_soll = $ctf->{txt49} if(($ctt->{$tid}->{state} eq "Bar") && ($ctf->{txt31} && $search->{$id}->{int12} =~ /$ctf->{txt31}/));#Bar Kaution Gegenkonto - - #2018-01-28, disabled because of not used anymore - #Debitor/Kreditor - #if(("$export" eq "FiBu" && $ctt->{$tid}->{txt14} =~ /\d/) && ($ctt->{$tid}->{state} =~ /Abbuchung|Überweisung|PayPal/)){ - #$ctadr = &get_content2("","contentadr","$ctt->{$tid}->{txt14}"); - #$l_soll = $ctadr->{int01} if($ctadr->{int01}); - #} - } - } - - my $line=""; - #Nodes alias Buchungsgruppen parameter - foreach my $nid (keys (%$nodes)){ - if($s_main_id == $nodes->{$nid}->{main_id}){ - $line = "$nodes->{$nid}->{node_name}"; - $l_text = "$nodes->{$nid}->{node_name}"; - - $ctf->{txt13} = $1 if($ctf->{txt13} =~ /(\d+)/);#VK Umst - $ctf->{txt14} = $1 if($ctf->{txt14} =~ /(\d+)/);#EK Umst - $ctf->{txt15} = $1 if($ctf->{txt15} =~ /(\d+)/);#Aufwandskonto - $ctf->{txt16} = $1 if($ctf->{txt16} =~ /(\d+)/);#Erlöskonto - $ctf->{txt40} = $1 if($ctf->{txt40} =~ /(\d+)/);#Kostenstelle - #FIXME, Kaution und Wertmarken main_id - my $ctf_txt40 = $ctf->{txt40}; - #$ctf_txt40 = "" if($nodes->{$nid}->{main_id} =~ /300087|400056|400054|400053|400063|300070|400048|400049|400047/); - $l_kostnr = "$nodes->{$nid}->{int05}";#Kostenstelle - $l_kostnr = "$ctf_txt40" if($nodes->{$nid}->{int05} !~ /\d/); - - #template definition in src/Tpl/EditMeta.pm - my $ustnr; - if($node_meta->{node_name} eq "Faktura"){ - $ustnr = $nodes->{$nid}->{int03};#Verkauf = Verleih Umst - $ustnr = $ctf->{txt13} if($nodes->{$nid}->{int03} !~ /\d/); - $l_haben = $nodes->{$nid}->{int07};#Verleih Erlöskonto - $l_haben = $ctf->{txt16} if($nodes->{$nid}->{int07} !~ /\d/); - $l_kostnr = $nodes->{$nid}->{int08};#Verleih Kostenstelle - $l_kostnr = "$ctf_txt40" if($nodes->{$nid}->{int08} !~ /\d/); - #sollte nicht mur an 999 geknüpft sein, sondern Warengruppen ... - #$l_soll = "$nodes->{$nid}->{int02}" if($search->{$id}->{ct_name} eq "999"); - } - - $l_ustnr = "0" if($ustnr == "0" || !$ustnr); - $l_ustnr = "1" if($ustnr == "19"); - $l_ustnr = "2" if($ustnr == "7"); - - } - } - - #AW Kostenstelle - $aw_ids =~ s/\|$//; - if("$search->{$id}->{ct_name}" eq "$ctf->{txt51}"){ - $ctf->{txt41} = $1 if($ctf->{txt41} =~ /(\d+)/); - $l_kostnr = "$ctf->{txt41}"; - #AM Kostenstelle - }elsif($aw_ids && $search->{$id}->{ct_id} =~ /$aw_ids/){ - $ctf->{txt42} = $1 if($ctf->{txt42} =~ /(\d+)/); - $l_kostnr = "$ctf->{txt42}"; - } - - foreach(@tpl_order){ - my ($key,$val) = split /=/,$_; - $search->{$id}->{$key} = $q->unescapeHTML("$search->{$id}->{$key}"); - $search->{$id}->{$key} =~ s/:\d{2}\..*$// if($key =~ /time/); - if($search->{$id}->{$key} && $key =~ /int/){ - my $cash = sprintf('%.2f',$search->{$id}->{$key}); - $line .= ";$cash"; - if("$export" eq "FiBu"){ - my $einzel = $search->{$id}->{int02}; - my $menge = $search->{$id}->{int03}; - my $rabatt_val = $search->{$id}->{int07}; - $cash = $einzel * $menge; - if($rabatt_val != 0){ - my $rabatt_eur = $rabatt_val; - $rabatt_eur = $einzel * $menge * $rabatt_val/100 if($search->{$id}->{int08} != 1); - $cash = $einzel * $menge - $rabatt_eur; - } - $l_umsatz = &Libenz::round("","$cash"); - } - }else{ - if($key eq "txt01"){ - my ($n01,$n02,$n03) = split(/\n/,$search->{$id}->{$key}); - $n02 =~ s/^\s//;#jbw fix - $line .= ";$n01;$n02;$n03"; - }elsif($key eq "date_time"){ - $search->{$id}->{start_time} =~ s/\s.*// if($search->{$id}->{start_time}); - $search->{$id}->{end_time} =~ s/\s.*// if($search->{$id}->{end_time}); - $line .= ";$search->{$id}->{start_time} - $search->{$id}->{end_time}"; - }else{ - $line .= ";$search->{$id}->{$key}"; - } - $l_text2 = "$search->{$id}->{$key}" if("$key" eq "ct_name"); - #$l_text2 = "" if("$key" eq "txt01"); - } - } - if("$export" eq "FiBu"){ - print CSV "$l_soll;$l_umsatz;$l_ustnr;$l_haben;$l_gvc;$l_beldat;$l_beleg;$l_opbeleg;$l_skonto;$l_kostnr;$l_text;$l_text2\n" if($l_umsatz != 0); - }else{ - $line =~ s/\n//g; - $line =~ s/\r//g; - print CSV "$line\n"; - } - } - close CSV; - - &csv2xls("",$owner,$time) if($export =~ /check4|FiBu/); - - }#end CSV/FiBu Export#### -# - return $search; -} - -# CSV to Excel. Needs first CSV to write XLS. -sub csv2xls(){ - my $self = shift; - my ($owner,$time) = @_; - open (CSVFILE, "<:encoding(utf8)","$varenv{pdf}/$owner-$time.csv");# or die "$varenv{pdf}/$owner-$time.csv: $!"; - my $workbook = Spreadsheet::WriteExcel->new("$varenv{pdf}/$owner-$time.xls"); - die "Problems creating new Excel file: $!" unless defined $workbook; - my $worksheet = $workbook->add_worksheet(); - #$worksheet->set_column(2, 3, 25); - my $csv = Text::CSV_XS->new({ - 'quote_char' => '', - 'escape_char' => '', - 'sep_char' => ';', - 'binary' => 1 - }); - - my $row = 0; - while () { - if ($csv->parse($_)) { - my @Fld = $csv->fields; - my $col = 0; - foreach my $token (@Fld) { - $token =~ s/[\=\'\"]//g; - $worksheet->write($row, $col, $token); - $col++; - } - $row++; - } - else { - my $err = $csv->error_input; - print "Text::CSV_XS parse() failed on argument: ", $err, "\n"; - } - } - return; -} - - -#with c_ids over tpl_ids. ct4tpl -sub collect_cid(){ - my $self = shift; - my ($table,$lang,$tplids,$rel_id,$barcode,$column2,$content2) = @_; - $tplids =~ s/,$//; - - my $where = "where ct.c_id=rel.content_id and rel.lang='$lang' and rel.template_id IN ($tplids)"; - if($barcode && $barcode =~ /^\d+$/){ - $where .= " and ct.barcode='$barcode'"; - }elsif($rel_id){ - $where .= " and rel.rel_id='$rel_id'"; - } - $where .= " and ct.$column2='$content2'" if($content2); - my $sth = $dbh->prepare("SELECT * FROM $table ct, relation rel $where"); - #my $sth = $dbh->prepare("SELECT ct.barcode || '.' || ct.sort AS barcode_sort, * FROM $table ct, relation rel $where"); - my $rc = $sth->execute(); - my $ct = $sth->fetchall_hashref("c_id"); - $sth->finish; - return $ct; -} - - - -#counting -sub count_content(){ - my $self = shift; - my ($table,$main_ids,$tplids) = @_; - $main_ids =~ s/,$//; - $tplids =~ s/,$//; - my $where = "WHERE rel.content_id=ct.c_id and rel.main_id IN ($main_ids)"; - $where .= " and rel.template_id IN ($tplids)" if($tplids =~ /\d/); - my $sth = $dbh->prepare("SELECT DISTINCT(ct.c_id) FROM relation rel, $table ct $where"); - my $rc = $sth->execute(); - my $rows = $sth->rows; - return $rows; -} - - - -# copy content -sub copy_content(){ - my $self = shift; - my ($table,$key_id,$x_id,$columns,$dbinit) = @_; - $dbh = $dbt->dbconnect() if($dbinit);#because of ajax - $columns = "ct_name,barcode,txt01,txt02,txt03,txt04,txt05,txt06,txt07,txt08,txt09,int10,txt10,txt11,txt12,int01,int02,int03,int04,int05,int06,int07,int08" if(!$columns); - my $sth = $dbh->prepare("INSERT INTO $table ($columns) SELECT $columns from $table where $key_id='$x_id' RETURNING $key_id"); - my $rows = $sth->execute(); - - my $last_id; - $sth->bind_columns(\$last_id); - my $y_id = $sth->fetchrow_array(); - - $dbh->disconnect if($dbinit); - return $y_id; -} - -# insert content (init) -sub insert_content(){ - my $self = shift; - my ($table,$ct_name,$owner,$sort) = @_; - $owner="0" if(!$owner); - $sort="0" if(!$sort); - my $sth = $dbh->prepare("INSERT INTO $table (ct_name,owner,sort,itime) VALUES(trim('$ct_name'),'$owner','$sort','now()') RETURNING c_id"); - my $rows = $sth->execute(); - - my $last_id; - $sth->bind_columns(\$last_id); - my $c_id = $sth->fetchrow_array(); - - return $c_id; -} - - -#c_id must be serial primary-key -sub insert_content2(){ - my $self = shift; - my ($table,$ct_name,$owner,$state) = @_; - $owner="0" if(!$owner); - my $sql = "INSERT INTO $table (ct_name,owner) VALUES(trim('$ct_name'),'$owner') RETURNING c_id"; - $sql = "INSERT INTO $table (ct_name,owner,state) VALUES(trim('$ct_name'),'$owner','$state') RETURNING c_id" if($state); - my $sth = $dbh->prepare($sql); - my $rows = $sth->execute(); - - my $last_id; - $sth->bind_columns(\$last_id); - my $c_id = $sth->fetchrow_array(); - - return $c_id; -} - -#ADD Parts -#$cc_id = c_id from content (Waren) -#$foreign_key = c_id from contenttrans (Verkauf ...), maybe (c_id4trans) -#$from_main_id = mail_id from content relation (Waren) -sub insert_contenttranspos(){ - my $self = shift; - my ($table,$ct_name,$owner,$barcode,$cc_id,$foreign_key,$from_main_id,$txt01,$node_name,$unit,$int02,$int03,$umst,$int07,$mandant_id,$int08,$packaged,$txt06,$txt07,$email,$ca_id) = @_; - $owner="0" if(!$owner); - $barcode="0" if(!$barcode); - $int02="0" if(!$int02);#VK Einzel - $int03="0" if(!$int03);#Menge - $umst="null" if(!$umst);#UmSt - $int07="0" if(!$int07);#Rabatt - $int08="0" if(!$int08);#Rabatteinheit - $packaged="" if(!$packaged);#packaged - $txt06="" if(!$txt06);#cooordinates - $txt07="" if(!$txt07);#voltage - $foreign_key="0" if(!$foreign_key); - $from_main_id="0" if(!$from_main_id); - $ca_id="0" if(!$ca_id); - my $sth = $dbh->prepare("INSERT INTO $table (ct_name,owner,barcode,cc_id,ct_id,itime,txt01,txt00,txt03,int02,int03,int05,int07,int12,txt12,int08,txt05,txt06,txt07,txt08,ca_id) VALUES(trim('$ct_name'),'$owner','$barcode','$cc_id','$foreign_key','now()','$txt01','$node_name','$unit','$int02','$int03',$umst,'$int07','$from_main_id','$mandant_id','$int08','$packaged','$txt06','$txt07','$email','$ca_id') RETURNING c_id"); - my $rows = $sth->execute(); - - my $last_id; - $sth->bind_columns(\$last_id); - my $c_id = $sth->fetchrow_array(); - - my $set = "SET c_idpos=c_id"; - my $sth12 = $dbh->prepare("UPDATE $table $set WHERE c_id='$c_id'"); - my $rc12 = $sth12->execute(); - return $c_id; -} - -# update trivial -sub updater(){ - my $self = shift; - my ($table,$w_col,$w_val,$column,$content,$owner,$w_col2,$w_op2,$w_val2,$set_time) = @_; - my $ct_set = "mtime='now()'"; - if($set_time && $set_time eq "no_time"){ - $ct_set = ""; - }elsif($table !~ /content/){ - $ct_set = "change='now()'"; - } - - if("$content" eq "null" || (!$content && $content !~ /^0$/)){ - $ct_set .= ",$column=null"; - }elsif(($column ne "c_id") && ($content || $content == 0)){ - $ct_set .= ",$column='$content'"; - } - if($table eq "contenttranspos"){#to keep initial channel-ID - $ct_set .= ",owner_end='$owner'" if($owner); - }else{ - $ct_set .= ",owner='$owner'" if($owner); - } - $ct_set =~ s/^,/ /; - my $where = "$w_col='$w_val'"; - - if("$w_col2" && "$w_op2" && "$w_val2"){ - if($w_op2 =~ /IN/i){ - $where .= " and $w_col2 $w_op2 ($w_val2)"; - }else{ - $where .= " and $w_col2 $w_op2 '$w_val2'"; - } - } - - my $rows = 0; - if($w_col && $w_val){ - my $sth = $dbh->prepare("UPDATE $table SET $ct_set where $where"); - $rows = $sth->execute(); - } - return $rows; -} - -# update trivial in short -sub updater2(){ - my $self = shift; - my ($table,$w_col,$w_val,$column,$content,$owner,$set_time) = @_; - my $ct_set = "mtime='now()'"; - if($set_time && $set_time eq "no_time"){ - $ct_set = ""; - }elsif($table !~ /content/){ - $ct_set = "change='now()'"; - } - - if("$content" eq "null" || (!$content && $content !~ /^0$/)){ - $ct_set .= ",$column=null"; - }elsif(($column ne "c_id") && ($content || $content == 0)){ - $ct_set .= ",$column='$content'"; - } - $ct_set .= ",owner='$owner'" if($owner); - $ct_set =~ s/^,/ /; - my $where = "$w_col='$w_val'"; - - my $sth = $dbh->prepare("UPDATE $table SET $ct_set where $where"); - my $rows = $sth->execute(); - return $rows; -} -# update for barcode -sub update_barcode(){ - my $self = shift; - my ($table,$c_id,$ct_name,$barcode,$txt01) = @_; - my $ct_set = "mtime='now()'"; - $ct_set = "change='now()'" if($table !~ /content/); - if("$barcode" eq "null" || (!$barcode && $barcode != 0)){ - $ct_set .= ",barcode=null"; - }elsif($barcode || $barcode == 0){ - $ct_set .= ",barcode='$barcode'"; - } - - $ct_set .= ", txt01='$txt01'" if($txt01); - my $where = "c_id='$c_id'"; - my $sth = $dbh->prepare("UPDATE $table SET $ct_set where $where"); - my $rows = $sth->execute(); - $sth->finish; - return $rows; -} - -#for trivial ajax update -sub update_ajaxes(){ - my $self = shift; - my ($table,$w_key,$op,$w_val,$column,$value,$owner) = @_; - my $dbh = $dbt->dbconnect();#because of ajax external handle request - $op = "=" if(!$op); - my $where = "where 1=1"; - $where .= " and $w_key $op '$w_val'" if($w_key); - $where .= " and owner='$owner'" if($owner); - my $sth = $dbh->prepare("UPDATE $table SET $column='$value' $where"); - my $rows = $sth->execute(); - $dbh->disconnect; - return $rows; -} - -# update content like copy -sub update_content4change(){ - my $self = shift; - my ($table,$c_id,$ct_name,$content,$column,$owner) = @_; - my $ct_set = "mtime='now()'"; - #my $ct_set; - $ct_set .= ",ct_name='$ct_name'" if($ct_name); - if($content && $content eq "no"){ - $ct_set .= ",$column=''"; - }elsif($content && $content eq "null"){ - $ct_set .= ",$column=$content"; - }elsif($content || ($content && $content eq "0")){ - $ct_set .= ",$column='$content'" if($column ne "ct_name"); - } - if($column eq "mtime"){#überschreibt obiges - if($content =~ /\d/){#TODO real time - $ct_set = "mtime='$content'"; - }else{ - $ct_set = ""; - } - } - if($table eq "contenttranspos"){#to keep initial channel-ID - $ct_set .= ",owner_end='$owner'" if($owner); - }else{ - $ct_set .= ",owner='$owner'" if($owner); - } - if($ct_set){ - my $sth = $dbh->prepare("UPDATE $table SET $ct_set where c_id='$c_id'"); - my $rows = $sth->execute(); - return $rows; - } -} - - -# update content without mtime-change -sub update_content4change2(){ - my $self = shift; - my ($table,$c_id,$content,$column,$owner) = @_; - my $ct_set; - if("$content" eq "no"){ - $ct_set = "$column=''"; - }elsif($content || $content eq "0"){ - $ct_set = "$column='$content'"; - } - if($table eq "contenttranspos"){#to keep initial channel-ID - $ct_set .= ",owner_end='$owner'" if($owner); - }else{ - $ct_set .= ",owner='$owner'" if($owner); - } - if($ct_set){ - my $sth = $dbh->prepare("UPDATE $table SET $ct_set where c_id='$c_id'"); - my $rows = $sth->execute(); - return $rows; - } -} - -sub update_kasse(){ - my $self = shift; - my ($table,$c_id,$sum_kasse,$sum_start) = @_; - #set kassenbestand - my $sth = $dbh->prepare("UPDATE $table SET int01='$sum_kasse',int02='$sum_start' where c_id='$c_id'"); - my $rows = $sth->execute(); - return $rows; -} - -sub update_tagesabschluss(){ - my $self = shift; - my ($table,$c_idkasse,$journal_main_id,$tpl_journal,$tpl_vk,$mandant_main_id,$main_ids,$s_owner_id,$opos) = @_; - my $where; - $where = " and ct.owner='$s_owner_id'" if($s_owner_id); - $where = " and ct.int14 is $opos" if($opos eq "null"); - #close transactions #int11 zusätzlich für Kassenabschluss referenz c_id - my $sth = $dbh->prepare("UPDATE $table SET close_time='now()',int11=$c_idkasse where c_id IN (SELECT ct.c_id from $table ct, relation rel where ct.c_id=rel.content_id and (ct.state ~ '[a-z]') and ct.int01 is not null and rel.main_id IN ($main_ids) and ct.close_time is null $where)"); - my $rows = $sth->execute(); - #move/set to journal - $sth = $dbh->prepare("UPDATE relation SET main_id='$journal_main_id', template_id='$tpl_journal' where template_id='$tpl_vk' and content_id IN (SELECT ct.c_id from $table ct, relation rel where ct.c_id=rel.content_id and (ct.state ~ '[a-z]') and ct.int01 is not null and rel.main_id IN ($main_ids) $where)"); - #$sth = $dbh->prepare("UPDATE $table SET close_time='now()',int11='$c_idkasse' where (state ~ '[a-z]') and int01 is not null and int12 IN ($main_ids) and close_time is null $where"); - $rows = $sth->execute(); - return $rows; -} - -#X collect last journal abschluss to get workflow transactions -sub collect_Xlast(){ - my $self = shift; - my ($c_idkasse,$main_id,$tpl_id,$mandant_main_id) = @_; - my $sth = $dbh->prepare("SELECT ct.c_id,ct.ct_name FROM contenttrans ct, relation rel where ct.c_id=rel.content_id and rel.main_id = $main_id and rel.template_id = $tpl_id and rel.lang='de' and ct.int11 = $c_idkasse and ct.ct_name like '%-%'"); # Muster: RechnungNr-XBelegNr OR QuittungNr-XWorkflowNr - my $rc = $sth->execute(); - my $ct4rel = $sth->fetchall_hashref("c_id"); - $sth->finish; - return $ct4rel; -} - -sub update_Xabschluss(){ - my $self = shift; - my ($table,$c_idkasse,$journal_main_id,$tpl_journal,$tpl_vk,$mandant_main_id,$main_ids,$s_owner_id,$ct_name) = @_; - my $where; - $where = " and ct.owner='$s_owner_id'" if($s_owner_id); - my $sth = $dbh->prepare("UPDATE $table SET close_time='now()',int11='$c_idkasse' where c_id IN (SELECT ct.c_id from $table ct, relation rel where ct.c_id=rel.content_id and (ct.ct_name = '$ct_name' OR ct.ct_name like '$ct_name-%' OR ct.ct_name like '%-$ct_name') and ct.int01 is null and rel.main_id IN ($main_ids) and ct.close_time is null $where)"); - my $rows = $sth->execute(); - #move/set to journal - $sth = $dbh->prepare("UPDATE relation SET main_id='$journal_main_id', template_id='$tpl_journal' where template_id='$tpl_vk' and content_id IN (SELECT ct.c_id from $table ct, relation rel where ct.c_id=rel.content_id and (ct.ct_name = '$ct_name' OR ct.ct_name like '$ct_name-%' OR ct.ct_name like '%-$ct_name') and ct.int01 is null and rel.main_id IN ($main_ids) $where)"); - $rows = $sth->execute(); - return $rows; -} - - -#compute content -sub update_content4comp(){ - my $self = shift; - my ($table,$ct_name,$c_id,$operator,$menge,$kind_of_trans,$lager) = @_; - my $where; - - if($c_id){ - $where = "c_id='$c_id'"; - }elsif($ct_name =~ /(\d+)/ && ($table eq "content")){ - $ct_name = $1; - $where = "(ct_name='$ct_name' OR barcode='$ct_name')"; - }elsif($ct_name){ - $where = "where (ct_name='$ct_name')"; - } - my $val="0"; - $val=$menge if($menge); - my $ct_set = "int03=(int03 $operator $val)"; - my $sth = $dbh->prepare("UPDATE $table SET $ct_set where $where") if($c_id || $ct_name); - my $rows = $sth->execute(); - return $rows; -} - -# Delete content -sub delete_content(){ - my $self = shift; - my ($table,$c_id,$owner,$sort) = @_; - my $where = "c_id='$c_id'"; - $where .= " and owner='$owner'" if($owner); - $where .= " and sort='$sort'" if($sort); - my $sth = $dbh->prepare("DELETE FROM $table WHERE $where"); - my $rc = $sth->execute(); - return $rc; -} - -# Delete time -sub delete_time(){ - my $self = shift; - my ($table,$t_id) = @_; - my $sth = $dbh->prepare("DELETE FROM $table WHERE t_id='$t_id'"); - my $rc = $sth->execute(); - return $rc; -} - -#delete users -sub delete_users(){ - my $self = shift; - my ($u_id,$owner) = @_; - my $sth = $dbh->prepare("DELETE from users where u_id = '$u_id'"); - my $rows = $sth->execute(); - if($owner){ - $sth = $dbh->prepare("DELETE from contentuser where owner = '$owner'"); - $rows = $sth->execute(); - } - #$sth = $dbh->prepare("DELETE from contentpers where owner = '$owner'"); - #$rows = $sth->execute(); - return $rows; -} - -# logout alias cook_out -sub cook_out(){ - my $self = shift; - my $coo = shift; - my $sth = $dbh->prepare("UPDATE users SET cookie='', change='now()' where cookie='$coo'"); - my $rc = $sth->execute(); - return $rc; -} - - -#just after checked if users.u_id=contentadr.c_id -sub select_users(){ - my $self = shift; - my $u_id = shift || 0; - my $sth = $dbh->prepare("SELECT * FROM users WHERE u_id=$u_id"); - my $rc = $sth->execute(); - my $auth = $sth->fetchrow_hashref(); - return $auth; -} - - -sub get_owner(){ - my $self = shift; - my ($owner,$dbinit) = @_; - $dbh = &dbconnect() if($dbinit);#because of ajax - my $sth = $dbh->prepare("SELECT * FROM users WHERE owner='$owner'"); - my $rc = $sth->execute(); - my $ner = $sth->fetchrow_hashref(); - $dbh->disconnect if($dbinit); - return $ner; -} - - -# collect all users -sub collect_users(){ - my $self = shift; - my $sth = $dbh->prepare("SELECT * FROM users"); - my $rc = $sth->execute(); - my $users = $sth->fetchall_hashref("owner"); - $sth->finish; - return $users; -} - -1; diff --git a/copri4/main/src/Mod/Modalbox.pm b/copri4/main/src/Mod/Modalbox.pm index 57bc9f9..21037b8 100755 --- a/copri4/main/src/Mod/Modalbox.pm +++ b/copri4/main/src/Mod/Modalbox.pm @@ -13,7 +13,6 @@ use CGI::Carp qw(fatalsToBrowser); use Scalar::Util qw(looks_like_number); use Lib::Config; use Mod::Buttons; -use Mod::Libenzdb; use Mod::DBtank; sub new { @@ -32,7 +31,6 @@ sub mobox(){ my $q = new CGI; my $cf = new Config; my $but = new Buttons; - my $db = new Libenzdb; my $dbt = new DBtank; $q->import_names('R'); my @keywords = $q->param; diff --git a/copri4/main/src/Mod/Payment.pm b/copri4/main/src/Mod/Payment.pm index 4c255de..f8ce038 100755 --- a/copri4/main/src/Mod/Payment.pm +++ b/copri4/main/src/Mod/Payment.pm @@ -3,20 +3,19 @@ package Payment; # SPDX-License-Identifier: AGPL-3.0-or-later # Copyright (c) Rainer Gümpelein, TeilRad GmbH # -#Adapted from Prelogic Rechnung "buchen" and "print_pdf" -#Adapted from payone_post.pl -# #enable for syntax check #use lib "/var/www/copri-bike/shareedms-primary/src"; use strict; use warnings; use POSIX; -use CGI; # only for debugging +use CGI; +use Digest::SHA qw(hmac_sha256_base64); +use JSON; +my $json = JSON->new->allow_nonref; use LWP::UserAgent; use URI::Encode; my $uri_encode = URI::Encode->new( { encode_reserved => 1 } ); - use Scalar::Util qw(looks_like_number); use Lib::Config; use Mod::Callib; @@ -921,7 +920,6 @@ sub rpc { } print FILE "payone RPC end\n\n" if($debug); - close(FILE) if($debug); #set contentadr owner and mtime only if vde or payone-return will be set by payone id's if((($update_adr->{int12} && $update_adr->{int12} > 0) || $update_adr->{txt28}) && ($owner == 178 || $owner == 179)){ $update_adr->{owner} = "$owner"; @@ -930,12 +928,15 @@ sub rpc { if($ctadr->{c_id} > 0){ $dbt->update_record($dbh,$update_adr,$ctadr); + print FILE Dumper($update_adr) . "\n" if($debug); #2023-04-11 set it global by update adr also on primary #disabled, because isuser_rentable will be only used by operator rental #my $dbh_primary = $dbt->dbconnect($dbt->{primary}->{sharee_primary}->{database}->{dbname}); #$dbt->update_record($dbh_primary,$update_adr,$ctadr); } $dbt->update_record($dbh,$update_ctt,$ctt) if($ctt->{c_id} > 0); + + close(FILE) if($debug); return $payoneret; } @@ -1020,23 +1021,12 @@ sub payone_capture { return $return_text; } - my $state = $ctt->{state}; - if($dbt->{shareedms_conf}->{payment_state}){ - my @_paymentstate = split(/\|/,$dbt->{shareedms_conf}->{payment_state}); - if($ctadr->{ct_name} =~ /\w{2}-\d+/){ - $state = "$_paymentstate[0]"; - }else{ - undef $_paymentstate[0]; - } - if(length($ctadr->{ct_name}) >= 19){ - $state = "$_paymentstate[1]"; - }else{ - undef $_paymentstate[1]; - } - } - + my $state = $ctt->{state} || ""; + my $p_hash = $dbt->{shareedms_conf}->{payment_state2}; + $state = $p_hash->{1} if($ctadr->{ct_name} =~ /\w{2}-\d+/); + $state = $p_hash->{2} if(length($ctadr->{ct_name}) >= 19); $update_ctt->{state} = "$state"; - $dbt->update_record($dbh,$update_ctt,$ctt); + $dbt->update_record($dbh,$update_ctt,$ctt) if($update_ctt->{state}); #in cron we set OPOS anyway. If payone captured, it will be set int14=null if(!$state || $state !~ /payone/){ @@ -1101,6 +1091,138 @@ sub payone_capture { return ($retval,$return_text); } +#Request "payone-link" +sub generate_payonelink { + my $self = shift; + my $varenv = shift; + my $ctadr = shift; + my $prepaidhash = shift || {}; + my $prepaid_amount = shift || 0; + my $owner = shift || 0; + + my $payonelink_conf = $dbt->{payonelink_conf} || {}; + my $ret_json = {}; + my $response_in = {}; + my $dbh = ""; + + my $now_dt = strftime "%Y-%m-%d %H:%M:%S", localtime; + open(FILE,">>$varenv->{logdir}/payonelink.log"); + print FILE "\n*** $now_dt 'generate_payonelink' ctadr:$ctadr->{c_id}|$ctadr->{txt08}\n"; + + my $prepaid_amount2 = 0; + $prepaid_amount2 = $1 if($prepaid_amount =~ /^(\d+)/); + + if($ctadr->{c_id} && $prepaidhash->{prepaid_id} && $prepaid_amount2 >= 5){ + + my $lastname = $ctadr->{txt01}; + (my $firstname,$lastname) = split(/\s+/,$ctadr->{txt01}) if($ctadr->{txt01} =~ /\w\s+\w/i); + chomp($firstname); + chomp($lastname); + my $city = $ctadr->{txt06}; + (my $zip, $city) = split(/\s+/,$ctadr->{txt06}) if($ctadr->{txt06} =~ /[\w\d]\s+[\w\d]/i); + chomp($zip); + chomp($city); + + my $currency = "EUR"; + my $amount = 0; + $amount = $prepaid_amount2 * 100 if($prepaid_amount2); + my $pay_request = { + intent => 'authorization', + active => 1, + paymentMethods => ['visa', 'mastercard', 'paypal', 'sofort', 'paydirekt', 'giropay', 'sepa'], + userId => "$ctadr->{c_id}", + email => "$ctadr->{txt08}", + firstName => "$firstname", + lastName => "$lastname", + country => "$ctadr->{txt10}", + language => "de_DE", + reference => "$prepaidhash->{prepaid_id}", + shoppingCart => [{ + type => "prepaid", + number => "$prepaidhash->{number}", + price => $amount, + quantity => 1, + description => "$prepaidhash->{description}", + vatRate => 19 + }] + }; + + + my $datahash = $payonelink_conf->{merchantId} . $payonelink_conf->{accountId} . $payonelink_conf->{portalId} . $payonelink_conf->{mode} . $prepaidhash->{prepaid_id} . $amount . $currency; + + my $paytoken = hmac_sha256_base64($datahash, $payonelink_conf->{portalKey}); + + #my $whole_json = { %$payonelink_conf, %$pay_request}; + #my $rest_json = encode_json($whole_json); + my $rest_json = encode_json(\%{ $pay_request }); + + print FILE "rest_json:\n" . Dumper($rest_json) . "\n"; + + ($ret_json, my $ret_status) = $self->rpc_postjson($paytoken,$rest_json); + eval { + $response_in = decode_json($ret_json); + print FILE "<--- payonelink response_in with status_line: $ret_status\n" . Dumper($response_in); + print FILE $ret_json . "\n"; + + #expecting something like this: + #return "https://onelink.pay1.de/p/YNEVNS4N1N5JXTFLYPMQJ5PVADEEZ0UL?lang=de_DE"; + }; + if ($@){ + print FILE "<--- failure payonelink raw response_in with status_line: $ret_status\n" . Dumper($ret_json) . "\n"; + #warn $@; + print FILE "warn:" . $@ . "\n"; + } + + }else{ + $ret_json = "failure:: $ctadr->{c_id} && $prepaidhash->{prepaid_id} && $prepaid_amount2 >= 5"; + } + + close FILE; + return $ret_json; +}#end Request "send_payone_link" + +#JSON POST to onelink +sub rpc_postjson { + my $self = shift; + my $paytoken = shift; + my $rest_json = shift || ""; + + my $api_file = "/var/www/copri4/shareeconf/apikeys.cfg"; + my $aconf = Config::General->new($api_file); + my %apikeyconf = $aconf->getall; + + my $ua = LWP::UserAgent->new( + ssl_opts => { + SSL_version => 'TLSv12:!SSLv2:!SSLv3:!TLSv1:!TLSv11', + } + ); + + $ua->agent("sharee payone jsonPOST API"); + my $bytes = 100000; + $ua->max_size( $bytes ); + $ua->default_header( 'Authorization' => "payone-hmac-sha256 $paytoken" ); + print Dumper($ua); + + #local TEST + my $endpoint = "https://shareeapp-fr01.copri-bike.de/APIvelo"; + #my $endpoint = "https://onelink.pay1.de/api/v1/payment-links/"; + + my $req = HTTP::Request->new(POST => "$endpoint"); + $req->content_type('application/json'); + $req->content($rest_json); + my $res = $ua->request($req); + + if ($res->is_success) { + #print $res->content; + #print $res->status_line, "\n"; + return ($res->content, $res->status_line); + }else { + #print $res->status_line, "\n"; + return ("", $res->status_line); + } + +} + 1; diff --git a/copri4/main/src/Mod/Prelib.pm b/copri4/main/src/Mod/Prelib.pm index 91ba5c4..31d82f2 100755 --- a/copri4/main/src/Mod/Prelib.pm +++ b/copri4/main/src/Mod/Prelib.pm @@ -51,7 +51,7 @@ my $debug=1; sub prepaid_request { my $self = shift; my $dbh = shift; - my $ctadr = shift; + my $ctadr = shift || {}; my $owner = shift; my $feedb = { @@ -61,6 +61,7 @@ sub prepaid_request { message => "", }; + if($ctadr->{c_id}){ my $pref_ctt = { table => "contenttrans", fetch => "one", @@ -76,6 +77,13 @@ sub prepaid_request { my $ct_id = $dbt->insert_contenttrans($dbh,$ctadr,"300023","219","----","$owner"); $pref_ctt->{c_id} = $ct_id; $ctt_prepaid = $dbt->fetch_record($dbh,$pref_ctt) if($pref_ctt->{c_id}); + my $update_adr = { + table => "contentadr", + mtime => "now()", + owner => "$owner", + c_id => "$ctadr->{c_id}", + }; + $dbt->update_one($dbh,$update_adr,"ct_name='Prepaid-$ctt_prepaid->{c_id}'"); } my $pos_id = 0; @@ -107,13 +115,14 @@ sub prepaid_request { $cttpos->{c_id} = $dbt->insert_pos($dbh,$ctt_prepaid->{c_id},$ct,"",$ctadr,"","","","0",$owner,""); $dbt->update_one($dbh,{table => 'contenttranspos',c_id => $cttpos->{c_id}},"barcode = $cttpos->{c_id},ct_name = '$cttpos->{c_id}'"); + $feedb->{prepaid_id} = $ctt_prepaid->{c_id} . "-" . $cttpos->{c_id}; } - } - $feedb->{prepaid_account} = $ctt_prepaid->{c_id}; - $feedb->{prepaid_id} = $cttpos->{c_id}; + $feedb->{prepaid_account} = $ctt_prepaid->{c_id}; + } + } return $feedb; -} +}#end prepaid_request #select rentals for messaging user if bike > 12h ... occupied sub longterm_occupied { @@ -612,13 +621,10 @@ sub insert_contenttranspos { my $cc_part = { c_id => 0 }; $cc_part = $dbt->fetch_record($dbh,$pref_cc) if($R::c_id || $R::json_select); - my $pref_adr = { - table => "contentadr", - fetch => "one", - c_id => "$ctt->{int10}", + my $ctadr = { + c_id => $ctt->{int10}, + txt01 => $ctt->{txt01}, }; - my $ctadr = { c_id => 0 }; - $ctadr = $dbt->fetch_tablerecord($dbh,$pref_adr) if($ctt->{int10}); if($cc_part->{c_id}){ $cc_part->{int02} = "0" if(!$cc_part->{int02}); diff --git a/copri4/main/src/Mod/Pricing.pm b/copri4/main/src/Mod/Pricing.pm index 945af2f..e2ba6eb 100755 --- a/copri4/main/src/Mod/Pricing.pm +++ b/copri4/main/src/Mod/Pricing.pm @@ -44,6 +44,52 @@ sub round(){ return $rounded; } +#collect prepaid +sub collect_prepaid { + my $self = shift; + my $dbh = shift; + my $ctadr = shift || {}; + + my $prepaidhash = { + prepaid_total => 0, + prepaid_id => 0, + }; + + if($ctadr->{c_id}){ + my $posref = { + table => "contenttrans", + table_pos => "contenttranspos", + fetch => "all", + keyfield => "c_id", + ca_id => "$ctadr->{c_id}", + 'ct.state' => "is::null", + 'ct.close_time' => "is::null", + }; + my $cttpos = { c_id => 0 }; + $cttpos = $dbt->collect_post($dbh,$posref); + #TODO negative counting booked operator invoices + foreach my $id (sort { $cttpos->{$b}->{c_id} <=> $cttpos->{$a}->{c_id} } keys(%$cttpos)){ + #print $cttpos->{$id}->{barcode} . ":" . $cttpos->{$id}->{int02},"
"; + + if($cttpos->{$id}->{barcode} && $cttpos->{$id}->{int02} == 0){ + $prepaidhash->{prepaid_id} = $cttpos->{$id}->{ct_id} . "-" . $cttpos->{$id}->{c_id}; + $prepaidhash->{number} = $cttpos->{$id}->{c_id}; + $prepaidhash->{description} = $cttpos->{$id}->{txt01}; + } + #if($cttpos->{$id}->{barcode} && $cttpos->{$id}->{int02} > 0){ + # $prepaidhash->{prepay_id_payed} = $cttpos->{$id}->{int02}; + #} + if($cttpos->{$id}->{int02} > 0){ + $prepaidhash->{prepaid_total} += $cttpos->{$id}->{int02}; + } + + } + } + $bw->log("Pricing prepaidhash:",$prepaidhash,""); + return $prepaidhash; +} + + #for one freed rental #depends on operator, only 1 rental get freed_time sub count_freedrental { diff --git a/copri4/main/src/Mod/Shareework.pm b/copri4/main/src/Mod/Shareework.pm index da2c2bb..4bef9e6 100755 --- a/copri4/main/src/Mod/Shareework.pm +++ b/copri4/main/src/Mod/Shareework.pm @@ -560,11 +560,11 @@ sub save_account(){ print FILE "account_check iban:$iban, c_id:$account_check->{c_id} && $account_check->{c_id} != $c_id\n" if($debug); if($account_check->{c_id} && $account_check->{c_id} != $c_id){ my $encoded_val = $uri_encode->encode($iban); - $ret_conflict = "failure::conflict_txt22=$encoded_val#top"; - } + $ret_conflict = "failure::conflict_txt22\&txt22=$encoded_val#top"; + }else{ - my $payone_mival = $payone->managemandate_main(\%varenv,$ctadr,"",$owner); - if($payone_mival && $payone_mival =~ /\w{2}-\d+/){ + my $payone_mival = $payone->managemandate_main(\%varenv,$ctadr,"",$owner); + if($payone_mival && $payone_mival =~ /\w{2}-\d+/){ #define fictiv invoice to get 1 € test my $epoche = time(); my $ctt = { @@ -594,12 +594,13 @@ sub save_account(){ }else{ $u_rows = $dbt->update_one($dbh,$update_adr,"int12=$vde_on_fail");#Vde } + + } } - #prepaid - elsif($ctadr->{int03} == 3){ - $feedb = $pl->prepaid_request($dbh,$ctadr,$owner); - $u_rows = $dbt->update_one($dbh,$update_adr,"ct_name='Prepay-$feedb->{prepaid_account}'");#Vde - } + #prepaid, will be requested in PayoneLink.pm + #elsif($ctadr->{int03} == 3){ + # $feedb = $pl->prepaid_request($dbh,$ctadr,$owner); + #} if($R::txt04 && $R::confirm_txt04 && $R::txt04 ne $R::confirm_txt04){ $ret = "failure::confirm_txt04#top"; diff --git a/copri4/main/src/Tpl/Address3.pm b/copri4/main/src/Tpl/Address3.pm index d93a08e..f998c17 100755 --- a/copri4/main/src/Tpl/Address3.pm +++ b/copri4/main/src/Tpl/Address3.pm @@ -353,10 +353,17 @@ EOF $pay_state = " | receivable: $ctt->{int19}. Einzug im PMI prüfen!" if($ctt->{txt16} && $ctt->{int16} == 0 && $ctt->{int18} == 0 && looks_like_number($ctt->{int19}) && $ctt->{int01} != $ctt->{int19}); my $pay_sequence = ""; $pay_sequence = " | sequencenr: $ctt->{int18}" if($ctt->{int18}); - my @_paymentstate = split(/\|/,$dbt->{shareedms_conf}->{payment_state}); + my $kind_of_payment = "fehlt"; - $kind_of_payment = "$_paymentstate[0]" if($ctadr->{int03} == 1); - $kind_of_payment = "$_paymentstate[1]" if($ctadr->{int03} == 2); + my $p_hash = $dbt->{shareedms_conf}->{payment_state2}; + foreach my $s_key (sort keys (%{ $p_hash })) { + if($ctt->{state} && $ctt->{int03}){ + $kind_of_payment = $p_hash->{$s_key} if($ctt->{int03} == $s_key); + } + elsif($ctadr->{int03}){ + $kind_of_payment = $p_hash->{$s_key} if($ctadr->{int03} == $s_key); + } + } my $payteaser = ""; if($ctadr->{txt28}){ $payteaser = substr($ctadr->{txt28},0,50) . " ..."; diff --git a/copri4/main/src/Tpl/Liste3.pm b/copri4/main/src/Tpl/Liste3.pm index 8ff1d82..d57612b 100755 --- a/copri4/main/src/Tpl/Liste3.pm +++ b/copri4/main/src/Tpl/Liste3.pm @@ -19,7 +19,6 @@ use Lib::Config; use Mod::Buttons; use Mod::Libenz; use Mod::Prelib; -use Mod::Libenzdb; use Mod::DBtank; use Date::Calc qw(:all); use Scalar::Util qw(looks_like_number); @@ -50,7 +49,6 @@ sub tpl(){ my $cf = new Config; my $lb = new Libenz; my $pl = new Prelib; - my $db = new Libenzdb; my $but = new Buttons; my $dbt = new DBtank; my $apif = new APIfunc; @@ -124,11 +122,11 @@ sub tpl(){ my $cttpos_trans = {}; my $cttpos_theft = {}; if(($node_meta->{ct_table} eq "content") && ($node_meta->{tpl_id} == 205) && (!$start_chck && !$end_chck)){ - my $cttpos1 = $db->collect_postime("contenttranspos","$search_startdt","$search_enddt","$start_date_time","$end_date_time"); + my $cttpos1 = $dbt->collect_postime($dbh,"contenttranspos","$search_startdt","$search_enddt","$start_date_time","$end_date_time"); foreach my $key (keys %$cttpos1){ $cttpos_trans->{"trans_" . $key} = $cttpos1->{$key}; } - #my $cttpos2 = $db->collect_postime("contenttheftpos","$search_startdt","$search_enddt","$start_date_time","$end_date_time"); + #my $cttpos2 = $dbt->collect_postime($dbh,"contenttheftpos","$search_startdt","$search_enddt","$start_date_time","$end_date_time"); #foreach my $key (keys %$cttpos2){ # $cttpos_theft->{"theft_" . $key} = $cttpos2->{$key}; #} @@ -175,8 +173,6 @@ sub tpl(){ my ($daymarker,$raster_mmpx,$day4month) = $lb->month_line($users_dms); my $rows = 0; - my $ctf = $db->get_content1("contentuser","$dbt->{sharedms_conf}->{parent_id}"); - my $c_id4csv = ""; my $ct4rel = {}; my $ct4rel_parts = {}; @@ -207,13 +203,19 @@ sub tpl(){ $feedb->{message} .= ">>> Datum Eingabefehler: $date <<<" if($end_chck); my ($c_dd,$c_mm,$c_yy) = split(/\./,$date); } + + my $update_users = { + table => "users", + change => "no_time", + u_id => $users_dms->{u_id} + }; my $export = ""; my $ck4ex = "@R::ck4ex" || ""; $export = "check4export" if($R::ck4ex); if($export || $ck4ex){ - $db->users_up("time4csv","$time",$users_dms->{u_id}); - $users_dms = $db->select_users($users_dms->{u_id}); + $dbt->update_one($dbh,$update_users,"time4csv='$time'"); + $users_dms = $dbt->select_users($dbh,$users_dms->{u_id}); } my $searchref = { @@ -225,7 +227,6 @@ sub tpl(){ opos => "", }; my $tplids = "$tpl_id," || 0; - my $main_ids = ""; #Faktura actions if($node_meta->{template_id} =~ /208|209|218|219/){ @@ -293,10 +294,7 @@ sub tpl(){ $searchref->{limit} = 1000; } - - $main_ids = "$main_id,"; - $main_ids .= $db->collect_noderec($main_id,$lang,"nothing"); - $main_ids =~ s/,$//; + my $main_ids .= $dbt->collect_noderec($dbh,$main_id); #path-line my $redirect = ""; @@ -358,20 +356,7 @@ EOF my $s_ct_name = $q->escapeHTML($R::s_ct_name) || ""; my $s_barcode = $q->escapeHTML($R::s_barcode) || ""; - my $relnod = ""; - $relnod = $db->collect_rel4nodes($main_ids,"","","rel_id"); - - my $j_exist = $db->get_node4multi("300011",$lang); - - my $nodes = ""; - if($main_ids){ - $nodes = $db->collect_node2($main_ids); - }else{ - $lb->failure("Fehler! Es fehlen wichtige Einstellungen. ....journal-ID!"); - } - my $ct_ids = ""; - my $last_ab = {}; - + my $relnod = $dbt->collect_rel4nodes($dbh,$main_ids); my $channel_map = $dbt->channel_map(); my $mapref = {}; my $ct_users = $dbt->users_map($dbh,$mapref);#get serviceAPP and DMS users from contentadr @@ -437,7 +422,14 @@ EOF #it will takes only one dataset if($node_meta->{ct_table} eq "contenttrans" && $c_id4trans && $c_id4trans =~ /^\d+$/ && (($users_dms->{faksum}) || ($full_url ne $referer) || ($node_meta->{tpl_id} == 209 && $v_journal && !$R::detail_search))){ - $ct4rel = $db->collect_cid($table,$lang,$tplids,$R::rel_id,$R::barcode,"c_id",$c_id4trans); + my $pref_ct = { + table => "contenttrans", + fetch => "all", + keyfield => "c_id", + c_id => $c_id4trans, + }; + $ct4rel = $dbt->fetch_record($dbh,$pref_ct); + }elsif(!$start_chck && !$end_chck){ #collect search keys @@ -478,13 +470,13 @@ EOF $tk->sigstation_cupdate($return2copri->{stations}); } } - $ct4rel = $dbt->search_content($dbh,$searchref,$node_meta,$users_dms,"$main_ids","$tplids","$ct_ids",$v_journal,$ck4ex); + $ct4rel = $dbt->search_content($dbh,$searchref,$node_meta,$users_dms,"$main_ids","$tplids",$v_journal,$ck4ex); $feedb = $pl->export_csv($node_meta,$users_dms,$ct4rel,$bike_nodes,$coo) if($ck4ex); if($node_meta->{node_name} eq "Faktura" || $tplids =~ /218/){ my $v_journalparts = ""; $v_journalparts = $v_journal . "_parts"; - $ct4rel_parts = $dbt->search_content($dbh,$searchref,$node_meta,$users_dms,"$main_ids","$tplids","$ct_ids",$v_journalparts,$ck4ex); + $ct4rel_parts = $dbt->search_content($dbh,$searchref,$node_meta,$users_dms,"$main_ids","$tplids",$v_journalparts,$ck4ex); } }#end $ct4rel collect @@ -617,7 +609,11 @@ EOF }elsif($key =~ /owner/){ print $q->td({-class=>'search_line'},$but->selector("s_$key","120px","$s_val",@_users)),"\n"; }elsif($key =~ /state/){ - my @_states = split(/\|/,$dbt->{shareedms_conf}->{payment_state}); + my @_states = (""); + my $p_hash = $dbt->{shareedms_conf}->{payment_state2}; + foreach my $s_key (sort keys (%{ $p_hash })) { + push @_states, "$p_hash->{$s_key}"; + } my @_orderstates = split(/\|/,$dbt->{shareedms_conf}->{order_state}); push (@_states,@_orderstates); print $q->td({-class=>'search_line'},$but->selector("s_$key","120px","$s_val",@_states)),"\n"; @@ -1275,7 +1271,7 @@ EOF } if($users_dms->{u_id}){ - if($v_journal eq "Tagesbericht" && $j_exist->{main_id}){ + if($v_journal eq "Tagesbericht"){ print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; print $q->td({-style=>"background-color:silver;",-class=>'tdsum',-colspan=>"$m"},"Tagesbericht abschließen, Übertrag in das Verkaufsjournal"),"\n"; diff --git a/copri4/main/src/Tpl/MandantConf.pm b/copri4/main/src/Tpl/MandantConf.pm index 58ed762..5d19085 100755 --- a/copri4/main/src/Tpl/MandantConf.pm +++ b/copri4/main/src/Tpl/MandantConf.pm @@ -12,7 +12,6 @@ use CGI ':standard'; use Lib::Config; use Mod::Buttons; use Mod::Libenz; -use Mod::Libenzdb; use Mod::DBtank; sub new { @@ -31,66 +30,61 @@ sub tpl(){ my $q = new CGI; my $cf = new Config; my $lb = new Libenz; - my $db = new Libenzdb; my $dbt = new DBtank; my $but = new Buttons; my %ib = $but->ibuttons(); my %varenv = $cf->envonline(); - my $script = $q->script_name(); my $path_info = $q->path_info(); my $path = $path_info; - #with meta_host, - if("$varenv{metahost}"){ - $path = "$script" . "$path_info"; - $script=""; - } - $path =~ s/\/user|\/manager|\/admin//; - my $lang = "de"; my $dbh = ""; 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 int08 >= 1"); - my $rel = {}; my $ct = {}; if($node_meta->{ct_table} eq "contentuser"){ - #Firma alias Kunden-Faktura and Operator-Faktura config + my $ref = { + table => $node_meta->{ct_table}, + fetch => "one", + main_id => $node_meta->{main_id}, + template_id => $node_meta->{tpl_id}, + c_id => ">::0", + }; + #Kunden-Faktura and Operator-Faktura config if(($node_meta->{template_id} =~ /196|201/) && $users_dms_primary->{int08} >= 1){ - $rel = $db->get_rel4tpl($node_meta->{main_id},$lang,"","$node_meta->{template_id}","","",">0"); - $ct = $db->get_content1("contentuser",$rel->{content_id}); + $ct = $dbt->fetch_record($dbh,$ref); }elsif($node_meta->{template_id} == 197 && $users_dms->{int08} >= 1){ - $rel = $db->get_rel4tpl($node_meta->{main_id},$lang,"","197","","",">0"); - $ct = $db->get_content1("contentuser",$rel->{content_id}); + $ct = $dbt->fetch_record($dbh,$ref); }else{ $feedb->{message} = "failure::Abbruch. Keine Zugriffsberechtigung"; } } - my $tpl = $db->get_tpl($rel->{template_id}); + my $tpl = $dbt->get_tpl($dbh,$ct->{template_id}); my @tpl_order = split /,/,$tpl->{tpl_order}; my $u_name = $dbt->sys_username($dbh,$ct->{owner}); $ct->{mtime} = $lb->time4de($ct->{mtime},"1"); print "
"; - print $q->div({-class=>"copri_header",-style=>"background-color:#cccccc;"},"Pfad: $path"); + print $q->div({-class=>"copri_header",-style=>"background-color:#cccccc;"},"$path"); print $q->div({-style=>'background-color:silver;height:10px;'},""),"\n"; print $q->start_form(); #Content print $q->start_table({-border=>'0', -width=>'100%',-align=>'center', -cellpadding=>'3', -cellspacing=>'0'}); - if($feedb->{message} !~ /failure/){ + if($ct->{c_id} > 0 && $feedb->{message} !~ /failure/){ print $q->Tr(); if($R::config2edit){ print ""; print $q->hidden(-name=>'owner',-override=>'1', -value=>"$users_dms->{u_id}"); print $q->hidden(-name=>'c_id',-override=>'1', -value=>"$ct->{c_id}"); - print $q->hidden(-name=>'rel_id',-override=>'1', -value=>"$rel->{rel_id}"); - print $q->hidden(-name=>'main_id',-override=>'1', -value=>"$rel->{main_id}"); + print $q->hidden(-name=>'rel_id',-override=>'1', -value=>"$ct->{rel_id}"); + print $q->hidden(-name=>'main_id',-override=>'1', -value=>"$ct->{main_id}"); print $but->singlesubmit7("rel_edit","save_user","$ib{save}"); print "\n"; }else{ print ""; - print $q->a({-class=>"editnav",-href=>"$script$path?config2edit=1",-title=>'bearbeiten'}, $q->span({-class=>"bi bi-file-earmark-text-fill", -style=>'font-size:1.5em;'})); + print $q->a({-class=>"editnav",-href=>"?config2edit=1",-title=>'bearbeiten'}, $q->span({-class=>"bi bi-file-earmark-text-fill", -style=>'font-size:1.5em;'})); print "\n"; } print $q->td({-style=>"background-color:white;padding-right:10px;border-bottom: 1px solid silver;text-align:right;font-size:12px;"}, "$u_name / $ct->{mtime}"); @@ -138,7 +132,7 @@ sub tpl(){ print "
"; my $debug = ""; - $debug = "(ct_table: $node_meta->{ct_table} | main_id: $node_meta->{main_id} | c_id: $ct->{c_id} | tpl_id: $tpl->{tpl_id} | rel_id: $rel->{rel_id})"; + $debug = "(ct_table: $node_meta->{ct_table} | main_id: $node_meta->{main_id} | c_id: $ct->{c_id} | tpl_id: $tpl->{tpl_id} | rel_id: $ct->{rel_id})"; print $q->div({-style=>'z-index:10;font-size:13px;'},"$debug"),"\n" if($users_dms->{u_id} == $dbt->{copri_conf}->{superu_id}); return $feedb; diff --git a/copri4/main/src/Tpl/SubListe.pm b/copri4/main/src/Tpl/SubListe.pm index 9100d1d..74cb957 100755 --- a/copri4/main/src/Tpl/SubListe.pm +++ b/copri4/main/src/Tpl/SubListe.pm @@ -16,7 +16,6 @@ use Encode; use Lib::Config; use Mod::Buttons; use Mod::Libenz; -use Mod::Libenzdb; use Mod::DBtank; use Mod::APIfunc; use Storable; @@ -45,7 +44,6 @@ sub tpl(){ my $now_db = strftime("%d.%m.%Y %H:%M:%S",localtime(time)); my $cf = new Config; my $lb = new Libenz; - my $db = new Libenzdb; my $dbt = new DBtank; my $apif = new APIfunc; my $but = new Buttons; @@ -57,7 +55,6 @@ sub tpl(){ my $lang = "de"; my $dbh = ""; - my $parent_node4rel = $db->get_node4rel($node_meta->{parent_id},"","","null"); my %ib = $but->ibuttons(); my $opdir_dms = "$dbt->{copri_conf}->{basedir}/$dbt->{operator}->{$varenv{dbname}}->{dir_dms}" || ""; @@ -117,10 +114,8 @@ sub tpl(){ my ($c_dd,$c_mm,$c_yy) = split(/\./,$date); } - #because of search we need parents - my $main_ids = $parent_node4rel->{main_id}; - my $tpl_ids = $parent_node4rel->{template_id}; - + my $main_ids = $node_meta->{parent_id}; + my $tpl_ids = $node_meta->{tpl_id}; my $table = "content"; $searchref->{table_pos} = "contentpos"; if($node_meta->{tpl_id} == 194 || $node_meta->{tpl_id} == 199){ @@ -215,7 +210,6 @@ EOF my $ct4rel = {}; if(!$start_chck && !$end_chck && $main_ids && $tpl_ids){ - #$rows = $db->count_content($searchref->{table_pos},"$main_ids","$tpl_ids"); #collect search keys. foreach my $postkey (@keywords){ @@ -242,7 +236,7 @@ EOF } } - $ct4rel = $dbt->search_content($dbh,$searchref,$node_meta,$users_dms,"$main_ids","$tpl_ids","","",$ck4ex); + $ct4rel = $dbt->search_content($dbh,$searchref,$node_meta,$users_dms,"$main_ids","$tpl_ids","",$ck4ex); }else{ $feedb->{message} = "failure::Abbruch. Keine Zugriffsberechtigung"; } diff --git a/copri4/main/src/Tpl/TransPositionen.pm b/copri4/main/src/Tpl/TransPositionen.pm index 868d739..d963534 100755 --- a/copri4/main/src/Tpl/TransPositionen.pm +++ b/copri4/main/src/Tpl/TransPositionen.pm @@ -555,25 +555,24 @@ EOF $users_dms_primary = $dbt->select_users($dbh_primary,$users_dms->{u_id},""); if($users_dms_primary->{u_id}){ - my @_paymentstate = split(/\|/,$dbt->{shareedms_conf}->{payment_state}); - push @_paymentstate, ""; my $kind_of_payment = ""; - if($ctadr->{int03} == 1 && ($ctadr->{ct_name} =~ /PO-\d+/ || $ctadr->{ct_name} =~ /TM-\d+/)){ - $kind_of_payment = "$_paymentstate[0]"; - }else{ - undef $_paymentstate[0]; - } - if($ctadr->{int03} == 2 && length($ctadr->{ct_name}) >= 19){ - $kind_of_payment = "$_paymentstate[1]"; - }else{ - undef $_paymentstate[1]; - } - - if($ctt->{state} && $ctt->{int01}){ - $kind_of_payment = "$ctt->{state}"; - }elsif($ctt->{int06} && $ctt->{int06} >= 3 || $ctt->{ct_name} =~ /\d-\d/){ - #default to Überw. - $kind_of_payment = "$_paymentstate[2]"; + my @_paymentstate = (""); + my $p_hash = $dbt->{shareedms_conf}->{payment_state2}; + foreach my $s_key (sort keys (%{ $p_hash })) { + push @_paymentstate, "$p_hash->{$s_key}"; + if($ctt->{state}){ + #$kind_of_payment = $p_hash->{$s_key} if($ctt->{int03} == $s_key); + $kind_of_payment = $ctt->{state}; + } + elsif($ctt->{int06} && $ctt->{int06} >= 3 || $ctt->{ct_name} =~ /\d-\d/){ + #default to Überw. + $kind_of_payment = $p_hash->{4}; + } + elsif($ctadr->{int03}){ + $kind_of_payment = $p_hash->{1} if($ctadr->{ct_name} =~ /\w{2}-\d+/); + $kind_of_payment = $p_hash->{2} if(length($ctadr->{ct_name}) >= 19); + $kind_of_payment = $p_hash->{3} if($ctadr->{ct_name} =~ /Prepaid-\d+/); + } } if($ctt->{state} && $ctt->{int01}){ diff --git a/copri4/main/src/scripts/velofaktur_client.pl b/copri4/main/src/scripts/velofaktur_client.pl index dea9422..6c225cd 100755 --- a/copri4/main/src/scripts/velofaktur_client.pl +++ b/copri4/main/src/scripts/velofaktur_client.pl @@ -121,9 +121,9 @@ sub post_velo { my $Befehl = shift; #local TEST - #my $endpoint = "https://shareeapp-primary.copri-bike.de/APIvelo"; + my $endpoint = "https://shareeapp-fr01.copri-bike.de/APIvelo"; #LIVE - my $endpoint = "https://cockpit.velofactur.de/api/portal/befehl"; + #my $endpoint = "https://cockpit.velofactur.de/api/portal/befehl"; my %json; @@ -133,6 +133,8 @@ sub post_velo { $json{Befehl} = "$Befehl"; my $rest_json = encode_json(\%json); + print FILE "rest_json:\n" . Dumper($rest_json) . "\n"; + my $ret_json = post2velo_cloud("","$endpoint",$rest_json); # eval { diff --git a/copri4/shareeapp-operator/src/Lib/Mlogic.pm b/copri4/shareeapp-operator/src/Lib/Mlogic.pm index 763786f..9e48276 100755 --- a/copri4/shareeapp-operator/src/Lib/Mlogic.pm +++ b/copri4/shareeapp-operator/src/Lib/Mlogic.pm @@ -81,13 +81,15 @@ sub tplselect(){ my $tpl_id = $node_meta->{tpl_id}; if($node_meta->{main_id}){ - if($tpl_id == 2){ + if($tpl_id == 2){ require "Tpl/Anmelden.pm"; &Anmelden::tpl($node_meta,$users_dms,$mode,$varenv,$users_sharee,$feedb); - - }elsif($tpl_id == 302 || $tpl_id == 302008 || $tpl_id == 302004){#Adresse + }elsif($tpl_id == 302 || $tpl_id == 302008){ require "Tpl/FormEdit.pm"; &FormEdit::tpl($node_meta,$users_dms,$mode,$varenv,$users_sharee,$feedb); + }elsif($tpl_id == 302004){ + require "Tpl/RentalData.pm"; + &RentalData::tpl($node_meta,$users_dms,$varenv,$users_sharee,$feedb); }elsif($tpl_id == 308){ require "Tpl/PayoneSelect.pm"; &PayoneSelect::tpl($q,$node_meta,$users_dms,$varenv,$users_sharee,$feedb); diff --git a/copri4/shareeapp-operator/src/Tpl/Anmelden.pm b/copri4/shareeapp-operator/src/Tpl/Anmelden.pm index 27fb9d8..03caac5 100755 --- a/copri4/shareeapp-operator/src/Tpl/Anmelden.pm +++ b/copri4/shareeapp-operator/src/Tpl/Anmelden.pm @@ -159,8 +159,19 @@ sub tpl(){ print $q->end_form,"\n"; - print $q->div({-style=>'position:fixed;bottom:2%;right:2%;z-index:10;font-size:13px;'},"--> $varenv->{syshost} | $varenv->{merchant_id} | $bgcolor1 | $node_meta->{tpl_name} | $users_sharee->{c_id}"),"\n" if($users_sharee->{c_id} eq $dbt->{copri_conf}->{superu_id} || $dbt->{copri_conf}->{stage} eq "test"); + if($users_sharee->{c_id} eq $dbt->{copri_conf}->{superu_id} || $dbt->{copri_conf}->{stage} eq "test"){ + my $project = $dbt->{merchant_ids}->{$varenv->{merchant_id}}->{project}; + print "
Project $project : \n"; + print $q->a({-href=>"$varenv->{wwwhost}/$dbt->{project_conf}->{$project}->{agb_html}", -target=>'_blank'},"[AGB]"),"\n"; + print $q->a({-href=>"$varenv->{wwwhost}/$dbt->{project_conf}->{$project}->{privacy_html}", -target=>'_blank'},"[Datenschutz]"),"\n"; + print $q->a({-href=>"$varenv->{wwwhost}/$dbt->{project_conf}->{$project}->{impress_html}", -target=>'_blank'},"[Impressum]"),"\n"; + print $q->a({-href=>"$varenv->{wwwhost}/$dbt->{project_conf}->{$project}->{tariff_info_html}", -target=>'_blank'},"[Tarif Info]"),"\n"; + print $q->a({-href=>"$varenv->{wwwhost}/$dbt->{project_conf}->{$project}->{bike_info_html}", -target=>'_blank'},"[Bike Info]"),"\n"; + print "
\n"; + + print $q->div({-style=>'position:fixed;bottom:2%;right:2%;z-index:10;font-size:13px;'},"--> $varenv->{syshost} | $varenv->{merchant_id} | $bgcolor1 | $node_meta->{tpl_name} | $users_sharee->{c_id}"),"\n"; + } print ""; } 1; diff --git a/copri4/shareeapp-operator/src/Tpl/FormEdit.pm b/copri4/shareeapp-operator/src/Tpl/FormEdit.pm index f0109d2..a7fabb4 100755 --- a/copri4/shareeapp-operator/src/Tpl/FormEdit.pm +++ b/copri4/shareeapp-operator/src/Tpl/FormEdit.pm @@ -43,17 +43,8 @@ sub tpl(){ my $pri = new Pricing; my $but = new Buttons; my $submenu = new AccountSubmenu; - my $script = $q->script_name(); - my $path_info = $q->path_info(); - my $path = $path_info; - #with meta_host, - if("$varenv->{metahost}"){ - $path = "$script" . "$path_info"; - $script=""; - } - my $dbh = "";#$dbt->dbconnect(); - my $user_agent = $q->user_agent(); - my @viewsel = split /\//,$1 if($path =~ /^\/(.*)/); + my $path = $q->path_info(); + my $dbh = ""; my $red = "red"; my $coo = $q->cookie(-name=>'domcookie') || $R::sessionid; @@ -68,11 +59,6 @@ sub tpl(){ $bgcolor1 = $dbt->{website}->{$varenv->{syshost}}->{bgcolor1} if($dbt->{website}->{$varenv->{syshost}}->{bgcolor1}); $bgcolor1 = $dbt->{merchant_ids}->{$varenv->{merchant_id}}->{bgcolor1} if($dbt->{merchant_ids}->{$varenv->{merchant_id}}->{bgcolor1}); - #print "$dbt->{merchant_ids}->{$varenv->{merchant_id}}->{id}|$varenv->{merchant_id}|$coo"; - my $aowner = "198"; - $aowner = $dbt->{merchant_ids}->{$varenv->{merchant_id}}->{id} if($varenv->{merchant_id} && $dbt->{merchant_ids}->{$varenv->{merchant_id}}->{id}); - - #TODO substitute aowner by project my $project = "Freiburg";#defaults to sharee $project = $dbt->{merchant_ids}->{$varenv->{merchant_id}}->{project} if($varenv->{merchant_id} && $dbt->{merchant_ids}->{$varenv->{merchant_id}}->{project}); @@ -83,7 +69,7 @@ sub tpl(){ my $bonus_saved = "$varenv->{cms}->{'iframe-enabled'}->{txt}:"; #sharee.bike text - if($aowner == 186 || $aowner == 197){ + if($project eq "Freiburg"){ $bonus_desc = "$varenv->{cms}->{'iframe-activation-code'}->{txt}"; $bonus_ak = "$varenv->{cms}->{'iframe-activation-code-info'}->{txt}"; $bonus_avail = "$varenv->{cms}->{'iframe-activation-not-available'}->{txt}"; @@ -92,12 +78,12 @@ sub tpl(){ } - my $ctrel = {}; - $ctrel = $users_sharee if(ref($users_sharee) eq "HASH" && $users_sharee->{c_id}); + my $ctadr = {}; + $ctadr = $users_sharee if(ref($users_sharee) eq "HASH" && $users_sharee->{c_id}); # #collect rentals on operators and get operator hash with dbname->uri_operator #$q->param(-name=>'month',-value=>"1"); - my ($cttpos,$operator_hash) = $apif->user_rentals_history($q,$ctrel); + my ($cttpos,$operator_hash) = $apif->user_rentals_history($q,$ctadr); #print Dumper($cttpos); my $cttpos_count=0; @@ -113,13 +99,13 @@ sub tpl(){ my $pref = { table => "contenttrans", fetch => "all", - int10 => "$ctrel->{c_id}", + int10 => "$ctadr->{c_id}", keyfield => "ct_name", ct_name => "~::[1-9]", }; - if($ctrel->{c_id}){ + if($ctadr->{c_id}){ my $ctt = $dbt->fetch_tablerecord($dbh_operator,$pref); foreach my $id (keys(%$ctt)){ $ctt->{$id}->{wwwhost} = "$operator_hash->{$sharee_operator}"; @@ -133,7 +119,7 @@ sub tpl(){ table => "contentadr", fetch => "one", txt15 => "~::\\w", - c_id => "$ctrel->{c_id}", + c_id => "$ctadr->{c_id}", }; $ctadrcoupon->{$sharee_operator} = $dbt->fetch_tablerecord($dbh_operator,$prefcoupon); @@ -142,7 +128,6 @@ sub tpl(){ } my $tpl_id = $node_meta->{tpl_id}; - #$tpl_id = "302004" if($viewsel[1] =~ /Mieten/ && $ctrel->{c_id}); my $tpl = $dbt->get_tpl($dbh,$tpl_id); my $tpl01 = $tpl;#If nothing else, because of tpl_name Title in split_lates my $tpl02 = ""; @@ -214,78 +199,28 @@ EOF - my $debug=0; - $debug=1 if($users_sharee->{c_id} eq $dbt->{copri_conf}->{superu_id} || $dbt->{copri_conf}->{stage} eq "test"); - my $debug_message = ""; - - my $payable_check=0; - if(($ctrel->{int03} == 1 && $ctrel->{ct_name} =~ /\w{2}-\d+/) || ($ctrel->{int03} == 2 && length($ctrel->{ct_name}) >= 19)){ - $payable_check=1; - } - #subMenue-------- $submenu->tpl($node_meta,$users_dms,$varenv,$users_sharee,$feedb); #----------------- + my $debug=0; + $debug=1 if($users_sharee->{c_id} eq $dbt->{copri_conf}->{superu_id} || $dbt->{copri_conf}->{stage} eq "test"); + my $debug_message = ""; my $catch_failure=0; - if(($R::failure && $R::failure =~ /\w+/) || ($ctrel->{txt31} && $ctrel->{txt31} =~ /\w/)){ - $debug_message = "($R::failure || $ctrel->{txt31})" if($debug); + if(($R::failure && $R::failure =~ /\w+/) || ($ctadr->{txt31} && $ctadr->{txt31} =~ /\w/)){ + $debug_message = "($R::failure || $ctadr->{txt31})" if($debug); $catch_failure=1; print $q->div({-class=>'content2', -style=>"clear:both;color:$red"}, "* $varenv->{cms}->{'iframe-one-error'}->{txt} $debug_message"),"\n"; } - #confirm code manage - if($catch_failure && (!$ctrel->{int04} && !$ctrel->{int13}) && ($tpl_id =~ /^2$|302004/) && ($path =~ /$varenv->{accounting_3}/)){ - $debug_message = "$catch_failure && (!$ctrel->{int04} || !$ctrel->{int13}) && $tpl_id" if($debug); - print $q->div({-class=>'content2'}, "$varenv->{cms}->{'iframe-complete-confirmation'}->{txt} $debug_message"),"\n"; - }elsif((!$ctrel->{int04} || !$ctrel->{int13}) && ($tpl_id =~ /^2$|302004/) && ($path =~ /$varenv->{accounting_3}/)){ - - print $q->start_form(-name=>'accountscreen', -action=>"/$varenv->{mandant}/Account/$varenv->{accounting_3}$session"),"\n"; - print $q->hidden(-name=>"sessionid",-override=>1,-value=>"$R::sessionid"); - my $required = ""; - $debug_message = "(!$ctrel->{int04} || !$ctrel->{int13}) && $tpl_id" if($debug); - print $q->div({-class=>'content_title3',-style=>'clear:both;'}, "$varenv->{cms}->{'iframe-almost-done'}->{txt} $debug_message"),"\n"; - my $acktext = "$varenv->{cms}->{'iframe-confirmation-codes-sent'}->{txt}"; - $acktext = "$varenv->{cms}->{'iframe-sms-confirmation-code-sent'}->{txt}" if($ctrel->{int04} && !$ctrel->{int13}); - $acktext = "$varenv->{cms}->{'iframe-email-confirmation-code-sent'}->{txt}" if(!$ctrel->{int04} && $ctrel->{int13}); - print $q->div({-class=>'content2'}, "$acktext $varenv->{cms}->{'iframe-successful-confirmation'}->{txt}"),"\n"; - if(!$ctrel->{int04}){ - my $des = "$varenv->{cms}->{'iframe-email-code'}->{txt}"; - my $key = "confirm_code"; - my $label_des="* $des"; - $varenv->{cms}->{'iframe-correct-input'}->{txt} =~ s/::input::/$des/; - $label_des = "$varenv->{cms}->{'iframe-correct-input'}->{txt}" if($R::failure); - print $q->label({-for=>"$key", -style=>'padding-top:1em;'},"$label_des"),"\n"; - print "\n"; - print $q->div({-class=>'content2'}, " $varenv->{cms}->{'iframe-if-email-code-not-received'}->{txt}",$q->a({-style=>"color:#$bgcolor1;",-href=>"$varenv->{wwwhost}?sharee_edit=send_email$session_and"},"$varenv->{cms}->{'iframe-request-email-code'}->{txt}")),"\n"; - }else{ - print $q->div({-class=>'content2', -style=>'color:gray;'}, "* $varenv->{cms}->{'iframe-email-code-already-entered'}->{txt}"),"\n"; - } - if(!$ctrel->{int13}){ - my $des = "$varenv->{cms}->{'iframe-sms-code'}->{txt}"; - my $key = "confirm_smscode"; - my $label_des="* $des"; - $varenv->{cms}->{'iframe-correct-input'}->{txt} =~ s/::input::/$des/; - $label_des = "$varenv->{cms}->{'iframe-correct-input'}->{txt}" if($R::failure); - print $q->label({-for=>"$key", -style=>'padding-top:1em;'},"$label_des"),"\n"; - print "\n"; - #print $q->div({-class=>'content2'}, "$varenv->{cms}->{'iframe-if-sms-code-not-received'}->{txt} ",$q->a({-style=>"color:#$bgcolor1;",-href=>"$varenv->{wwwhost}?sharee_edit=send_sms$session_and"},"$varenv->{cms}->{'iframe-request-sms-code'}->{txt}")),"\n"; - }else{ - print $q->div({-class=>'content2', -style=>'color:gray;'}, "* $varenv->{cms}->{'iframe-sms-code-already-entered'}->{txt}"),"\n"; - } - - my $button_name = "$varenv->{cms}->{'iframe-next'}->{txt}"; - print $q->div({-style=>'margin-top:2em;text-align:center;'},""),"\n"; - print $q->end_form,"\n"; - - }else{ + if(1==1){ my $postaction = "/$varenv->{mandant}/Account/$varenv->{accounting_2}"; - if($ctrel->{c_id} && $path =~ /$varenv->{accounting_2}|$varenv->{accounting_3}|$varenv->{profile}/){ + if($ctadr->{c_id} && $path =~ /$varenv->{accounting_2}|$varenv->{accounting_3}|$varenv->{profile}/){ $postaction = "/$varenv->{mandant}/Account/$varenv->{accounting_3}"; }elsif($path =~ /$varenv->{accounting_1}/){ $postaction = "/$varenv->{mandant}/Account/$varenv->{accounting_1_5}"; - }elsif($ctrel->{c_id} && $path =~ /$varenv->{accounting_1}/){ + }elsif($ctadr->{c_id} && $path =~ /$varenv->{accounting_1}/){ $postaction = "/$varenv->{mandant}/Account/$varenv->{accounting_2}"; } @@ -323,176 +258,18 @@ EOF print $q->div({-class=>'content2'}, "$varenv->{cms}->{'iframe-login-needs'}->{txt}"),"\n"; } - @tpl_order = split /,/,$_; + + @tpl_order = split /,/,$_; my $scol = "itime"; foreach (@tpl_order){ my ($key,$des,$size) = split /=/,$_; - $ctrel->{$key} = $q->unescapeHTML("$ctrel->{$key}"); - $ctrel->{$key} = $lb->newline($ctrel->{$key},"","1"); + $ctadr->{$key} = $q->unescapeHTML("$ctadr->{$key}"); + $ctadr->{$key} = $lb->newline($ctadr->{$key},"","1"); #$des = "$tpl_id.$key" if($debug); $des = $varenv->{cms}->{"iframe-form-$tpl_id.$key"}->{txt} if($varenv->{cms}->{"iframe-form-$tpl_id.$key"}->{txt}); - if($ctrel->{int03} && $path =~ /$varenv->{accounting_3}|$varenv->{profile}/){ - if(1==1){ - if($key =~ /ct_name/){ - if($ctrel->{int12}){ - print $q->div({-class=>'content2', -style=>'color:#c83434;'}, "$varenv->{cms}->{'iframe-block-rental-access'}->{txt}"),"\n"; - }else{ - print $q->div({-class=>'content2'}, "$varenv->{cms}->{'iframe-success-welcome'}->{txt}"),"\n"; - } - print $q->div({-class=>'content2'}, "$varenv->{cms}->{'iframe-invoice-note'}->{txt}"),"\n"; - print $q->div({-class=>'content2'}, "$bonus_ak"),"\n" if($R::success && $R::success eq "txt15"); - }elsif($key =~ /barcode/){ - - if($cttpos_count){ - print $q->div({-style=>'padding-top:1.5em;font-weight:bold;'},"$varenv->{cms}->{'iframe-items-for-debit'}->{txt}"),"\n"; - - my @tpl_posorder = ("txt01=$varenv->{cms}->{'iframe-description'}->{txt}","int04=$varenv->{cms}->{'iframe-station'}->{txt}","ct_name=$varenv->{cms}->{'iframe-bike-nr'}->{txt}","int26=CO2","int02=$varenv->{cms}->{'iframe-amount'}->{txt}"); - - my $j=0; - my $nx=0; - my $sum = 0; - print "
\n"; - print $q->start_table({-style=>'margin:15px 0;', -border=>'0', -width=>'auto',-align=>'left', -cellpadding=>'3', -cellspacing=>'0'}),"\n"; - print $q->Tr(),"\n"; - - foreach my $id (sort { lc($cttpos->{$b}->{$scol}) cmp lc($cttpos->{$a}->{$scol}) } keys(%$cttpos)){ - $j++; - $nx++; - - my $pricing = {}; - my $counting = {}; - if($cttpos->{$id}->{int35} && $cttpos->{$id}->{start_time} && $cttpos->{$id}->{end_time}){ - ($pricing,$counting) = $pri->counting_rental($varenv,$cttpos->{$id}); - } - - print $q->Tr(),"\n"; - foreach (@tpl_posorder){ - my ($key,$val) = split /=/,$_; - - my $occupied_style = "background-color:#fcfdfb;"; - $occupied_style = "background-color:#f4f1ee;" if($nx %= 2); - #$occupied_style = "color:#ff1493;" if($cttpos->{$id}->{txt10} =~ /occupied|requested/); - $occupied_style = "color:#ff1493;" if($cttpos->{$id}->{int10} == 2 || $cttpos->{$id}->{int10} == 3); - - if($key eq "txt01"){ - #print $q->td({-class=>'tdtxt', -style=>"$occupied_style"},"$cttpos->{$id}->{$key}"); - print "\n"; - if($cttpos->{$id}->{txt01}){ - $cttpos->{$id}->{$key} =~ s/\
/;   /g; - print "$cttpos->{$id}->{$key}
\n"; - } - if($pricing->{start_time} && $pricing->{end_time}){ - $pricing->{start_time} = $lb->time4de($pricing->{start_time},"1"); - $pricing->{end_time} = $lb->time4de($pricing->{end_time},"1"); - my $rental_time = ""; - $rental_time = "(rental debug: $pricing->{real_clock} $pricing->{freed_time})" if($debug); - print $q->span("→ $pricing->{start_time}
← $pricing->{end_time} $rental_time"); - } - print "\n"; - }elsif($key =~ /int04/){ - if($cttpos->{$id}->{int09}){#if Tarifnr then bike - #print $q->td({-class=>'tdint', -style=>"$occupied_style"},"Station $cttpos->{$id}->{$key}"); - print "\n"; - my $return_station = ""; - $return_station = "← $cttpos->{$id}->{txt13}$cttpos->{$id}->{int04}" if($cttpos->{$id}->{txt13} && $cttpos->{$id}->{int04}); - print $q->span("$varenv->{cms}->{'iframe-station'}->{txt}
→ $cttpos->{$id}->{txt12}$cttpos->{$id}->{int06}
$return_station"); - print "\n"; - }else{ - print $q->td({-class=>'tdint', -style=>"$occupied_style"},"$cttpos->{$id}->{$key}"); - } - }elsif($key =~ /ct_name/){ - if($cttpos->{$id}->{int09}){#if Tarifnr then bike - print $q->td({-class=>'tdint', -style=>"$occupied_style"},"$varenv->{cms}->{'iframe-bike'}->{txt}
$cttpos->{$id}->{$key}"),"\n"; - }else{ - print $q->td({-class=>'tdint', -style=>"$occupied_style"},"$cttpos->{$id}->{$key}"),"\n"; - } - }elsif($key eq "int26"){ - my $co2saving = ""; - if($cttpos->{$id}->{int26}){ - $co2saving = "$varenv->{cms}->{'iframe-saving'}->{txt}
"; - my $co2diff = $pri->co2calc($cttpos->{$id}); - #my $sprit_price = $pri->sprit2calc($cttpos->{$id}); - $co2saving .= "$co2diff kg CO²
"; - #$co2saving .= "$sprit_price EUR
" if($sprit_price !~ /-/); - $cttpos->{$id}->{int26} =~ s/\./,/; - $co2saving .= "bei $cttpos->{$id}->{int26} KM"; - } - print $q->td({-class=>'tdint', -style=>"$occupied_style", -nowrap=>1},"$co2saving"),"\n"; - }elsif($key eq "int02"){ - if($cttpos->{$id}->{int35} && $cttpos->{$id}->{start_time} && $cttpos->{$id}->{end_time}){ - my $gesamt = 0; - $sum += $pricing->{total_price}; - $gesamt = $lb->round($pricing->{total_price}); - $gesamt = sprintf('%.2f', $gesamt); - $gesamt =~ s/\./,/; - 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 = ""; - ($gesamt,$rabatt) = $pri->price2calc($cttpos->{$id}); - $sum += $gesamt; - $gesamt = $lb->round($gesamt); - $gesamt = sprintf('%.2f',$gesamt); - $gesamt =~ s/\./,/; - print $q->td({-class=>'tdint', -style=>"$occupied_style", -nowrap=>1},"$rabatt $gesamt €"),"\n"; - } - } - } - } - if($j==0){ - print $q->Tr(),"\n"; - print $q->td({-class=>'tdint'},"$varenv->{cms}->{'iframe-no-data'}->{txt}"),"\n"; - }else{ - $sum = $lb->round($sum); - $sum = sprintf('%.2f',$sum); - print $q->Tr(),"\n"; - print $q->td({-class=>'tdint', -colspan=>3},""),"\n"; - print $q->td({-class=>'tdint'},"$varenv->{cms}->{'iframe-total'}->{txt}"),"\n"; - print $q->td({-class=>'tdint'},$q->b("$sum €")),"\n"; - } - print $q->end_table; - print "
\n"; - }else{ - print $q->div({-class=>'content2',-style=>'padding:0.5em 0;'}, "$varenv->{cms}->{'iframe-no-bookings'}->{txt}"),"\n"; - }#end if $cttpos_count - - my $i=0; - my $dtext = ""; - print "
\n"; - foreach my $id (sort { $ctt_all->{$b}->{ct_name} cmp $ctt_all->{$a}->{ct_name} } keys(%$ctt_all)){ - - if( -f "$ctt_all->{$id}->{basedir}/pdfinvoice/Rechnung-$ctt_all->{$id}->{operator}-$ctt_all->{$id}->{ct_name}.pdf" && $ctt_all->{$id}->{ct_name} =~ /\d/ && $coo){ - #print "$ctt_all->{$id}->{basedir}/pdfinvoice/Rechnung-$ctt_all->{$id}->{operator}-$ctt_all->{$id}->{ct_name}.pdf && $ctt_all->{$id}->{ct_name} =~ /\d/ && $coo
"; - $i++; - my $invoice_time = $ctt_all->{$id}->{invoice_time} || $ctt_all->{$id}->{mtime}; - $invoice_time = $lb->time4de($invoice_time,0); - #$varenv->{operator} only defined in sharee - my $webtarget = "_blank"; - my $dtext = ""; - if($varenv->{syshost} =~ /app/){ - $webtarget = "_self"; - $dtext = "$varenv->{cms}->{'iframe-pdf-download-info'}->{txt}"; - } - - if($i==1){ - print $q->div({-id=>'Rechnungen',-style=>'font-weight:bold;'},"$varenv->{cms}->{'iframe-your-invoice'}->{txt}"),"\n"; - print $q->div({-style=>'padding:0.5em 0;'},"$dtext"),"\n"; - } - print $q->div({-style=>'padding:0.7em 0;border:0px solid #cccccc;'},$q->a({-href=>"$ctt_all->{$id}->{wwwhost}/FileOut?file=Rechnung-$ctt_all->{$id}->{operator}-$ctt_all->{$id}->{ct_name}.pdf&sessionid=$coo", -target=>"$webtarget" , -type=>'application/octet-stream', -style=>'text-decoration:underline;'}, $q->span({-class=>"bi bi-file-earmark-pdf"}), "$varenv->{cms}->{'iframe-invoice'}->{txt} $ctt_all->{$id}->{ct_name}.pdf"), "   ($invoice_time)"),"\n"; - } - - } - print "
\n"; - } - } - } - #------------------------------------------------------ - my $label_des="* $des"; my $autofocus=""; if($key =~ /txt15|txt19/){ @@ -502,7 +279,7 @@ EOF if($key =~ /txt/ && $size eq "select" && $key eq "txt10"){ my $country = $lb->country_code(); my $country_all = $lb->country_code_all(); - $ctrel->{$key} = "DE" if(!$ctrel->{$key}); + $ctadr->{$key} = "DE" if(!$ctadr->{$key}); my @_valxx = (); foreach (sort { $country->{$a} cmp $country->{$b} } keys (%$country)){ push @_valxx, "$_:$country->{$_}"; @@ -512,39 +289,23 @@ EOF } print $q->label({-for=>"$key",-style=>'padding-top:15px;'},"$label_des"),"\n"; - print $but->selector_class("$key","form-control","","$ctrel->{$key}",@_valxx); + print $but->selector_class("$key","form-control","","$ctadr->{$key}",@_valxx); }elsif($key =~ /txt/ && $size eq "select"){ my @_valxx = split(/,/,$varenv->{$des}); print $q->label({-for=>"$key",-style=>'padding-top:15px;'},"$label_des"),"\n"; - print $but->selector_class("$key","form-control","","$ctrel->{$key}",@_valxx); + print $but->selector_class("$key","form-control","","$ctadr->{$key}",@_valxx); - #}elsif($key =~ /txt/ && !$R::confirm_success){ }elsif($key =~ /txt/){ my $required="required"; - #start failure messages - #Gutschein - if($key =~ /txt16/ && $ctrel->{c_id}){ - if($R::failure =~ /^txt16/){ - $autofocus = "autofocus"; - $label_des = "$varenv->{cms}->{'iframe-voucher-not-available'}->{txt}"; - } - elsif($R::failure =~ /conflict_txt16/){ - $autofocus = "autofocus"; - $label_des = "$varenv->{cms}->{'iframe-voucher-deposit'}->{txt}"; - }else{ - $required=""; - $label_des = "$des"; - } - } - elsif($key eq "txt08" && $R::failure && $R::failure =~ /conflict_txt08/){ + if($key eq "txt08" && $R::failure && $R::failure =~ /conflict_txt08/){ $autofocus = "autofocus"; my ($failkey,$failval) = split(/=/,$R::failure); $label_des = "$varenv->{cms}->{'iframe-attention-email-exist'}->{txt} $failval"; - $ctrel->{$key} = $R::conflict_txt08; + $ctadr->{$key} = $R::conflict_txt08; } - elsif(($R::failure && $R::failure =~ /^$key/) || ($ctrel->{txt31} && $ctrel->{txt31} =~ /$key/)){ + elsif(($R::failure && $R::failure =~ /^$key/) || ($ctadr->{txt31} && $ctadr->{txt31} =~ /$key/)){ $autofocus = "autofocus"; $varenv->{cms}->{'iframe-correct-input'}->{txt} =~ s/::input::/$des/; $label_des = "$varenv->{cms}->{'iframe-correct-input'}->{txt}"; @@ -585,7 +346,7 @@ EOF $label_des = "$varenv->{cms}->{'iframe-repeat-pw-failure'}->{txt}"; } my $pw = "xxxxxxxx"; - $pw = "" if(!$ctrel->{c_id}); + $pw = "" if(!$ctadr->{c_id}); print $q->label({-for=>"$key", -style=>'padding-top:1.5em;'},"$label_des"),"\n"; print "
\n"; print $q->label({-for=>"confirm_$key"},"* $varenv->{cms}->{'iframe-repeat-pw'}->{txt}"),"\n"; @@ -594,14 +355,14 @@ EOF }else{ #all other input textfields print $q->label({-for=>"$key", -style=>'padding-top:1.5em;'},"$label_des"),"\n"; - print "\n"; + print "\n"; } } #end $key =~ /txt/ #all int checkboxes disabled because of AGB downunder elsif($key =~ /int/ && $size eq "checkbox"){ - if(($R::failure && $R::failure =~ /^$key/) || ($ctrel->{txt31} && $ctrel->{txt31} =~ /$key/)){ + if(($R::failure && $R::failure =~ /^$key/) || ($ctadr->{txt31} && $ctadr->{txt31} =~ /$key/)){ $autofocus = "autofocus"; $varenv->{cms}->{'iframe-please-confirm'}->{txt} =~ s/::value::/$des/; $label_des = "$varenv->{cms}->{'iframe-please-confirm'}->{txt}"; @@ -615,7 +376,7 @@ EOF my $sharee_agb = "\n"; print $q->label({-for=>"$key", -style=>'padding-top:20px;'},"$label_des"),"\n"; - print $q->div({-id=>"$key"},$but->checkbox("1","$key","$ctrel->{$key}","","$required","$autofocus"), "  $sharee_agb"),"\n"; + print $q->div({-id=>"$key"},$but->checkbox("1","$key","$ctadr->{$key}","","$required","$autofocus"), "  $sharee_agb"),"\n"; print $q->hidden(-name=>"$key",-override=>1,-value=>"null"); my $sharee_privacy = "\n"; @@ -624,16 +385,16 @@ EOF }elsif(1==2 && $key =~ /int02/){#newsletter print $q->label({-for=>"$key", -style=>'padding-top:10px;'},""),"\n"; - print $q->div({-id=>"$key"},$but->checkbox("1","$key","$ctrel->{$key}","","$required"), " $des"),"\n"; + print $q->div({-id=>"$key"},$but->checkbox("1","$key","$ctadr->{$key}","","$required"), " $des"),"\n"; print $q->hidden(-name=>"$key",-override=>1,-value=>"0"); }else{ print $q->label({-for=>"$key", -style=>'padding-top:10px;'},""),"\n"; - print $q->div({-id=>"$key"},$but->checkbox("1","$key","$ctrel->{$key}","","$required"), " $des"),"\n"; + print $q->div({-id=>"$key"},$but->checkbox("1","$key","$ctadr->{$key}","","$required"), " $des"),"\n"; print $q->hidden(-name=>"$key",-override=>1,-value=>"0"); } }elsif($key =~ /int/){ - if(($R::failure && $R::failure =~ /^$key/) || ($ctrel->{txt31} && $ctrel->{txt31} =~ /$key/)){ + if(($R::failure && $R::failure =~ /^$key/) || ($ctadr->{txt31} && $ctadr->{txt31} =~ /$key/)){ $autofocus = "autofocus"; $varenv->{cms}->{'iframe-please-confirm'}->{txt} =~ s/::value::/$des/; $label_des = "$varenv->{cms}->{'iframe-please-confirm'}->{txt}"; @@ -649,40 +410,39 @@ EOF my $checked_prepaid = ""; foreach my $p_id (sort keys (%{ $dbt->{copri_conf}->{payment_type} })) { - $checked_sepa = 1 if($ctrel->{$key} == 1); - $checked_creditcard = 2 if($ctrel->{$key} == 2); - $checked_prepaid = 3 if($ctrel->{$key} == 3); + $checked_sepa = 1 if($ctadr->{$key} == 1); + $checked_creditcard = 2 if($ctadr->{$key} == 2); + $checked_prepaid = 3 if($ctadr->{$key} == 3); if($p_id == 1){ print $q->div({ -class=>'radio', -style=>'padding-top:20px;' },$but->radiobox_vertical("$key","$p_id","$checked_sepa",$q->img({-id=>"pic-payment" ,-style=>'height:50px;', -title=>"$dbt->{copri_conf}->{payment_type}->{$p_id}",-src=>"$varenv->{metahost}/img/payment-incasso2.png"}))),"\n"; }elsif($p_id == 2){ print $q->div({ -class=>'radio', -style=>'padding-top:20px;' },$but->radiobox_vertical("$key","$p_id","$checked_creditcard",$q->img({-id=>"pic-payment" ,-style=>'height:25px;', -title=>"$dbt->{copri_conf}->{payment_type}->{$p_id}",-src=>"$varenv->{metahost}/img/payment-creditcard2.png"}))),"\n"; }elsif($p_id == 3){ - print $q->div({ -class=>'radio', -style=>'padding-top:25px;' },$but->radiobox_vertical("$key","$p_id","$checked_prepaid","Prepaid")),"\n" if($ctrel->{c_id} && $dbt->{copri_conf}->{betau_id}->{$ctrel->{c_id}});#testing by contributors + print $q->div({ -class=>'radio', -style=>'padding-top:25px;' },$but->radiobox_vertical("$key","$p_id","$checked_prepaid","Prepaid")),"\n" if($ctadr->{c_id} && $dbt->{copri_conf}->{betau_id}->{$ctadr->{c_id}});#testing by contributors } } print $q->hidden(-name=>"$key",-override=>1,-value=>"null"); } } - if($key eq "txt16" && $ctrel->{c_id}){ + if($key eq "txt16" && $ctadr->{c_id}){ print $q->div({-style=>'margin-top:1em;text-align:center;'},""),"\n"; } }#end foreach (@tpl_order) } - if(($R::failure && $R::failure =~ /\w+/ && $R::failure !~ /txt15|txt16/) || ($ctrel->{txt31} && $ctrel->{txt31} =~ /\w/)){ + if(($R::failure && $R::failure =~ /\w+/ && $R::failure !~ /txt15|txt16/) || ($ctadr->{txt31} && $ctadr->{txt31} =~ /\w/)){ print $q->div({-class=>'content2', -style=>"color:$red"}, "* $varenv->{cms}->{'iframe-please-check-profile'}->{txt}"),"\n"; } if($path !~ /$varenv->{accounting_3}|$varenv->{profile}/){ - if($ctrel->{c_id}){ + if($ctadr->{c_id}){ my $button_name = "$varenv->{cms}->{'iframe-save'}->{txt}"; $button_name = "$varenv->{cms}->{'iframe-next'}->{txt}" if($path =~ /$varenv->{accounting_1_5}|$varenv->{accounting_2}/); - print $q->hidden(-name=>"tinkc_id",-override=>1,-value=>"$ctrel->{c_id}"); print $q->div({-style=>'margin-top:1em;text-align:center;'},""),"\n"; if($path =~ /$varenv->{accounting_1}/){ - print $q->div({-style=>'margin-top:3em;text-align:center;'},$q->a({-style=>"color:#$bgcolor1;font-size:1.2em;", -role=>"button", -href=>"/$viewsel[0]/Account?sharee_edit=delete_account1$session_and"}, "$varenv->{cms}->{'iframe-ask-delete-account'}->{txt}")),"\n"; + print $q->div({-style=>'margin-top:3em;text-align:center;'},$q->a({-style=>"color:#$bgcolor1;font-size:1.2em;", -role=>"button", -href=>"$varenv->{wwwhost}/app/Account?sharee_edit=delete_account1$session_and"}, "$varenv->{cms}->{'iframe-ask-delete-account'}->{txt}")),"\n"; } }else{ print $q->div({-style=>'margin-top:1em;text-align:center;'},""),"\n"; diff --git a/copri4/shareeapp-operator/src/Tpl/PayoneLink.pm b/copri4/shareeapp-operator/src/Tpl/PayoneLink.pm new file mode 100755 index 0000000..70da085 --- /dev/null +++ b/copri4/shareeapp-operator/src/Tpl/PayoneLink.pm @@ -0,0 +1,111 @@ +package PayoneLink; +# +# SPDX-License-Identifier: AGPL-3.0-or-later +# Copyright (c) Rainer Gümpelein, TeilRad GmbH +# +use strict; +use warnings; +use POSIX; +use CGI ':standard'; +use Mod::Buttons; +use Mod::Basework; +use Mod::DBtank; +use Mod::Prelib; +use Mod::Pricing; +use Mod::Payment; +use Data::Dumper; + +sub new { + my $class = shift; + my $self = {}; + bless($self,$class); + return $self; +} + +#Template +sub tpl(){ + my $self = shift; + my $tpl_id = shift; + my $node_meta = shift; + my $users_dms = shift || ""; + my $varenv = shift; + my $users_sharee = shift || ""; + my $feedb = shift || ""; + + my $q = new CGI; + my $bw = new Basework; + my $dbt = new DBtank; + my $but = new Buttons; + my $pl = new Prelib; + my $pri = new Pricing; + my $pay = new Payment; + + $q->import_names('R'); + my @keywords = $q->param; + my $dbh = ""; + my $bgcolor1 = "009899";#sharee + $bgcolor1 = $dbt->{website}->{$varenv->{syshost}}->{bgcolor1} if($dbt->{website}->{$varenv->{syshost}}->{bgcolor1}); + $bgcolor1 = $dbt->{merchant_ids}->{$varenv->{merchant_id}}->{bgcolor1} if($dbt->{merchant_ids}->{$varenv->{merchant_id}}->{bgcolor1}); + my $aowner = "198"; + $aowner = $dbt->{merchant_ids}->{$varenv->{merchant_id}}->{id} if($varenv->{merchant_id} && $dbt->{merchant_ids}->{$varenv->{merchant_id}}->{id}); + + + my $coo = $q->cookie(-name=>'domcookie') || $R::sessionid; + my $ctadr = { c_id => 0 }; + $ctadr = $users_sharee if(ref($users_sharee) eq "HASH" && $users_sharee->{c_id}); + my $payable_check=0; + $payable_check = $bw->isuser_rentable($ctadr,$varenv); + my $prepaidhash = {}; + $prepaidhash = $pri->collect_prepaid($dbh,$ctadr) if($ctadr->{c_id}); + if(!$prepaidhash->{prepaid_id} && $ctadr->{c_id}){ + $feedb = $pl->prepaid_request($dbh,$ctadr,$aowner); + $prepaidhash = $pri->collect_prepaid($dbh,$ctadr); + } + my $ret_json = ""; + + print $q->start_form(),"\n"; + print $q->hidden(-name=>"sessionid",-override=>1,-value=>"$R::sessionid"); + + print "
\n"; + print $q->div({-class=>'content_title3'},"$varenv->{cms}->{'iframe-prepay-account'}->{txt}"),"\n"; + + if($prepaidhash->{prepaid_id}){ + #print $q->hidden(-name=>"prepaid_id",-override=>1,-value=>"$prepaidhash->{prepaid_id}"); + if($ctadr->{c_id} && $R::sharee_edit && $R::sharee_edit =~ /generate_payonelink/){ + $ret_json = $pay->generate_payonelink($varenv,$ctadr,$prepaidhash,$R::prepaid_amount,$aowner); + } + $prepaidhash->{prepaid_total} = sprintf('%.2f',$prepaidhash->{prepaid_total}); + $prepaidhash->{prepaid_total} =~ s/\./,/; + $varenv->{cms}->{'iframe-prepay-prolog'}->{txt} =~ s/\n/
/g; + $varenv->{cms}->{'iframe-prepay-prolog'}->{txt} =~ s/::prepaid_total::/$prepaidhash->{prepaid_total} €<\/b>/g; + $varenv->{cms}->{'iframe-prepay-prolog'}->{txt} =~ s/::app_name::/$dbt->{merchant_ids}->{$varenv->{merchant_id}}->{app_name}<\/b>/g; + $varenv->{cms}->{'iframe-prepay-prolog'}->{txt} =~ s/::prepaid_id::/$prepaidhash->{prepaid_id}<\/b>/g; + print $q->div({-class=>'content2'}, "$varenv->{cms}->{'iframe-prepay-prolog'}->{txt}"),"\n"; + }else{ + print $q->div({-class=>'content2'}, "$varenv->{cms}->{'iframe-failure-contact-hotline'}->{txt} $prepaidhash->{prepaid_id}"),"\n"; + } + + if(!$ret_json || $ret_json =~ /failure/){ + my $required="required"; + print $q->div({-class=>'content2', -style=>'color:#c83434;'}, "$varenv->{cms}->{'iframe-prepay-failure'}->{txt}"),"\n" if($ret_json =~ /failure/); + + my $label_des="$varenv->{cms}->{'iframe-prepay-input'}->{txt}"; + print $q->label({-for=>"prepaid_amount", -style=>'padding-top:1.5em;'},"$label_des"),"\n"; + print "\n"; + + print $q->div({-style=>'margin-top:1em;text-align:center;'},""),"\n"; + + }elsif($ret_json){ + #TODO payone-link mailing + $varenv->{cms}->{'iframe-prepay-emailinfo'}->{txt} =~ s/::app_name::/$dbt->{merchant_ids}->{$varenv->{merchant_id}}->{app_name}<\/b>/g; + print $q->div({-class=>'content2', -style=>'color:#009899;'}, "$varenv->{cms}->{'iframe-prepay-emailinfo'}->{txt}"),"\n"; + print $q->div({-class=>'content2'}, ""),"\n"; + print Dumper($ret_json) . "
\n"; + + } + + print "
\n"; + print $q->end_form,"\n"; + +} +1; diff --git a/copri4/shareeapp-operator/src/Tpl/PayoneSEPA.pm b/copri4/shareeapp-operator/src/Tpl/PayoneSEPA.pm index b20e879..a215a7c 100755 --- a/copri4/shareeapp-operator/src/Tpl/PayoneSEPA.pm +++ b/copri4/shareeapp-operator/src/Tpl/PayoneSEPA.pm @@ -11,8 +11,6 @@ use Mod::Buttons; use Mod::Basework; use Mod::Shareework; use Mod::DBtank; -use Mod::Pricing; -use Sys::Hostname; sub new { my $class = shift; @@ -35,7 +33,6 @@ sub tpl(){ my $bw = new Basework; my $tk = new Shareework; my $dbt = new DBtank; - my $pri = new Pricing; my $but = new Buttons; $q->import_names('R'); @@ -55,13 +52,10 @@ sub tpl(){ print $q->start_form(),"\n"; print $q->hidden(-name=>"sessionid",-override=>1,-value=>"$R::sessionid"); - print $q->hidden(-name=>"tinkc_id",-override=>1,-value=>"$ctadr->{c_id}"); print $q->hidden(-name=>"request",-override=>1,-value=>"managemandate"); print "
\n"; - #SEPA - if($tpl_id == 309){ print $q->div({-class=>'content_title3'},"$varenv->{cms}->{'iframe-bank-account'}->{txt}"),"\n"; print $q->div({-class=>'content2'}, "$varenv->{cms}->{'iframe-sepa-mandat-prolog'}->{txt}"),"\n"; #print $q->div({-class=>'content2'}, "Zur Validierung Ihrer Zahlungsdaten wird eine 1,- € Testbuchung vorgenommen. Wir werden nach erfolgreicher Abbuchung den Betrag als Mietgutschrift in Ihrem Account hinterlegen."),"\n"; @@ -82,6 +76,10 @@ sub tpl(){ $varenv->{cms}->{'iframe-correct-input'}->{txt} =~ s/::input::/$des/; $label_des = "$varenv->{cms}->{'iframe-correct-input'}->{txt}"; } + if($R::failure eq "conflict_txt22" && $R::txt22){ + $varenv->{cms}->{'iframe-sepa-conflict'}->{txt} =~ s/::input::/$R::txt22/; + $label_des = "$varenv->{cms}->{'iframe-sepa-conflict'}->{txt}"; + } print $q->label({-for=>"$key", -style=>'padding-top:1.5em;'},"$label_des"),"\n"; print "\n"; @@ -91,7 +89,7 @@ sub tpl(){ #------------------------ }elsif($key =~ /int03/ && $size eq "checkbox"){ - if(!$payable_check){ + if(!$payable_check || !-f "$varenv->{basedir}/pdfinvoice/SEPA-Lastschriftmandat-$varenv->{praefix}-$ctadr->{ct_name}.pdf"){ my $int03 = ""; #$int03 = $ctadr->{$key} if($ctadr->{$key} == 1); print $q->div({-style=>'margin:10px 0;'},"$varenv->{cms}->{'iframe-sepa-mandat'}->{txt}"),"\n"; @@ -130,48 +128,6 @@ sub tpl(){ print $q->div({-style=>'margin-top:1em;text-align:center;'},""),"\n"; - }#end SEPA - #prepay - elsif($tpl_id == 313){ - - my $posref = { - table => "contenttrans", - table_pos => "contenttranspos", - fetch => "all", - keyfield => "c_id", - ca_id => "$ctadr->{c_id}", - 'ct.state' => "is::null", - 'ct.int14' => "is::null", - }; - my $cttpos = { c_id => 0 }; - $cttpos = $dbt->collect_post($dbh,$posref); - #TODO negative counting booked operator invoices - my $total_prepaid = 0; - my $prepay_id = 0; - foreach my $id (sort { $cttpos->{$b}->{c_id} <=> $cttpos->{$a}->{c_id} } keys(%$cttpos)){ - #print $cttpos->{$id}->{barcode} . ":" . $cttpos->{$id}->{int02},"
"; - if($cttpos->{$id}->{int02} > 0){ - $total_prepaid += $cttpos->{$id}->{int02}; - } - if($cttpos->{$id}->{int02} == 0){ - $prepay_id = $cttpos->{$id}->{barcode}; - } - } - print $q->div({-class=>'content_title3'},"$varenv->{cms}->{'iframe-prepay-account'}->{txt}"),"\n"; - if(!$prepay_id){ - print $q->div({-class=>'content2'}, "$varenv->{cms}->{'iframe-failure-contact-hotline'}->{txt} $prepay_id"),"\n"; - }else{ - $total_prepaid = sprintf('%.2f',$total_prepaid); - $total_prepaid =~ s/\./,/; - $varenv->{cms}->{'iframe-prepay-prolog'}->{txt} =~ s/\n/
/g; - $varenv->{cms}->{'iframe-prepay-prolog'}->{txt} =~ s/::total_prepaid::/$total_prepaid €<\/b>/g; - $varenv->{cms}->{'iframe-prepay-prolog'}->{txt} =~ s/::app_name::/$dbt->{merchant_ids}->{$varenv->{merchant_id}}->{app_name}<\/b>/g; - $varenv->{cms}->{'iframe-prepay-prolog'}->{txt} =~ s/::prepaid_id::/$prepay_id<\/b>/g; - print $q->div({-class=>'content2'}, "$varenv->{cms}->{'iframe-prepay-prolog'}->{txt}"),"\n"; - } - - } - print "
\n"; print $q->end_form,"\n"; } diff --git a/copri4/shareeapp-operator/src/Tpl/PayoneSelect.pm b/copri4/shareeapp-operator/src/Tpl/PayoneSelect.pm index 1251d10..f54e02d 100755 --- a/copri4/shareeapp-operator/src/Tpl/PayoneSelect.pm +++ b/copri4/shareeapp-operator/src/Tpl/PayoneSelect.pm @@ -10,6 +10,7 @@ use CGI ':standard'; use Tpl::AccountSubmenu; use Tpl::PayoneSEPA; use Tpl::PayoneCCclient; +use Tpl::PayoneLink; sub new { @@ -32,6 +33,7 @@ sub tpl(){ my $submenu = new AccountSubmenu; my $payDebit = new PayoneSEPA; my $payCC = new PayoneCCclient; + my $payLink = new PayoneLink; print "
\n"; @@ -44,7 +46,7 @@ sub tpl(){ }elsif($users_sharee->{int03} == 2){ $payCC->tpl("310",$node_meta,$users_dms,$varenv,$users_sharee,$feedb); }elsif($users_sharee->{int03} == 3){ - $payDebit->tpl("313",$node_meta,$users_dms,$varenv,$users_sharee,$feedb); + $payLink->tpl("313",$node_meta,$users_dms,$varenv,$users_sharee,$feedb); } } diff --git a/copri4/shareeapp-operator/src/Tpl/RentalData.pm b/copri4/shareeapp-operator/src/Tpl/RentalData.pm new file mode 100755 index 0000000..9cf4b4c --- /dev/null +++ b/copri4/shareeapp-operator/src/Tpl/RentalData.pm @@ -0,0 +1,375 @@ +package RentalData; +# +# SPDX-License-Identifier: AGPL-3.0-or-later +# Copyright (c) Rainer Gümpelein, TeilRad GmbH +# +use strict; +use warnings; +use POSIX; +use CGI ':standard'; +use Mod::Basework; +use Mod::Libenz; +use Mod::DBtank; +use Mod::APIfunc; +use Mod::Pricing; +use Tpl::AccountSubmenu; +use Data::Dumper; + +sub new { + my $class = shift; + my $self = {}; + bless($self,$class); + return $self; +} + +sub tpl { + my $node_meta = shift; + my $users_dms = shift || ""; + my $varenv = shift; + my $ctadr = shift || ""; + my $feedb = shift || ""; + + my $q = new CGI; + my $bw = new Basework; + my $lb = new Libenz; + my $dbt = new DBtank; + my $apif = new APIfunc; + my $pri = new Pricing; + my $submenu = new AccountSubmenu; + my $path = $q->path_info(); + my $dbh = ""; + my $red = "red"; + + my $coo = $q->cookie(-name=>'domcookie') || $R::sessionid; + my $session=""; + my $session_and=""; + if($R::sessionid && length($R::sessionid) > 20 && !$q->cookie(-name=>'domcookie')){ + $session = "?sessionid=$R::sessionid"; + $session_and = "&sessionid=$R::sessionid"; + } + my $bgcolor1 = "009899";#sharee + $bgcolor1 = $dbt->{website}->{$varenv->{syshost}}->{bgcolor1} if($dbt->{website}->{$varenv->{syshost}}->{bgcolor1}); + $bgcolor1 = $dbt->{merchant_ids}->{$varenv->{merchant_id}}->{bgcolor1} if($dbt->{merchant_ids}->{$varenv->{merchant_id}}->{bgcolor1}); + + my $tpl_id = $node_meta->{tpl_id}; + my $tpl = $dbt->get_tpl($dbh,$tpl_id); + my @tpl_order = split /,/,$tpl->{tpl_order}; + + my ($cttpos,$operator_hash) = $apif->user_rentals_history($q,$ctadr); + my $cttpos_count=0; + foreach my $id (keys(%$cttpos)){ + $cttpos_count++; + } + + #loop operator hash to get invoices for each operator + my $ctt_all = {}; + my $ctadrcoupon = {}; + foreach my $sharee_operator (keys (%$operator_hash)){ + my $dbh_operator = $dbt->dbconnect_extern("$sharee_operator"); + my $pref = { + table => "contenttrans", + fetch => "all", + int10 => "$ctadr->{c_id}", + keyfield => "ct_name", + ct_name => "~::[1-9]", + }; + + + if($ctadr->{c_id}){ + my $ctt = $dbt->fetch_tablerecord($dbh_operator,$pref); + foreach my $id (keys(%$ctt)){ + $ctt->{$id}->{wwwhost} = "$operator_hash->{$sharee_operator}"; + $ctt->{$id}->{operator} = "$sharee_operator"; + $ctt->{$id}->{basedir} = "$dbt->{copri_conf}->{basedir}/$dbt->{operator}->{$sharee_operator}->{dir_app}"; + } + $ctt_all = { %$ctt_all, %$ctt }; + + my $prefcoupon = { + table => "contentadr", + fetch => "one", + txt15 => "~::\\w", + c_id => "$ctadr->{c_id}", + }; + + $ctadrcoupon->{$sharee_operator} = $dbt->fetch_tablerecord($dbh_operator,$prefcoupon); + $ctadrcoupon->{$sharee_operator}->{oprefix} = "$dbt->{operator}->{$sharee_operator}->{oprefix}"; + } + } + + my $project = "Freiburg";#defaults to sharee + $project = $dbt->{merchant_ids}->{$varenv->{merchant_id}}->{project} if($varenv->{merchant_id} && $dbt->{merchant_ids}->{$varenv->{merchant_id}}->{project}); + my $bonus_ak = "$varenv->{cms}->{'iframe-bonusnumber-accepted'}->{txt}"; + $bonus_ak = "$varenv->{cms}->{'iframe-activation-code-info'}->{txt}" if($project eq "Freiburg"); + + my $payable_check=0; + $payable_check = $bw->isuser_rentable($ctadr,$varenv); + + print "
\n"; + + #subMenue-------- + $submenu->tpl($node_meta,$users_dms,$varenv,$ctadr,$feedb); + #----------------- + + my $debug=0; + $debug=1 if($ctadr->{c_id} eq $dbt->{copri_conf}->{superu_id} || $dbt->{copri_conf}->{stage} eq "test"); + my $debug_message = ""; + my $catch_failure=0; + if(($R::failure && $R::failure =~ /\w+/) || ($ctadr->{txt31} && $ctadr->{txt31} =~ /\w/)){ + $debug_message = "($R::failure || $ctadr->{txt31})" if($debug); + $catch_failure=1; + print $q->div({-class=>'content2', -style=>"clear:both;color:$red"}, "* $varenv->{cms}->{'iframe-one-error'}->{txt} $debug_message"),"\n"; + } + + #confirm code manage + if($catch_failure && (!$ctadr->{int04} && !$ctadr->{int13}) && ($tpl_id =~ /^2$|302004/) && ($path =~ /$varenv->{accounting_3}/)){ + $debug_message = "$catch_failure && (!$ctadr->{int04} || !$ctadr->{int13}) && $tpl_id" if($debug); + print $q->div({-class=>'content2'}, "$varenv->{cms}->{'iframe-complete-confirmation'}->{txt} $debug_message"),"\n"; + }elsif((!$ctadr->{int04} || !$ctadr->{int13}) && ($tpl_id =~ /^2$|302004/) && ($path =~ /$varenv->{accounting_3}/)){ + + print $q->start_form(-name=>'accountscreen', -action=>"/$varenv->{mandant}/Account/$varenv->{accounting_3}$session"),"\n"; + print $q->hidden(-name=>"sessionid",-override=>1,-value=>"$R::sessionid"); + my $required = ""; + $debug_message = "(!$ctadr->{int04} || !$ctadr->{int13}) && $tpl_id" if($debug); + print $q->div({-class=>'content_title3',-style=>'clear:both;'}, "$varenv->{cms}->{'iframe-almost-done'}->{txt} $debug_message"),"\n"; + my $acktext = "$varenv->{cms}->{'iframe-confirmation-codes-sent'}->{txt}"; + $acktext = "$varenv->{cms}->{'iframe-sms-confirmation-code-sent'}->{txt}" if($ctadr->{int04} && !$ctadr->{int13}); + $acktext = "$varenv->{cms}->{'iframe-email-confirmation-code-sent'}->{txt}" if(!$ctadr->{int04} && $ctadr->{int13}); + print $q->div({-class=>'content2'}, "$acktext $varenv->{cms}->{'iframe-successful-confirmation'}->{txt}"),"\n"; + if(!$ctadr->{int04}){ + my $des = "$varenv->{cms}->{'iframe-email-code'}->{txt}"; + my $key = "confirm_code"; + my $label_des="* $des"; + $varenv->{cms}->{'iframe-correct-input'}->{txt} =~ s/::input::/$des/; + $label_des = "$varenv->{cms}->{'iframe-correct-input'}->{txt}" if($R::failure); + print $q->label({-for=>"$key", -style=>'padding-top:1em;'},"$label_des"),"\n"; + print "\n"; + print $q->div({-class=>'content2'}, " $varenv->{cms}->{'iframe-if-email-code-not-received'}->{txt}",$q->a({-style=>"color:#$bgcolor1;",-href=>"$varenv->{wwwhost}?sharee_edit=send_email$session_and"},"$varenv->{cms}->{'iframe-request-email-code'}->{txt}")),"\n"; + }else{ + print $q->div({-class=>'content2', -style=>'color:gray;'}, "* $varenv->{cms}->{'iframe-email-code-already-entered'}->{txt}"),"\n"; + } + if(!$ctadr->{int13}){ + my $des = "$varenv->{cms}->{'iframe-sms-code'}->{txt}"; + my $key = "confirm_smscode"; + my $label_des="* $des"; + $varenv->{cms}->{'iframe-correct-input'}->{txt} =~ s/::input::/$des/; + $label_des = "$varenv->{cms}->{'iframe-correct-input'}->{txt}" if($R::failure); + print $q->label({-for=>"$key", -style=>'padding-top:1em;'},"$label_des"),"\n"; + print "\n"; + #print $q->div({-class=>'content2'}, "$varenv->{cms}->{'iframe-if-sms-code-not-received'}->{txt} ",$q->a({-style=>"color:#$bgcolor1;",-href=>"$varenv->{wwwhost}?sharee_edit=send_sms$session_and"},"$varenv->{cms}->{'iframe-request-sms-code'}->{txt}")),"\n"; + }else{ + print $q->div({-class=>'content2', -style=>'color:gray;'}, "* $varenv->{cms}->{'iframe-sms-code-already-entered'}->{txt}"),"\n"; + } + + my $button_name = "$varenv->{cms}->{'iframe-next'}->{txt}"; + print $q->div({-style=>'margin-top:2em;text-align:center;'},""),"\n"; + print $q->end_form,"\n"; + + }#end confirm code manage + else{ + + + print $q->start_form(-name=>'accountscreen', -action=>"/$varenv->{mandant}/Account/$varenv->{accounting_3}$session"),"\n"; + print $q->hidden(-name=>"sessionid",-override=>1,-value=>"$R::sessionid"); + + if($R::confirm_success){ + print $q->div({-class=>'content_title3'},"$varenv->{cms}->{'iframe-registration-confirmed'}->{txt}"),"\n"; + }else{ + print $q->div({-class=>'content_title3'},"$varenv->{cms}->{$tpl->{tpl_name}}->{txt}"),"\n"; + } + + my $scol = "itime"; + foreach (@tpl_order){ + my ($key,$des,$size) = split /=/,$_; + $ctadr->{$key} = $q->unescapeHTML("$ctadr->{$key}"); + $ctadr->{$key} = $lb->newline($ctadr->{$key},"","1"); + + #$des = "$tpl_id.$key" if($debug); + $des = $varenv->{cms}->{"iframe-form-$tpl_id.$key"}->{txt} if($varenv->{cms}->{"iframe-form-$tpl_id.$key"}->{txt}); + + if($key =~ /ct_name/){ + if($ctadr->{int12}){ + print $q->div({-class=>'content2', -style=>'color:#c83434;'}, "$varenv->{cms}->{'iframe-block-rental-access'}->{txt}"),"\n"; + }elsif($R::confirm_success){ + print $q->div({-class=>'content2'}, "$varenv->{cms}->{'iframe-success-welcome'}->{txt}"),"\n"; + }else{ + #print $q->div({-class=>'content2'}, ""),"\n"; + } + print $q->div({-class=>'content2'}, "$varenv->{cms}->{'iframe-invoice-note'}->{txt}"),"\n"; + print $q->div({-class=>'content2'}, "$bonus_ak"),"\n" if($R::success && $R::success eq "txt15"); + + }elsif($key =~ /barcode/){ + + if($cttpos_count){ + print $q->div({-style=>'padding-top:1.5em;font-weight:bold;'},"$varenv->{cms}->{'iframe-items-for-debit'}->{txt}"),"\n"; + + my @tpl_posorder = ("txt01=$varenv->{cms}->{'iframe-description'}->{txt}","int04=$varenv->{cms}->{'iframe-station'}->{txt}","ct_name=$varenv->{cms}->{'iframe-bike-nr'}->{txt}","int26=CO2","int02=$varenv->{cms}->{'iframe-amount'}->{txt}"); + + my $j=0; + my $nx=0; + my $sum = 0; + print "
\n"; + print $q->start_table({-style=>'margin:15px 0;', -border=>'0', -width=>'auto',-align=>'left', -cellpadding=>'3', -cellspacing=>'0'}),"\n"; + print $q->Tr(),"\n"; + + foreach my $id (sort { lc($cttpos->{$b}->{$scol}) cmp lc($cttpos->{$a}->{$scol}) } keys(%$cttpos)){ + $j++; + $nx++; + + my $pricing = {}; + my $counting = {}; + if($cttpos->{$id}->{int35} && $cttpos->{$id}->{start_time} && $cttpos->{$id}->{end_time}){ + ($pricing,$counting) = $pri->counting_rental($varenv,$cttpos->{$id}); + } + + print $q->Tr(),"\n"; + foreach (@tpl_posorder){ + my ($key,$val) = split /=/,$_; + + my $occupied_style = "background-color:#fcfdfb;"; + $occupied_style = "background-color:#f4f1ee;" if($nx %= 2); + #$occupied_style = "color:#ff1493;" if($cttpos->{$id}->{txt10} =~ /occupied|requested/); + $occupied_style = "color:#ff1493;" if($cttpos->{$id}->{int10} == 2 || $cttpos->{$id}->{int10} == 3); + + if($key eq "txt01"){ + #print $q->td({-class=>'tdtxt', -style=>"$occupied_style"},"$cttpos->{$id}->{$key}"); + print "\n"; + if($cttpos->{$id}->{txt01}){ + $cttpos->{$id}->{$key} =~ s/\
/;   /g; + print "$cttpos->{$id}->{$key}
\n"; + } + if($pricing->{start_time} && $pricing->{end_time}){ + $pricing->{start_time} = $lb->time4de($pricing->{start_time},"1"); + $pricing->{end_time} = $lb->time4de($pricing->{end_time},"1"); + my $rental_time = ""; + $rental_time = "";#"(rental debug: $pricing->{real_clock} $pricing->{freed_time})"; + print $q->span("→ $pricing->{start_time}
← $pricing->{end_time} $rental_time"); + } + print "\n"; + }elsif($key =~ /int04/){ + if($cttpos->{$id}->{int09}){#if Tarifnr then bike + #print $q->td({-class=>'tdint', -style=>"$occupied_style"},"Station $cttpos->{$id}->{$key}"); + print "\n"; + my $return_station = ""; + $return_station = "← $cttpos->{$id}->{txt13}$cttpos->{$id}->{int04}" if($cttpos->{$id}->{txt13} && $cttpos->{$id}->{int04}); + print $q->span("$varenv->{cms}->{'iframe-station'}->{txt}
→ $cttpos->{$id}->{txt12}$cttpos->{$id}->{int06}
$return_station"); + print "\n"; + }else{ + print $q->td({-class=>'tdint', -style=>"$occupied_style"},"$cttpos->{$id}->{$key}"); + } + }elsif($key =~ /ct_name/){ + if($cttpos->{$id}->{int09}){#if Tarifnr then bike + print $q->td({-class=>'tdint', -style=>"$occupied_style"},"$varenv->{cms}->{'iframe-bike'}->{txt}
$cttpos->{$id}->{$key}"),"\n"; + }else{ + print $q->td({-class=>'tdint', -style=>"$occupied_style"},"$cttpos->{$id}->{$key}"),"\n"; + } + }elsif($key eq "int26"){ + my $co2saving = ""; + if($cttpos->{$id}->{int26}){ + $co2saving = "$varenv->{cms}->{'iframe-saving'}->{txt}
"; + my $co2diff = $pri->co2calc($cttpos->{$id}); + #my $sprit_price = $pri->sprit2calc($cttpos->{$id}); + $co2saving .= "$co2diff kg CO²
"; + #$co2saving .= "$sprit_price EUR
" if($sprit_price !~ /-/); + $cttpos->{$id}->{int26} =~ s/\./,/; + $co2saving .= "bei $cttpos->{$id}->{int26} KM"; + } + print $q->td({-class=>'tdint', -style=>"$occupied_style", -nowrap=>1},"$co2saving"),"\n"; + }elsif($key eq "int02"){ + if($cttpos->{$id}->{int35} && $cttpos->{$id}->{start_time} && $cttpos->{$id}->{end_time}){ + my $gesamt = 0; + $sum += $pricing->{total_price}; + $gesamt = $lb->round($pricing->{total_price}); + $gesamt = sprintf('%.2f', $gesamt); + $gesamt =~ s/\./,/; + 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 = ""; + ($gesamt,$rabatt) = $pri->price2calc($cttpos->{$id}); + $sum += $gesamt; + $gesamt = $lb->round($gesamt); + $gesamt = sprintf('%.2f',$gesamt); + $gesamt =~ s/\./,/; + print $q->td({-class=>'tdint', -style=>"$occupied_style", -nowrap=>1},"$rabatt $gesamt €"),"\n"; + } + } + } + } + if($j==0){ + print $q->Tr(),"\n"; + print $q->td({-class=>'tdint'},"$varenv->{cms}->{'iframe-no-data'}->{txt}"),"\n"; + }else{ + $sum = $lb->round($sum); + $sum = sprintf('%.2f',$sum); + print $q->Tr(),"\n"; + print $q->td({-class=>'tdint', -colspan=>3},""),"\n"; + print $q->td({-class=>'tdint'},"$varenv->{cms}->{'iframe-total'}->{txt}"),"\n"; + print $q->td({-class=>'tdint'},$q->b("$sum €")),"\n"; + } + print $q->end_table; + print "
\n"; + }else{ + print $q->div({-class=>'content2',-style=>'padding:0.5em 0;'}, "$varenv->{cms}->{'iframe-no-bookings'}->{txt}"),"\n"; + }#end if $cttpos_count + + my $i=0; + my $dtext = ""; + print "
\n"; + foreach my $id (sort { $ctt_all->{$b}->{ct_name} cmp $ctt_all->{$a}->{ct_name} } keys(%$ctt_all)){ + + if( -f "$ctt_all->{$id}->{basedir}/pdfinvoice/Rechnung-$ctt_all->{$id}->{operator}-$ctt_all->{$id}->{ct_name}.pdf" && $ctt_all->{$id}->{ct_name} =~ /\d/ && $coo){ + #print "$ctt_all->{$id}->{basedir}/pdfinvoice/Rechnung-$ctt_all->{$id}->{operator}-$ctt_all->{$id}->{ct_name}.pdf && $ctt_all->{$id}->{ct_name} =~ /\d/ && $coo
"; + $i++; + my $invoice_time = $ctt_all->{$id}->{invoice_time} || $ctt_all->{$id}->{mtime}; + $invoice_time = $lb->time4de($invoice_time,0); + #$varenv->{operator} only defined in sharee + my $webtarget = "_blank"; + my $dtext = ""; + if($varenv->{syshost} =~ /app/){ + $webtarget = "_self"; + $dtext = "$varenv->{cms}->{'iframe-pdf-download-info'}->{txt}"; + } + + if($i==1){ + print $q->div({-id=>'Rechnungen',-style=>'font-weight:bold;'},"$varenv->{cms}->{'iframe-your-invoice'}->{txt}"),"\n"; + print $q->div({-style=>'padding:0.5em 0;'},"$dtext"),"\n"; + } + print $q->div({-style=>'padding:0.7em 0;border:0px solid #cccccc;'},$q->a({-href=>"$ctt_all->{$id}->{wwwhost}/FileOut?file=Rechnung-$ctt_all->{$id}->{operator}-$ctt_all->{$id}->{ct_name}.pdf&sessionid=$coo", -target=>"$webtarget" , -type=>'application/octet-stream', -style=>'text-decoration:underline;'}, $q->span({-class=>"bi bi-file-earmark-pdf"}), "$varenv->{cms}->{'iframe-invoice'}->{txt} $ctt_all->{$id}->{ct_name}.pdf"), "   ($invoice_time)"),"\n"; + } + + } + print "
\n"; + } + #Gutschein + elsif($key =~ /txt16/ && $ctadr->{c_id}){ + my $autofocus = ""; + my $label_des="$des"; + if($R::failure =~ /^txt16/){ + $autofocus = "autofocus"; + $label_des = "$varenv->{cms}->{'iframe-voucher-not-available'}->{txt}"; + } + elsif($R::failure =~ /conflict_txt16/){ + $autofocus = "autofocus"; + $label_des = "$varenv->{cms}->{'iframe-voucher-deposit'}->{txt}"; + }else{ + $label_des = "$des"; + } + print $q->label({-for=>"$key", -style=>'padding-top:1.5em;'},"$label_des"),"\n"; + print "\n"; + } + } + print $q->div({-style=>'margin-top:1em;text-align:center;'},""),"\n"; + + print $q->div({-class=>'content2', -style=>'margin-top:2em;'}, "$varenv->{cms}->{'iframe-registration-contact-hotline'}->{txt}"),"\n"; + + print "
\n"; + print $q->end_form,"\n"; + } + + print $q->div({-style=>'position:fixed;bottom:2%;right:2%;z-index:10;font-size:13px;'},"--> $varenv->{syshost} | $varenv->{merchant_id} | $bgcolor1 | template -> $node_meta->{tpl_name},$tpl_id"),"\n" if($ctadr->{c_id} eq $dbt->{copri_conf}->{superu_id} || $dbt->{copri_conf}->{stage} eq "test"); + + print "
"; +} +1; diff --git a/copri4/shareeweb-project/src/Lib/Mlogic.pm b/copri4/shareeweb-project/src/Lib/Mlogic.pm index f1cc4ce..5c79378 100755 --- a/copri4/shareeweb-project/src/Lib/Mlogic.pm +++ b/copri4/shareeweb-project/src/Lib/Mlogic.pm @@ -4,11 +4,9 @@ use warnings; use CGI::Carp qw(fatalsToBrowser); use CGI ':standard'; use Mod::Buttons; -use Mod::Libenzdb; use Mod::DBtank; use Data::Dumper; -my $db = new Libenzdb; my $dbt = new DBtank; my $but = new Buttons; @@ -285,13 +283,15 @@ sub tplselect(){ my $tpl_id = $node_meta->{tpl_id}; if($node_meta->{main_id}){ - if($tpl_id == 2){ + if($tpl_id == 2){ require "Tpl/Anmelden.pm"; &Anmelden::tpl($node_meta,$users_dms,$mode,$varenv,$users_sharee,$feedb); - - }elsif($tpl_id == 302 || $tpl_id == 302008 || $tpl_id == 302004){#Adresse + }elsif($tpl_id == 302 || $tpl_id == 302008){ require "Tpl/FormEdit.pm"; &FormEdit::tpl($node_meta,$users_dms,$mode,$varenv,$users_sharee,$feedb); + }elsif($tpl_id == 302004){ + require "Tpl/RentalData.pm"; + &RentalData::tpl($node_meta,$users_dms,$varenv,$users_sharee,$feedb); }elsif($tpl_id == 308){ require "Tpl/PayoneSelect.pm"; &PayoneSelect::tpl($q,$node_meta,$users_dms,$varenv,$users_sharee,$feedb);