package Liste3; # # SPDX-License-Identifier: AGPL-3.0-or-later # Copyright (c) Rainer Gümpelein, TeilRad GmbH # # #uncomment for perl -cw src/Tpl/Liste3.pm #use lib qw(/var/www/copri4/main/src); # use strict; use warnings; use POSIX; use CGI; use CGI::Carp qw(fatalsToBrowser); use CGI ':standard'; use URI::Escape; use Encode; use Lib::Config; use Mod::Buttons; use Mod::Libenz; use Mod::Libenzdb; use Mod::DBtank; use Date::Calc qw(:all); use Scalar::Util qw(looks_like_number); use Storable; use Mod::APIfunc; use Mod::Pricing; use Mod::Shareework; use Mod::APIsigclient; use Mod::Basework; use Data::Dumper; sub new { my $class = shift; my $self = {}; bless($self,$class); return $self; } #Template sub tpl(){ my $node_meta = shift; my $users_dms = shift; my $u_group = shift; my $return = shift; my $q = new CGI; my @keywords = $q->param; my $cf = new Config; my $lb = new Libenz; my $db = new Libenzdb; my $but = new Buttons; my $dbt = new DBtank; my $apif = new APIfunc; my $pri = new Pricing; my $tk = new Shareework; my $si = new APIsigclient; my $bw = new Basework; 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=""; } my $lang = "de"; my $now_db = strftime("%d.%m.%Y %H:%M:%S",localtime(time)); my $dbh = ""; my $debug = 0; my $coo = $q->cookie(-name=>'domcookie') || ""; my $opdir_dms = "$dbt->{copri_conf}->{basedir}/$dbt->{operator}->{$varenv{dbname}}->{dir_dms}" || ""; $path =~ s/\/login|\/user|\/manager|\/admin|\/$//; my $user_agent = $q->user_agent(); my $saved_query = $q->url(-query=>1); my %ib = $but->ibuttons(); my $main_id = $node_meta->{main_id}; my $tpl_id = $node_meta->{template_id}; my $time = time; my $today = strftime("%d.%m.%Y",localtime(time)); my $now_date = strftime("%Y-%m-%d",localtime(time)); my @months = ("Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"); my $hh=0; my $mm=0; my $day = strftime "%d", localtime; my $mon = strftime "%m", localtime; my $year = strftime "%Y", localtime; ($year,$mon,$day,$hh,$mm) = $lb->split_date($users_dms->{cal_start}) if($users_dms->{cal_start}); my $start_date_time = $R::start_date_time; $start_date_time = "01.$mon.$year" if(!$start_date_time); my $end_date_time = $R::end_date_time; my $days4month = Days_in_Month($year,$mon); $end_date_time = "$days4month.$mon.$year" if(!$end_date_time); my $c_date; my $start_chck=0;my $end_chck=0;my $message; if($start_date_time){ ($start_date_time,$start_chck) = $lb->checkdate($start_date_time) if($start_date_time ne "%"); $message .= ">>> Datum Eingabefehler: $start_date_time <<<" if($start_chck); } if($end_date_time){ ($end_date_time,$end_chck) = $lb->checkdate($end_date_time) if($end_date_time ne "%"); $message .= ">>> Datum Eingabefehler: $end_date_time <<<" if($end_chck); } my $search_startdt = $start_date_time; my $search_enddt = $end_date_time; $end_date_time .= " 23:59" if($end_date_time !~ / \d\:\d/); if("$start_date_time" eq "01.$mon.$year"){ $search_startdt = "date \'$start_date_time\' - integer \'31\'" }else{ $search_startdt = "\'$start_date_time\'" } if("$end_date_time" eq "$days4month.$mon.$year"){ $search_enddt = "date \'$end_date_time\' + integer \'31\'" }else{ $search_enddt = "\'$end_date_time\'" } my $cttpos = {}; 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"); 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"); foreach my $key (keys %$cttpos2){ $cttpos_theft->{"theft_" . $key} = $cttpos2->{$key}; } } $cttpos = { %$cttpos_trans, %$cttpos_theft }; my $table = $node_meta->{ct_table} || ""; my $hashfile = "$varenv{logdir}/$users_dms->{u_id}-$table-searchhash"; if($table eq "content"){ $node_meta->{tpl_order} =~ s/txt17=[\w\s=]+,//; $node_meta->{tpl_order} =~ s/byte01=[\w\s=]+,//; } if($table eq "contentadr" && $varenv{dbname} ne $dbt->{primary}->{sharee_primary}->{database}->{dbname}){ $node_meta->{tpl_order} =~ s/txt17=[\w\s=]+,//; $node_meta->{tpl_order} =~ s/txt19=[\w\s=]+,//; } $node_meta->{tpl_order} =~ s/c_id=raw=[\w\s=]+// if($users_dms->{u_id} != $dbt->{copri_conf}->{superu_id}); my @tpl_order = split /,/,$node_meta->{tpl_order}; my $scol = "c_id"; $scol = "txt01" if($path =~ /Waren/); #table columne check for col_sort if($users_dms->{col_sort} eq "node_name" && ($table eq "contenttver")){ $scol = "node_name"; }elsif($users_dms->{col_sort} eq "date_time" && ($table =~ /contenttver|contenttrans/)){ $scol = "end_time"; }elsif($users_dms->{col_sort}){ my $tinfo = $db->table_info($table); foreach (keys(%$tinfo)){ $scol = "$users_dms->{col_sort}" if("$users_dms->{col_sort}" eq "$tinfo->{$_}->{attname}"); } $db->users_up("col_sort","0",$users_dms->{owner}) if("$scol" ne "$users_dms->{col_sort}"); } my $limit = $R::limit || $varenv{limit}; my $offset = $R::offset || "0"; #backward | forward if($R::go && $R::go eq "backward_list"){ $offset -= $limit if($offset >= $limit); }elsif($R::go && $R::go eq "forward_list"){ $offset += $limit; } 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 ($edit,$new_key,$copy_key,$save_key,$delete_key,$c_id4csv); my $ct4rel = {}; my $ct4rel_parts = {}; my $k=0; my $message = ""; my $framewidth = "min-width: 1200px;"; #to keep calendar line $framewidth = "min-width: 2000px;" if($node_meta->{ct_table} eq "content"); print "
\n"; my $v_journal = $R::v_journal || ""; if($node_meta->{main_id} == $dbt->{shareedms_conf}->{invoicejournal}){ $v_journal = $node_meta->{node_name}; } my $date = ""; my $start_chck = 0; my $end_chck = 0; my $last_year = ""; if($R::s_start_mtime){ ($date,$start_chck) = $lb->checkdate($R::s_start_mtime) if($R::s_start_mtime !~ "%"); $message .= ">>> Datum Eingabefehler: $date <<<" if($start_chck); my ($c_dd,$c_mm,$c_yy) = split(/\./,$date); $last_year = $c_yy if("$c_yy" eq "2011"); } if($R::s_end_mtime){ ($date,$end_chck) = $lb->checkdate($R::s_end_mtime) if($R::s_end_mtime !~ "%"); $message .= ">>> Datum Eingabefehler: $date <<<" if($end_chck); my ($c_dd,$c_mm,$c_yy) = split(/\./,$date); } 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}); } my $searchref = { time => $time, scol => $scol, offset => $offset, limit => $limit, export => $export, opos => "", }; my $tplids = "$tpl_id," || 0; my $main_ids = ""; #Faktura actions if($node_meta->{template_id} =~ /208|209|218/){ $main_id = $dbt->{shareedms_conf}->{faktura}; $tplids = "218"; if($node_meta->{node_name} =~ /OPOS/){ $R::detail_search="search"; $searchref->{int14} = ">=1"; $message .= ">>> Offene Payone Posten (Fehlgeschlagene Geldeinzüge) <<<"; $searchref->{offset} = 0; $searchref->{limit} = 1000; $tplids = "209,218"; my $tpl = $dbt->get_tpl($dbh,209); @tpl_order = split /,/,$tpl->{tpl_order}; } elsif($node_meta->{node_name} =~ /Mahnung/){ $R::detail_search="search"; $searchref->{int06} = ">=1"; $message .= ""; $searchref->{offset} = 0; $searchref->{limit} = 1000; $tplids = "209,218"; my $tpl = $dbt->get_tpl($dbh,209); @tpl_order = split /,/,$tpl->{tpl_order}; } elsif(!$R::detail_search && -f $hashfile && $node_meta->{node_name} =~ /letzte Suche/){ $message .= ">>> es wurden die letzten Suchparameter oder Filter geladen <<<"; $searchref->{offset} = 0; $searchref->{limit} = 1000; #$tplids = "208,209,218";#reload store by hashfile $v_journal = $node_meta->{node_name}; my $tpl = $dbt->get_tpl($dbh,209); @tpl_order = split /,/,$tpl->{tpl_order}; } elsif($node_meta->{node_name} eq "Tagesbericht"){ $R::detail_search="search"; $searchref->{offset} = 0; $searchref->{limit} = 1000; $v_journal = $node_meta->{node_name}; $searchref->{opos} = "null"; $tplids = 218; } elsif($node_meta->{node_name} eq "Verkaufsjournal" || $R::tpl_id4trans eq "209"){ $main_id = $dbt->{shareedms_conf}->{invoicejournal}; $v_journal = $node_meta->{node_name}; $tplids = 209; $searchref->{offset} = 0; $searchref->{limit} = 1000; } elsif($node_meta->{node_name} eq "Rechnung"){ $main_id = $dbt->{shareedms_conf}->{invoice}; $tplids = 218; } elsif($node_meta->{node_name} eq "Storno"){ $main_id = 300009; $tplids = 218; } elsif($node_meta->{node_name} eq "Abrechnung" || $R::tpl_id4trans eq "208"){ $main_id = 300029; $tplids = 208; } #search at all if($R::detail_search eq "search"){ $tplids = "208,209,218"; } $searchref->{tplids} = "$tplids"; } $main_ids = "$main_id,"; $main_ids .= $db->collect_noderec($main_id,$lang,"nothing"); $main_ids =~ s/,$//; $message=$R::message if($R::message); #path-line my $redirect = ""; $redirect = "(redirected)" if($R::redirected); #top of bootstrap my $header_style = ""; $header_style = "border:2px solid #9f1f0e;" if($message); if($node_meta->{tpl_id} == 205 || $node_meta->{tpl_id} == 209){ print $q->div({-class=>"copri_header",-style=>"background-color:$node_meta->{bg_color};"},"$path", $q->span({-style=>"padding:5px 10px;background-color:#86cbd7;color:white;"}, " $months[$mon -1] $year", $q->a({-class=>"linknav",-style=>"padding:0 0.5em;",-title=>"Monat zurück",-href=>"?cal_delta_start=0:-1:0"}," ← "), $q->a({-class=>"linknav",-style=>"padding:0 0.5em;",-title=>"Monat aktuell",-href=>"?cal_today=1"},"•"), $q->a({-class=>"linknav",-style=>"padding:0 0.5em;",-title=>"Monat vorwärts",-href=>"?cal_delta_start=0:1:0"}," → "), "$message" )),"\n"; }else{ print $q->div({-class=>"copri_header",-style=>"background-color:$node_meta->{bg_color};"},"$path $redirect",$q->span({-style=>"$header_style"},"$message")); } print $q->start_form(-name=>'searchform'); print $q->hidden(-name=>'offset', -value=>"$searchref->{offset}"); print $q->hidden(-name=>'main_id', -value=>"$node_meta->{main_id}"); print $q->hidden(-name=>'mode', -value=>"manager"); print $q->hidden(-name=>'owner', -value=>"$users_dms->{u_id}"); print $q->hidden(-name=>'template_id', -value=>"$node_meta->{template_id}"); $tplids = "205,224,225,210,226,227,228,229" if($table eq "content"); $tplids = 205 if($path =~ /Waren$/);#defaults to rental bikes 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 = {}; if($R::detail_search && $R::detail_search eq "search"){ $searchref->{offset} = 0; $searchref->{limit} = 1000; } my $channel_map = $dbt->channel_map(); my $mapref = {}; my $ct_users = $dbt->users_map($dbh,$mapref);#get serviceAPP and DMS users from contentadr my @_users = (""); foreach my $id (sort { $channel_map->{$a} cmp $channel_map->{$b} } keys (%$channel_map)){ push (@_users, "$id:$channel_map->{$id}"); if($R::s_owner && $channel_map->{$id} eq $R::s_owner){ $searchref->{owner} = $id; } } if(!$searchref->{owner}){ foreach my $ctu_id (sort { $ct_users->{$a}->{txt01} cmp $ct_users->{$b}->{txt01} } keys (%$ct_users)){ push (@_users, "$ct_users->{$ctu_id}->{c_id}:$ct_users->{$ctu_id}->{txt01}"); if($ct_users->{$ctu_id}->{ct_name} && ($R::s_owner && $ct_users->{$ctu_id}->{txt01} =~ /$R::s_owner/i) || ($ct_users->{$ctu_id}->{c_id} eq $searchref->{owner})){ $searchref->{owner} = $ct_users->{$ctu_id}->{c_id}; } } } my $node = { template_id => 205, parent_id => 200013, fetch => "all", keyfield => "main_id", }; my $bike_nodes = $dbt->fetch_rel4tpl4nd($dbh,$node); my $tariff_all = $db->collect_ct4rel("content","300026",$lang,"","","","","210"); 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},""); my $ctrel = {}; #only if permission read if(($node_meta->{ct_table} eq "content" && $users_dms->{int01} >= 1) || ($node_meta->{ct_table} eq "contentadr" && $users_dms_primary->{u_id} && $users_dms->{u_id} && $users_dms->{int02} >= 1) || ($node_meta->{ct_table} eq "contenttrans" && $users_dms_primary->{u_id} && $users_dms->{u_id} && $users_dms->{int03} >= 1)){ my $c_id4trans = $R::c_id4trans || ""; #Take only c_id from users if if($users_dms->{c_id4trans} && $R::ct_trans && (($R::ct_trans eq "add_transadr" && $R::c_idadr) || ($R::ct_trans eq "add_transpos" && $R::c_id) || $R::ct_trans eq "new_trans")){ $c_id4trans = $users_dms->{c_id4trans}; } #it will takes only one dataset if($node_meta->{ct_table} eq "contenttrans" && $c_id4trans && $c_id4trans =~ /^\d+$/){ $ct4rel = $db->collect_cid($table,$lang,$tplids,$R::rel_id,$R::barcode,"c_id",$c_id4trans); } elsif(!$start_chck && !$end_chck){ #collect search keys foreach my $postkey (@keywords){ foreach(@tpl_order){ my ($key,$val,$size) = split /=/,$_; if($postkey =~ /s_$key|s_start_$key|s_end_$key/){ my $val = $q->param($postkey); $postkey =~ s/^s_//; $searchref->{$postkey} = $val; } } } #trying to save hashref if($R::detail_search && ref($searchref) eq "HASH"){ store $searchref, $hashfile; }elsif(!$R::detail_search && -f $hashfile && ($path =~ /letzte Suche/)){ #}elsif(!$R::detail_search && -f $hashfile && ($path =~ /letzte Suche/ || $R::select_part || $R::ct_trans || $R::trans2edit || $R::node2edit || $R::base_edit || $R::rel_edit || $R::set_state)){ $searchref = {}; $searchref = retrieve($hashfile); $tplids = $searchref->{tplids} if($searchref->{tplids}); } #print Dumper($searchref);exit; $rows = $db->count_content($table,"$main_ids","$tplids"); #Verkaufsjournal default view if($node_meta->{tpl_id} == 209 && $v_journal && !$R::detail_search){ $searchref->{start_pay_time} = $start_date_time; $searchref->{end_pay_time} = $end_date_time; } if(1==2 && $node_meta->{tpl_id} == 209 && $v_journal && !$R::detail_search){ my $pref_209 = { table => "contenttrans", fetch => "one", order => "int11", state => "Tagesabschluss", }; $last_ab = $dbt->fetch_tablerecord($dbh,$pref_209); $searchref->{int11} = $last_ab->{int11} if($last_ab->{int11}); } #print Dumper($last_ab->{int11}); #reload sig bikes and stations states #$bw->log("Liste3 condition",$node_meta,""); if($varenv{syshost} eq "shareedms-sx"){ my $ctadr = { c_id => $users_dms->{u_id} }; if($node_meta->{tpl_id} == 205 || $node_meta->{node_name} eq "Waren"){ $q->param(-name=>'request',-value=>"bikes_available"); (my $response->{bikes},my $return2copri->{bikes}) = $si->sig_available($q,\%varenv,$ctadr); #$bw->log("return2copri",$return2copri->{bikes},""); $tk->sigbike_cupdate($return2copri->{bikes}); }elsif($node_meta->{tpl_id} == 225){ $q->param(-name=>'request',-value=>"stations_available"); (my $response->{stations},my $return2copri->{stations}) = $si->sig_available($q,\%varenv,$ctadr); #$bw->log("return2copri",$return2copri->{stations},""); $tk->sigstation_cupdate($return2copri->{stations}); } } $ct4rel = $dbt->search_content($dbh,$searchref,$node_meta,$users_dms,"$main_ids","$tplids","$ct_ids",$v_journal,$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); } }#end $ct4rel collect }else{ $return = "failure::Abbruch. Keine Zugriffsberechtigung"; }#end permission read my $max_sum_pos = -10000; my $max_op = ">="; if($searchref->{int01} =~ /\d/){ $max_sum_pos = $searchref->{int01}; $max_sum_pos =~ s/\s//g; $max_sum_pos =~ s/,/./g; #$max_op = "=="; if($max_sum_pos =~ /(\<\=|\>\=|\<|\>|\=\=)(\d+)/){ $max_op = $1; $max_sum_pos = $2; } } print $q->div({-style=>'background-color:silver;height:10px;'}," "),"\n"; my $hstyle = "border-right: solid thin gray;border-bottom: solid thin gray;"; #accounting workflow if($node_meta->{node_name} eq "Verkaufsjournal"){ print "
\n"; if($R::accounting_select){ print $but->singlesubmit1("detail_search","operator_accounting","","margin:0 0 0px 20px;"),"\n"; }else{ print $q->a({-class=>'elinkbutton',-style=>'margin:0 0 2px 20px;', -href=>'?accounting_select=1'},"1. Einzüge selektieren"),"\n"; } print "$months[$mon -1] $year\n"; print "
\n"; } print $q->hidden(-name=>'mandant_main_id', -value=>"$dbt->{shareedms_conf}->{parent_id}"),"\n"; print $q->hidden(-name=>'tpl_id4trans', -value=>"$node_meta->{tpl_id}"),"\n"; print $q->start_table({ -style=>'clear:both;', -border=>'0', -width=>'100%',-align=>'center', -cellpadding=>'0', -cellspacing=>'0'}),"\n"; #1. search line print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; print $q->td({-style=>"background-color:silver;$hstyle"},$but->singlesubmit1("detail_search","search","","width:100%;")),"\n"; $edit="rel_edit"; $new_key="new_content"; $save_key="save_content"; $delete_key="delete_content"; my $a_color = $node_meta->{bg_color} || "yellow"; if($table eq "contentadr"){ $edit="rel_edit"; $new_key="new_adr"; $save_key="save_adr"; $delete_key="delete_adr"; } #contenttrans | contenttver via ct_trans if($table eq "contenttrans"){ $edit="ct_trans"; $new_key="new_trans"; $delete_key="delete_trans"; }elsif($table eq "contenttver"){ $edit="ct_trans"; $new_key="new_tver"; $delete_key="delete_tver"; } #if($node_meta->{parent_id} >= "200000" && $node_meta->{template_id} =~ /202|218/){ if($node_meta->{parent_id} >= 200000){ print $q->td({-style=>"width:25px;background-color:$a_color;$hstyle"}, $but->singlesubmit2glyph("$edit","$new_key","$ib{$new_key}","background-color:$a_color;")); print $q->hidden(-name=>'open_set_main_id', -value=>"$node_meta->{main_id}") if($table =~ /contenttrans/); }else{ print $q->td({-class=>'ebutton',-style=>"width:25px;background-color:$a_color;$hstyle"}," "),"\n"; } #1. Search-fields my $h=0; my $s_val = ""; foreach(@tpl_order){ $h++; my ($key,$val,$size) = split /=/,$_; if($size !~ /select/){ if($size =~ /area/){ $size = "5em"; }elsif($key =~ /int0|c_id|ct_name/){ $size = "1em";# if(!$size); }else{ $size = "2em"; } } $s_val = $searchref->{$key}; #print "$key=$searchref->{$key}|"; if($key =~ /byte|node|txt|int|time\d+|ct_name|c_id|barcode|sort|public/){ if($table eq "content" && $tpl_id == 225 && $key eq "int04"){ print $q->td({-class=>"search_line"},$q->textfield(-class=>'stxt',-name=>"s_$key",-default=>"$s_val",-size=>"$size",-maxlength=>40, -autofocus=>1),"\n"); }elsif($table eq "content" && $key eq "barcode"){ print $q->td({-class=>"search_line"},$q->textfield(-class=>'stxt',-name=>"s_$key",-default=>"$s_val",-size=>"$size",-maxlength=>40, -autofocus=>1),"\n"); }elsif($table =~ /contentadr|contenttrans/ && $key eq "txt08"){ print $q->td({-class=>"search_line"},$q->textfield(-class=>'stxt',-name=>"s_$key",-default=>"$s_val",-size=>"$size",-maxlength=>40, -autofocus=>1),"\n"); }elsif($size =~ /select/ && $key =~ /int12/ && $tpl_id =~ /210/){#Tarif for Flot my @s_valxx = (""); foreach my $rid (sort { $bike_nodes->{$a}->{node_name} cmp $bike_nodes->{$b}->{node_name} } keys (%$bike_nodes)){ push (@s_valxx, "$bike_nodes->{$rid}->{main_id}:$bike_nodes->{$rid}->{node_name} - $bike_nodes->{$rid}->{main_id}"); } print $q->td({-class=>'search_line'},$but->selector_class("s_$key","","",$s_val,@s_valxx)),"\n"; }elsif($size =~ /select/ && $key =~ /txt24/ && $tpl_id =~ /225/){#txt24=bike_group (for station filter) #my %station_filter_hash = (); my @s_valxx = (""); foreach my $rid (sort { $bike_nodes->{$a}->{node_name} cmp $bike_nodes->{$b}->{node_name} } keys (%$bike_nodes)){ push (@s_valxx, "$bike_nodes->{$rid}->{main_id}:$bike_nodes->{$rid}->{node_name} - $bike_nodes->{$rid}->{main_id}"); #$station_filter_hash{$bike_nodes->{$rid}->{type_id}} = 1; } #foreach my $type_id (keys (%station_filter_hash)){ # push (@s_valxx, "$type_id:$dbt->{copri_conf}->{type_id}->{$type_id} - $type_id"); #} print $q->td({-class=>'search_line'},$but->selector_class("s_$key","","",$s_val,@s_valxx)),"\n"; }elsif($size =~ /select/ && $key =~ /int21|int22/ && $tpl_id == 228){#Bonusnummern my @s_valxx = (""); foreach my $rid (sort { $tariff_all->{$a}->{barcode} <=> $tariff_all->{$b}->{barcode} } keys (%$tariff_all)){ push (@s_valxx, "$tariff_all->{$rid}->{barcode}:$tariff_all->{$rid}->{barcode} - $tariff_all->{$rid}->{ct_name}"); } print $q->td({-class=>'search_line'},$but->selector_class("s_$key","","",$s_val,@s_valxx)),"\n"; }elsif($size =~ /select/ && $key !~ /txt23|txt24/){#txt23=color-code or txt24=Flotten ID select my @s_valxx = (""); my $s_hash = {}; $s_hash = $dbt->{copri_conf}->{lock_state} if($tpl_id == 205 && $key eq "int20"); $s_hash = $dbt->{copri_conf}->{bike_state} if($tpl_id == 205 && $key eq "int10"); $s_hash = $dbt->{copri_conf}->{station_state} if($tpl_id == 225 && $key eq "int10"); $s_hash = $dbt->{copri_conf}->{lock_system} if($tpl_id == 205 && $key eq "int11"); $s_hash = $dbt->{copri_conf}->{sharing_type} if($tpl_id == 210 && $key eq "int18"); #$s_hash = $dbt->{copri_conf}->{tariff_unit} if($tpl_id == 210 && $key eq "int01"); $s_hash = { 1 => 1, 2 => 2, 3 => 3, 4 => 4 } if($tpl_id == 225 && $key eq "txt07"); #while (my ($key, $value) = each %{ $s_hash }) { foreach my $s_key (sort keys (%{ $s_hash })) { push @s_valxx, "$s_key:$s_hash->{$s_key}";#[2:unlocked] } print $q->td({-class=>'search_line'},$but->selector_class("s_$key","","",$s_val,@s_valxx)),"\n"; }else{ print $q->td({-class=>"search_line"},$q->textfield(-class=>'stxt',-name=>"s_$key",-default=>"$s_val",-size=>"$size",-maxlength=>40),"\n"); } }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 @_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"; } my $s_mtime=""; my $e_mtime=""; if($key eq "mtime"){ $s_mtime = $searchref->{start_mtime}; $e_mtime = $searchref->{end_mtime}; } if($key eq "atime"){ $s_mtime = $searchref->{start_atime}; $e_mtime = $searchref->{end_atime}; } if($key eq "pay_time"){ $s_mtime = $searchref->{start_pay_time}; $e_mtime = $searchref->{end_pay_time}; } if($key eq "warn_time"){ $s_mtime = $searchref->{start_warn_time}; $e_mtime = $searchref->{end_warn_time}; } if($key eq "date_time"){ $s_mtime = $searchref->{start_date_time}; $e_mtime = $searchref->{end_date_time}; } print $q->td({-nowrap=>1,-class=>"search_line_date"},$q->textfield(-id=>'datepicker1',-class=>'etxt',-name=>"s_start_$key",-default=>"$s_mtime",-size=>"8",-maxlength=>10),"-",$q->textfield(-id=>'datepicker2',-class=>'etxt',-name=>"s_end_$key",-default=>"$e_mtime",-size=>"8",-maxlength=>10)),"\n" if($key =~ /time$/); } #2. Tableheader print $q->Tr(); #permissions if($users_dms_primary->{int03} == 2 && $users_dms->{int03} == 2){ print $q->td({-style=>"background-color:silver;"},$q->checkbox(-name=>'toggle_all', -checked=>'', -value=>'off', -label=>'', -title=>'Alle auswählen', -onclick=>'CheckAll();')),"\n"; }else{ print $q->td({-style=>"background-color:silver;"}," "),"\n"; } my $i=0; $i += 2; if($R::ck4ex){ print $q->th({-colspan=>2,-style=>'text-align:left;'},$q->a({-class=>'linknav3', href=>"$varenv{metahost}/pdf/$users_dms->{u_id}-$users_dms->{time4csv}.csv"},"CSV")),"\n"; }else{ my $sort_up = "up"; my $sort_down = "down"; $sort_up = "$sort_up" if($users_dms->{sort_updown} eq "up"); $sort_down = "$sort_down" if($users_dms->{sort_updown} eq "down"); print $q->th($q->a({-class=>"sortnav",-href=>"?sort_updown=up\&offset=$searchref->{offset}\&limit=$searchref->{limit}",-title=>'Aufsteigend sortieren'},"$sort_up"),"|",$q->a({-class=>"sortnav",-href=>"?sort_updown=down\&offset=$searchref->{offset}\&limit=$searchref->{limit}",-title=>'Absteigend sortieren'},"$sort_down")),"\n"; print $q->th(""),"\n"; } foreach (@tpl_order){ my ($key,$val,$size,$title) = split /=/,$_; my $sort_title=" $title"; $val = "$val" if($key eq $users_dms->{col_sort}); if($key =~ /byte|txt|time|node|int|time\d+|save|state|owner|c_id|ct_name|barcode|sort|public/){ $i++; print $q->th($q->a({-class=>"sortnav",-href=>"?col_sort=$key\&offset=$searchref->{offset}\&limit=$searchref->{limit}",-title=>"$sort_title"},"$val")),"\n"; } } my $tdcal = scalar @tpl_order; if($tpl_id == "205"){ print $q->Tr(); print $q->td({-style=>'background-color:silver;'},""),"\n"; print $q->td({-class=>'tdtxt',-style=>'background-color:silver;',-colspan=>2},"$months[$mon -1] $year"),"\n"; print $q->td({-style=>"font-size:0.71em;padding:0;border:0px solid green;",-colspan=>"$tdcal",-nowrap=>"1"},"$day4month"),"\n"; } my $sum_saldo="0";my $sum_opos="0";my $sum_abb="0";my $sum_ueb="0";my $sum_success="0";my $sum_SEPApayone="0";my $sum_CCpayone="0";my $sum_ausfall="0";my $close_time="";my $payment_time=""; my $nr=0;my $nx=0; #BIG LOOP loop content table foreach my $id (sort { if($users_dms->{sort_updown} eq "down"){ if ($scol =~ /barcode|int/) { $ct4rel->{$b}->{$scol} <=> $ct4rel->{$a}->{$scol} }else{ lc($ct4rel->{$b}->{$scol}) cmp lc($ct4rel->{$a}->{$scol}) } }else{ if ($scol =~ /barcode|int/) { $ct4rel->{$a}->{$scol} <=> $ct4rel->{$b}->{$scol} }else{ lc($ct4rel->{$a}->{$scol}) cmp lc($ct4rel->{$b}->{$scol}) } } } keys(%$ct4rel)){ my $set_style = ""; my $set_style4nr = ""; my $sum_error = 0; my $ecol=0; my $lock_system = 2;#defaults to Ilockit $lock_system = $ct4rel->{$id}->{int11} if($ct4rel->{$id}->{int11}); # check sum_pos and sum_buchen my $sum_pos = 0; my $pricing = {}; my $counting = {}; #pre-sum only if client invoice if($ct4rel->{$id}->{template_id} == 218 && $ct4rel->{$id}->{int10} != 2){ foreach my $cpid (keys (%$ct4rel_parts)){ if($ct4rel->{$id}->{c_id} == $ct4rel_parts->{$cpid}->{ct_id}){ if($ct4rel_parts->{$cpid}->{int35} && $ct4rel_parts->{$cpid}->{start_time} && $ct4rel_parts->{$cpid}->{end_time}){ ($pricing,$counting) = $pri->counting_rental(\%varenv,$ct4rel_parts->{$cpid},"calc_price"); $sum_pos += $pricing->{total_price} }elsif((looks_like_number($ct4rel_parts->{$cpid}->{int02}) && $ct4rel_parts->{$cpid}->{int02} != 0) && (looks_like_number($ct4rel_parts->{$cpid}->{int03}) && $ct4rel_parts->{$cpid}->{int03} != 0)){ my ($gesamt,$rabatt) = $pri->price2calc($ct4rel_parts->{$cpid}); $sum_pos += $gesamt; } } } my $sum_chk = $ct4rel->{$id}->{int01}; $sum_pos = $lb->round($sum_pos); $sum_pos = sprintf('%.2f',$sum_pos); my $sum_chkdiff = $sum_chk - $sum_pos; if($ct4rel->{$id}->{int01} && ($sum_pos ne $sum_chk) && ($sum_chkdiff > 0.02 || $sum_chkdiff < -0.02)){ $sum_error = "1"; } $sum_error = "0" if($R::s_kontext && $R::s_kontext eq "Waren" || $R::node2edit || $R::ct_trans); } my $u_name = $ct4rel->{$id}->{owner}; foreach my $ctu_id (keys (%$ct_users)){ if($channel_map->{$u_name}){ $u_name = $channel_map->{$u_name}; }elsif($ct4rel->{$id}->{owner} eq $ct_users->{$ctu_id}->{c_id}){ $u_name = $ct_users->{$ctu_id}->{txt01}; } } #print $q->start_form(-name=>'listeform'); if(1==1){ if(1==1){ $nr++; $nx=$nr; $close_time = $ct4rel->{$id}->{close_time} if($ct4rel->{$id}->{close_time}); $close_time = $lb->time4de($close_time,"1") if($close_time); $payment_time = ""; if($ct4rel->{$id}->{payment_time}){ $payment_time = $ct4rel->{$id}->{payment_time}; $payment_time = $lb->time4de($payment_time,"1"); } $sum_saldo += $ct4rel->{$id}->{int16} if($ct4rel->{$id}->{state}); $sum_opos += $ct4rel->{$id}->{int01} if($ct4rel->{$id}->{state} && $ct4rel->{$id}->{state} ne "Zaglungsausfall" && $ct4rel->{$id}->{int14} >= 1); $sum_abb += $ct4rel->{$id}->{int01} if($ct4rel->{$id}->{state} && $ct4rel->{$id}->{state} =~ /Abbuchung/); $sum_ueb += $ct4rel->{$id}->{int01} if($ct4rel->{$id}->{state} && $ct4rel->{$id}->{state} =~ /Überweisung/); $sum_SEPApayone += $ct4rel->{$id}->{int01} if($ct4rel->{$id}->{state} && $ct4rel->{$id}->{state} =~ /SEPA.*payone|Zahlungseingang.*payone/); $sum_CCpayone += $ct4rel->{$id}->{int01} if($ct4rel->{$id}->{state} && $ct4rel->{$id}->{state} =~ /Kreditkarte.*payone/); $sum_ausfall += $ct4rel->{$id}->{int01} if($ct4rel->{$id}->{state} && $ct4rel->{$id}->{state} =~ /Zahlungsausfall/); $c_id4csv .= "$ct4rel->{$id}->{c_id},"; $ct4rel->{$id}->{ct_name} = $q->unescapeHTML($ct4rel->{$id}->{ct_name}) || ""; $ct4rel->{$id}->{c_id} = $q->unescapeHTML($ct4rel->{$id}->{c_id}) || ""; $set_style = "background-color:#fcfdfb;"; $set_style = "background-color:#f4f1ee;" if($nx %= 2); #$set_style = "background-color:#e4f1ee;" if($ct4rel->{$id}->{ct_name} eq $ct4rel->{$id}->{barcode}); my $ccc_id = $R::c_id || $R::c_id4trans || $users_dms->{c_id4trans}; $set_style = "background-color:$node_meta->{bg_color};" if(($R::rel_id && $R::rel_id eq $ct4rel->{$id}->{rel_id}) && !$R::empty_rel_id); $set_style = "background-color:$node_meta->{bg_color};" if(($ccc_id && $ccc_id eq $ct4rel->{$id}->{content_id}) && ("$table" =~ /contenttrans/)); $set_style = "background-color:$node_meta->{bg_color};" if(($ccc_id && $ccc_id eq $ct4rel->{$id}->{content_id}) && ("$table" =~ /contenttver/)); #red $set_style = "background-color:#d39c9c;" if($sum_error && $sum_error == 1 && $node_meta->{node_name} eq "Faktura"); $set_style4nr = $set_style; my $m_id; my $nodeline2; my $nodeline_name2; my $nodelist; #Instanz Buttons-Logic print $q->Tr(),"\n"; #checkboxes #permissions if($users_dms_primary->{int03} == 2 && $users_dms->{int03} == 2){ my $checked = 0; $checked = 1 if($R::accounting_select && $node_meta->{template_id} == 209 && $ct4rel->{$id}->{int01} > 0 && $ct4rel->{$id}->{state} =~ /payone/i && !$ct4rel->{$id}->{int14} && !$ct4rel->{$id}->{txt22} && $ct4rel->{$id}->{int18} eq "1"); print $q->td({-style=>"background-color:silver;"}, $q->checkbox(-name=>"ck4ex", -checked=>"$checked", -value=>"$ct4rel->{$id}->{c_id}", -label=>'')),"\n"; }else{ print $q->td({-style=>"background-color:silver;"}," "),"\n"; } #1.Spalte if("$ct4rel->{$id}->{main_id}" eq "$node_meta->{main_id}" || "$ct4rel->{$id}->{main_id}" eq "$node_meta->{parent_id}"){ if($table =~ /content$|contentadr|contentnel/){ $ecol++; print "\n"; #fee2pos if($table eq "content" && ($ct4rel->{$id}->{template_id} =~ /229/) && $R::ca_id && $R::ct_id){ print $q->a({-class=>"editnav",-href=>"/$dbt->{shareedms_conf}->{parent_node}/Mietjournal?insert_contenttranspos=1\&cc_id=$ct4rel->{$id}->{c_id}\&ca_id=$R::ca_id\&ct_id=$R::ct_id\&owner=$users_dms->{u_id}",-title=>"Gebühr hinzufügen"}, $q->span({-class=>"bi bi-clipboard2-plus", -style=>'font-size:1.5em;'})); } if($table eq "content" && ($ct4rel->{$id}->{template_id} =~ /205|225/)){ my $rnid = $ct4rel->{$id}->{rel_id}; my $node_names = "failure $rnid | $relnod->{$rnid}->{content_id} == $ct4rel->{$id}->{c_id}"; if($relnod->{$rnid}->{content_id} && $relnod->{$rnid}->{content_id} == $ct4rel->{$id}->{c_id}){ $node_names = $relnod->{$rnid}->{node_name}; }else{ my $subnode = $dbt->get_subrelnode($dbh,$node_meta->{main_id}); $node_names = $subnode->{node_name}; } my $search_key = "s_barcode=$ct4rel->{$id}->{barcode}";#bike $search_key = "s_int04=$ct4rel->{$id}->{int04}" if($ct4rel->{$id}->{template_id} == 225);#station print $q->a({-class=>"editnav",-href=>"$path/$node_names?detail_search=1\&$search_key",-title=>"zur Liste der Rad $ct4rel->{$id}->{barcode} Servicearbeiten"}, $q->span({-class=>"bi bi-wrench"})); } ## print "\n"; }elsif($users_dms->{u_id} > 0 && "$table" =~ /contenttrans|contenttver/){ print "\n"; print "\n"; }else{ $ecol++; print $q->td({-style=>"$set_style"}),"\n"; } }elsif($ct4rel->{$id}->{content_id} && !$v_journal){ #2017-11-10 simple multi node_name directory view $ecol++; my $rnid = $ct4rel->{$id}->{rel_id}; my $node_names = "failure $rnid | $relnod->{$rnid}->{content_id} == $ct4rel->{$id}->{c_id}"; if($relnod->{$rnid}->{content_id} && $relnod->{$rnid}->{content_id} == $ct4rel->{$id}->{c_id}){ $node_names = $relnod->{$rnid}->{node_name}; }else{ my $subnode = $dbt->get_subrelnode($dbh,$node_meta->{main_id}); $node_names = $subnode->{node_name}; } #node_names fails TODO if(1==1 && $table eq "content" && ($ct4rel->{$id}->{template_id} =~ /205|225/)){ my $search_key = "s_barcode=$ct4rel->{$id}->{barcode}";#bike $search_key = "s_int04=$ct4rel->{$id}->{int04}" if($ct4rel->{$id}->{template_id} == 225);#station print $q->td({-class=>'tdtxt',-colspan=>1,-style=>"$set_style", -nowrap=>1}, $q->a({-class=>"editnav",-href=>"$path/$node_names?detail_search=1\&$search_key",-title=>"zur Liste der Rad $ct4rel->{$id}->{barcode} Servicearbeiten $ct4rel->{$id}->{main_id}"},"$node_names")), "\n"; }else{ print $q->td({-class=>'tdtxt',-colspan=>1,-style=>"$set_style", -nowrap=>1},"$node_names"),"\n"; } }else{ $ecol++; print $q->td({-class=>'element',-colspan=>1,-style=>"$set_style"},""),"\n"; } $ecol++; #2.Spalte my $ny=""; if($table eq "contentadr" && ($ct4rel->{$id}->{int12} || !$ct4rel->{$id}->{int04} || !$ct4rel->{$id}->{int13})){ print $q->td({-class=>'tdicon',-style=>"$set_style color:red;"},"•","\n") if($ecol <= "2"); }elsif($table eq "contenttrans" && (($ct4rel->{$id}->{txt28} && $ct4rel->{$id}->{txt28} =~ /error/i) || ($ct4rel->{$id}->{int14} && $ct4rel->{$id}->{int14} >= 1))){ print $q->td({-class=>'tdicon',-style=>"$set_style color:red;"},"•","\n") if($ecol <= "2"); }elsif($table eq "content" && $ct4rel->{$id}->{template_id} == 227){ my $dir_thumb = "$varenv{data}/$node_meta->{main_id}-thumb/$ct4rel->{$id}->{c_id}"; my @pics = $lb->read_dirfiles($dir_thumb,"\.JPG|\.PNG","file",""); my $dir_main = "$varenv{data}/$node_meta->{main_id}/$ct4rel->{$id}->{c_id}"; my @docs = $lb->read_dirfiles($dir_main,"\.HTML","file",""); print "\n"; if( -d "$dir_thumb" && scalar(@pics) > 0){ foreach(@pics){ print $q->span($q->img({-style=>'max-width:75px;',-src=>"$varenv{metahost}/data/$node_meta->{main_id}-thumb/$ct4rel->{$id}->{c_id}/$_"},"$_")),"\n"; print $q->br(),"\n" if(scalar(@pics) > 1); } } print "\n"; }else{ $ny = $nr if($path =~ /letzte Suche/); print $q->td({-class=>'tdint',-style=>"$set_style color:grey;"},"$ny"),"\n" if($ecol <= "2"); } #Tablecontent (parameter) $k=0; foreach (@tpl_order){ $k++; my ($key,$val,$size,$colorize) = split /=/,$_; my $txtstyle = "text-align:left;"; if($key =~ /barcode|c_id|ct_name|int|time\d+|state|sort|public/){ $txtstyle = "text-align:right;max-width:8em;"; } $ct4rel->{$id}->{$key} = $lb->time4de($ct4rel->{$id}->{$key},"1") if($key =~ /time$/); $ct4rel->{$id}->{$key} = $q->unescapeHTML($ct4rel->{$id}->{$key});# if($key !~ /byte/); my $br4text = $R::node2edit || ""; $ct4rel->{$id}->{$key} = $lb->newline($ct4rel->{$id}->{$key},"","$br4text"); $set_style4nr = $set_style; $set_style4nr="background-color:#e3dbc9;" if(($key eq "barcode") || ($key eq "int04")); $ct4rel->{$id}->{$key} =~ s/\./,/ if($key =~ /int/); if($key eq "c_id"){ my $pos_hash = $ct4rel->{$id}; my $pos_details = ""; foreach my $did (sort keys (%{$pos_hash})){ my $teaser = ""; if($pos_hash->{$did}){ $teaser = substr($pos_hash->{$did},0,30); } $pos_details .= $did . " = " . $teaser . "
" if($pos_hash->{$did}); } my $pos_id = "$ct4rel->{$id}->{c_id}"; if($users_dms_primary->{u_id} && $dbt->{copri_conf}->{contributors} && $users_dms_primary->{u_id} =~ /$dbt->{copri_conf}->{contributors}/){ $pos_id = $q->div({-class=>"popup",-onclick=>"toggle_box('$id')"},"$ct4rel->{$id}->{c_id}", $q->span({-class=>"popuptext",-id=>"$id"},"$pos_details")); } print $q->td({-class=>'tdtxt',-style=>"font-weight:normal;$set_style4nr"},"$pos_id"),"\n"; } elsif($key eq "ct_name" && $ct4rel->{$id}->{$key}){ if($table =~ /contenttrans|contenttver/){ print $q->td({-class=>'tdint',-style=>"font-weight:normal;$set_style4nr"},$q->a({-class=>"linknav3",-href=>"?ct_trans=open\&mode=manager\&c_id4trans=$ct4rel->{$id}->{c_id}\&tpl_id4trans=$ct4rel->{$id}->{template_id}\&kind_of_trans=$node_meta->{node_name}\&owner=$users_dms->{u_id}\&offset=$searchref->{offset}\&limit=$searchref->{limit}",-title=>"Terminal öffnen"},"$ct4rel->{$id}->{$key}")); }elsif($table =~ /content$|contentadr|contentnel/){ print $q->td({-class=>"tdint",-style=>"font-weight:normal;$set_style4nr"},$q->a({-class=>"linknav3",-href=>"?node2edit=editpart\&mode=manager\&rel_id=$ct4rel->{$id}->{rel_id}\&offset=$searchref->{offset}\&limit=$searchref->{limit}",-title=>"Terminal öffnen"},"$ct4rel->{$id}->{$key}")),"\n"; }elsif(($node_meta->{tpl_order} !~ /barcode/) || ("$ct4rel->{$id}->{$key}" ne "$ct4rel->{$id}->{barcode}")){ print $q->td({-class=>'tdint',-style=>"font-weight:bold;$set_style4nr"},"$ct4rel->{$id}->{$key}"),"\n"; }else{ print $q->td({-class=>'tdint',-style=>"font-weight:bold;$set_style4nr"},""),"\n"; } }elsif($key =~ /txt01/ && $table =~ /contenttrans|contenttver/){ print $q->td({-class=>'tdtxt',-style=>"font-weight:normal;$set_style4nr"},$q->a({-class=>"linknav3",-href=>"?ct_trans=open\&mode=manager\&c_id4trans=$ct4rel->{$id}->{c_id}\&tpl_id4trans=$ct4rel->{$id}->{template_id}\&kind_of_trans=$node_meta->{node_name}\&owner=$users_dms->{u_id}\&offset=$searchref->{offset}\&limit=$searchref->{limit}",-title=>"Terminal öffnen"},"$ct4rel->{$id}->{$key}")),"\n"; }elsif($key =~ /txt01/ && $table =~ /content$|contentadr/){# && $lock_system != 3){ my $txt01 = "---"; $txt01 = "$ct4rel->{$id}->{$key}" if($ct4rel->{$id}->{$key}); print $q->td({-class=>'tdtxt',-style=>"font-weight:normal;$set_style4nr"},$q->a({-class=>"linknav3",-href=>"?node2edit=editpart\&mode=manager\&rel_id=$ct4rel->{$id}->{rel_id}\&offset=$searchref->{offset}\&limit=$searchref->{limit}",-title=>"Terminal öffnen"},"$txt01")),"\n"; }elsif($key =~ /barcode/ && $table =~ /content$|contentadr/ && $ct4rel->{$id}->{template_id} != 225){# && $lock_system != 3){ print $q->td({-class=>'tdint',-style=>"font-weight:normal;$set_style4nr"},$q->a({-class=>"linknav3",-href=>"?node2edit=editpart\&mode=manager\&rel_id=$ct4rel->{$id}->{rel_id}\&offset=$searchref->{offset}\&limit=$searchref->{limit}",-title=>"Terminal öffnen"},"$ct4rel->{$id}->{$key}")),"\n"; }elsif($key =~ /int04/ && $table eq "content" && $ct4rel->{$id}->{template_id} == 225){# && $lock_system != 3){ print $q->td({-class=>'tdint',-style=>"font-weight:normal;$set_style4nr"},$q->a({-class=>"linknav3",-href=>"?node2edit=editpart\&mode=manager\&rel_id=$ct4rel->{$id}->{rel_id}\&offset=$searchref->{offset}\&limit=$searchref->{limit}",-title=>"Terminal öffnen"},"$ct4rel->{$id}->{$key}")),"\n"; }elsif($key =~ /int04/ && $table eq "content" && $ct4rel->{$id}->{template_id} == 205){# && $lock_system != 3){ print $q->td({-class=>'tdint',-style=>"font-weight:normal;"},$q->a({-class=>"linknav3",-style=>"",-href=>"?detail_search=1&s_int04=$ct4rel->{$id}->{$key}",-title=>"Rad Warenstamm nach Station filtern"},"$ct4rel->{$id}->{$key}")); }elsif($key =~ /date_time/){ $ct4rel->{$id}->{start_time} = $lb->time4de($ct4rel->{$id}->{start_time},"1") if($ct4rel->{$id}->{start_time}); $ct4rel->{$id}->{end_time} = $lb->time4de($ct4rel->{$id}->{end_time},"1") if($ct4rel->{$id}->{end_time}); print $q->td({-class=>'tdtxt',-style=>"$txtstyle $set_style", -nowrap=>1},"$ct4rel->{$id}->{start_time} - $ct4rel->{$id}->{end_time}"),"\n"; }elsif($key =~ /int01/ && ($node_meta->{parent_id} == $dbt->{shareedms_conf}->{faktura} || $node_meta->{main_id} == $dbt->{shareedms_conf}->{faktura})){ if($ct4rel->{$id}->{state} eq "Kassenbestand"){ print $q->td({-class=>'tdint',-style=>"$txtstyle $set_style"},""),"\n"; }else{ my $betrag = $ct4rel->{$id}->{$key} || "∑ $sum_pos";# pre counting $betrag = $ct4rel->{$id}->{$key} if($v_journal); $betrag =~ s/\./,/; print $q->td({-class=>'tdint',-style=>"$txtstyle $set_style"},"$betrag"),"\n"; } }elsif($key =~ /int02/ && $ct4rel->{$id}->{state} eq "Tagesabschluss"){ print $q->td({-class=>'tdint',-style=>"$txtstyle $set_style"},""),"\n"; }elsif($key =~ /int03/ && "$table" eq "contenttrans"){ print $q->td({-class=>'tdint',-style=>"$txtstyle $set_style"},""),"\n"; }elsif($key =~ /mtime/ && $ct4rel->{$id}->{close_time}){ my $close = "
$close_time TaAb."; my $payment = ""; $payment = "
$payment_time ZaEi." if($payment_time); print $q->td({-class=>'tdint',-style=>"$txtstyle $set_style"},"$ct4rel->{$id}->{$key} $close $payment"),"\n"; }elsif($key =~ /owner/){ print $q->td({-class=>'tdint',-style=>"$txtstyle $set_style"},"$u_name"),"\n"; }elsif($key =~ /state/){ my $order_state = ""; $order_state = "$ct4rel->{$id}->{txt22}" if($ct4rel->{$id}->{txt22}); $order_state = "$ct4rel->{$id}->{txt22},
" if($ct4rel->{$id}->{txt22} && $ct4rel->{$id}->{$key}); my $capture_state = "$ct4rel->{$id}->{$key}"; $capture_state = "$ct4rel->{$id}->{$key}" if($ct4rel->{$id}->{$key} =~ /payone/ && $ct4rel->{$id}->{int14} >= 1); print $q->td({-class=>'tdint',-style=>"$txtstyle $set_style"},"$order_state $capture_state"),"\n"; }elsif($ct4rel->{$id}->{template_id} =~ /205|225/ && $key eq "int10"){#bike_state my $colorize = ""; $colorize = "color:#c63e3e;" if($ct4rel->{$id}->{$key} == 2 || $ct4rel->{$id}->{$key} == 3); $colorize = "color:#bd2424;" if($ct4rel->{$id}->{$key} == 4 || $ct4rel->{$id}->{$key} == 5 || $ct4rel->{$id}->{$key} == 6); print $q->td({-class=>'tdtxt',-style=>"$txtstyle $set_style $colorize"},"$dbt->{copri_conf}->{bike_state}->{$ct4rel->{$id}->{$key}}"),"\n"; }elsif($ct4rel->{$id}->{template_id} == 205 && $key eq "int20"){#lock_state my $colorize = ""; $colorize = "color:#c63e3e;" if($ct4rel->{$id}->{$key} == 2 || $ct4rel->{$id}->{$key} == 3); print $q->td({-class=>'tdtxt',-style=>"$txtstyle $set_style $colorize"},"$dbt->{copri_conf}->{lock_state}->{$ct4rel->{$id}->{$key}}"),"\n"; }elsif($ct4rel->{$id}->{template_id} == 205 && $key eq "int11"){#lock_system print $q->td({-class=>'tdtxt',-style=>"$txtstyle $set_style"},"$dbt->{copri_conf}->{lock_system}->{$ct4rel->{$id}->{$key}}"),"\n"; }elsif($ct4rel->{$id}->{template_id} == 210 && $key eq "int18"){#sharing_type print $q->td({-class=>'tdtxt',-style=>"$txtstyle $set_style"},"$dbt->{copri_conf}->{sharing_type}->{$ct4rel->{$id}->{$key}}"),"\n"; }elsif($ct4rel->{$id}->{template_id} == 210 && $key eq "int12"){ my $flotten = ""; foreach my $rid (sort { $bike_nodes->{$a}->{node_name} cmp $bike_nodes->{$b}->{node_name} } keys (%$bike_nodes)){ $flotten .= "$bike_nodes->{$rid}->{node_name} - $bike_nodes->{$rid}->{main_id}
" if($ct4rel->{$id}->{$key} =~ /$bike_nodes->{$rid}->{main_id}/); } print $q->td({-class=>'tdtxt',-style=>"$txtstyle $set_style"},"$flotten"),"\n"; }elsif($ct4rel->{$id}->{template_id} == 225 && $key eq "txt24"){ my $flotten = ""; foreach my $rid (sort { $bike_nodes->{$a}->{node_name} cmp $bike_nodes->{$b}->{node_name} } keys (%$bike_nodes)){ $flotten .= "$bike_nodes->{$rid}->{node_name} - $bike_nodes->{$rid}->{main_id}
" if($ct4rel->{$id}->{$key} =~ /$bike_nodes->{$rid}->{main_id}/); } print $q->td({-class=>'tdtxt',-style=>"$txtstyle $set_style"},"$flotten"),"\n"; }elsif($ct4rel->{$id}->{template_id} == 228 && $key =~ /int21|int22/){ my $bonustarif = ""; foreach my $rid (sort { $tariff_all->{$a}->{barcode} <=> $tariff_all->{$b}->{barcode} } keys (%$tariff_all)){ $bonustarif .= "$tariff_all->{$rid}->{barcode} - $tariff_all->{$rid}->{ct_name}
" if($ct4rel->{$id}->{$key} == $tariff_all->{$rid}->{barcode}); } print $q->td({-class=>'tdtxt',-style=>"$txtstyle $set_style"},"$bonustarif"),"\n"; }elsif($key =~ /int|barcode/){ print $q->td({-class=>'tdint',-style=>"$txtstyle $set_style"},"$ct4rel->{$id}->{$key}"),"\n"; }elsif($key =~ /time$/){ my $timeview = ""; $timeview = $ct4rel->{$id}->{$key} if($ct4rel->{$id}->{$key} && $ct4rel->{$id}->{$key} =~ /\d/); print $q->td({-class=>'tdint',-style=>"$txtstyle $set_style"},"$timeview"),"\n"; }elsif($key =~ /txt01/ && $v_journal){ my $txt01 = "$ct4rel->{$id}->{$key}"; $txt01 = "$txt01" if($ct4rel->{$id}->{state} eq "Kassenbestand"); print $q->td({-class=>'tdtxt',-style=>"$txtstyle $set_style"},"$txt01"),"\n"; }elsif($key =~ /txt03/ && $ct4rel->{$id}->{template_id} eq "227"){ print $q->td({-class=>'tdtxt',-style=>"$txtstyle $set_style"},$q->a({-style=>"color:black;",-href=>"$varenv{metahost}/site/$ct4rel->{$id}->{$key}", -target=>'_blank',-title=>'anzeigen'},"$ct4rel->{$id}->{$key}")),"\n"; }elsif($key =~ /txt00/ && $v_journal){ print $q->td({-class=>'tdtxt',-style=>"$txtstyle $set_style"},"$ct4rel->{$id}->{$key}"),"\n"; }elsif($key =~ /txt08/ && $table eq "contentadr"){ print $q->td({-class=>'tdtxt',-style=>"$txtstyle $set_style"},"$ct4rel->{$id}->{$key}"),"\n"; #color code }elsif($ct4rel->{$id}->{template_id} == 205 && $key eq "txt23"){ my @service_code = split(/\s/,$ct4rel->{$id}->{$key}); my $color_code = ""; foreach(@service_code){ $color_code .= ""; } print $q->td({-class=>'tdtxt',-style=>"$txtstyle $set_style"},"$color_code"),"\n"; #teaser shorts longtext }elsif(($table eq "contentadr" && $key =~ /txt29/) || ($table eq "content" && $key =~ /txt04/) || ($table eq "contenttrans" && $key =~ /txt23/)){ my $teaser = ""; if($ct4rel->{$id}->{$key}){ $teaser = substr($ct4rel->{$id}->{$key},0,50) . " ..."; } print $q->td({-class=>'tdtxt',-style=>"$txtstyle $set_style; min-width:200px;"},"$teaser"),"\n"; #default to anything else }elsif($key =~ /ct_name|node|txt|uri/){ $txtstyle = "text-align:left;"; print $q->td({-class=>'tdtxt',-style=>"$txtstyle $set_style"},"$ct4rel->{$id}->{$key}"),"\n"; }elsif($key =~ /byte/){ #$ct4rel->{$id}->{$key} =~ s/\\x//; my $K_int = $ct4rel->{$id}->{$key}; #$K_int =~ s/(.)/sprintf( "%x", ord($1))/eg; my $K_int = unpack "H*", $ct4rel->{$id}->{$key}; $txtstyle = "text-align:left;"; print $q->td({-class=>'tdtxt',-style=>"$txtstyle $set_style"},"$K_int"),"\n"; }elsif($key =~ /time\d+/){ $txtstyle = "text-align:right;"; $ct4rel->{$id}->{$key} =~ s/:00$//; print $q->td({-class=>'tdtxt',-style=>"$txtstyle $set_style"},"$ct4rel->{$id}->{$key}"),"\n"; } } } #sub-table-row for rent Calendar my $cal_count = 0; foreach my $ctid (sort { $cttpos->{$b}->{end_time} cmp $cttpos->{$a}->{end_time} } keys (%$cttpos)){ if($ct4rel->{$id}->{c_id} == $cttpos->{$ctid}->{cc_id}){ $cal_count++; if($cal_count <= 1){ my $scale_color = "#86cbd7;"; my $calement = "calement_86cbd7"; if($ct4rel->{$id}->{int13} == $cttpos->{$ctid}->{int13} && $cttpos->{$ctid}->{int10} == 7){ $scale_color = "#f0536e;"; $calement = "calement_f0536e"; } my ($year_st,$mon_st,$day_st,$hh_st,$mm_st) = $lb->split_date($cttpos->{$ctid}->{start_time}) if($cttpos->{$ctid}->{start_time}); my ($year_en,$mon_en,$day_en,$hh_en,$mm_en) = $lb->split_date($cttpos->{$ctid}->{end_time}) if($cttpos->{$ctid}->{end_time}); if($year_st && $mon_st && $day_st && $hh_st && $mm_st && $year_en && $mon_en && $day_en && $hh_en && $mm_en){ #generate px for rent scale my $start_nr = $year_st . $mon_st . $day_st . $hh_st . $mm_st; my $end_nr = $year_en . $mon_en . $day_en . $hh_en . $mm_en; my $day_stpx = 0; my $rent_day_px = 0; my $time_style = ""; if($start_nr <= $end_nr){ ($day_stpx,$rent_day_px) = $lb->rent_scale($users_dms,$year_st,$mon_st,$day_st,$hh_st,$mm_st,$year_en,$mon_en,$day_en,$hh_en,$mm_en); }else{ $time_style="color:red;"; } print $q->Tr(); print $q->td({-style=>'background-color:silver;'},""),"\n"; print $q->td({-class=>"$calement",-colspan=>2,-style=>"$set_style;"},""),"\n"; print "\n"; #print $q->div({-style=>"position:absolute;margin-left:$daymarker;border-right: solid thin #86cb00;height:1.7em;"}," "),"\n";# if("$mon" eq "$mon_today"); my $calpath = "Mietjournal"; if(1==2 && $ct4rel->{$id}->{int13} == $cttpos->{$ctid}->{int13} && $cttpos->{$ctid}->{int10} =~ /7|8/){ $calpath = "Alarmjournal"; $time_style="color:red;"; } #print $q->div({-style=>"position:static;margin-left:$day_stpx;width:$rent_day_px;background-color:$scale_color"},$q->a({-class=>"linknav3",-style=>"$time_style",-href=>"$varenv{wwwhost}/DMS/$calpath/?cttpos_id=$cttpos->{$ctid}->{c_id}",-title=>"Im $calpath öffnen"},"$hh_en:$mm_en")),"\n"; print $q->div({-style=>"position:static;margin-left:$day_stpx;width:$rent_day_px;background-color:$scale_color"},$q->a({-class=>"linknav3",-style=>"$time_style",-href=>"$varenv{wwwhost}/DMS/$calpath/?barcode=$cttpos->{$ctid}->{barcode}",-title=>"Im $calpath öffnen"},"$hh_en:$mm_en")),"\n"; print "\n"; print $q->Tr(); print $q->td({-style=>'padding-top:1px;'},""),"\n"; } } } } } }#journal offen ende if(($nr > 0) && ($v_journal || $R::v_abschluss) && !$R::rel_id){ $k="13";# if(!$k); my $m = $k; $close_time = $R::s_mtime if($R::s_mtime); print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; print $q->td({-class=>'tdtxt',-style=>'text-align:center;background-color:silver;',-colspan=>"$m"},"Gesamt Umsätze"); print $q->td({-class=>'tdsum',-colspan=>"4",-style=>'background-color:silver;'},""); if(1==1){ if($sum_saldo != 0){ $sum_saldo = sprintf('%.2f',$sum_saldo); print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; print $q->td({-class=>'tdint',-colspan=>"$m"},"Saldo Summe"); print $q->td({-class=>'tdint',-colspan=>"1",-nowrap=>"1"},""); print $q->td({-class=>'tdint',-colspan=>"1",-nowrap=>"1"},"$sum_saldo €"); print $q->td({-class=>'tdint',-colspan=>"1",-nowrap=>"2"},""); } if($sum_opos != 0){ $sum_opos *= -1; $sum_opos = sprintf('%.2f',$sum_opos); $sum_success += $sum_opos; print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; print $q->td({-class=>'tdint',-colspan=>"$m"},"OPOS Summe"); print $q->td({-class=>'tdint',-colspan=>"1",-nowrap=>"1"},"$sum_opos €"); print $q->td({-class=>'tdint',-colspan=>"3",-nowrap=>"1"},""); } if($sum_ueb != 0){ $sum_ueb = sprintf('%.2f',$sum_ueb); $sum_success += $sum_ueb; print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; print $q->td({-class=>'tdint',-colspan=>"$m"},"Überweisung Summe"); print $q->td({-class=>'tdint',-colspan=>"1",-nowrap=>"1"},"$sum_ueb €"); print $q->td({-class=>'tdint',-colspan=>"3",-nowrap=>"1"},""); } if($sum_SEPApayone != 0){ $sum_SEPApayone = sprintf('%.2f',$sum_SEPApayone); $sum_success += $sum_SEPApayone; print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; print $q->td({-class=>'tdint',-colspan=>"$m"},"SEPA-Lastschrift (payone) Summe"); print $q->td({-class=>'tdint',-colspan=>"1",-nowrap=>"1"},"$sum_SEPApayone €"); print $q->td({-class=>'tdint',-colspan=>"3",-nowrap=>"1"},""); } if($sum_CCpayone != 0){ $sum_CCpayone = sprintf('%.2f',$sum_CCpayone); $sum_success += $sum_CCpayone; print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; print $q->td({-class=>'tdint',-colspan=>"$m"},"Kreditkarte (payone) Summe"); print $q->td({-class=>'tdint',-colspan=>"1",-nowrap=>"1"},"$sum_CCpayone €"); print $q->td({-class=>'tdint',-colspan=>"3",-nowrap=>"1"},""); } if($sum_ausfall != 0){ $sum_ausfall *= -1; $sum_ausfall = sprintf('%.2f',$sum_ausfall); $sum_success += $sum_ausfall; print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; print $q->td({-class=>'tdint',-colspan=>"$m"},"Zahlungsausfall Summe"); print $q->td({-class=>'tdint',-colspan=>"1",-nowrap=>"1"},"$sum_ausfall €"); print $q->td({-class=>'tdint',-colspan=>"3",-nowrap=>"1"},""); } if($sum_success != 0){ $sum_success = sprintf('%.2f',$sum_success); print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; print $q->td({-class=>'tdsum',-colspan=>"$m"},"Erfolgreiche Zahlungen"); print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},"$sum_success €"); print $q->td({-class=>'tdsum',-colspan=>"3",-nowrap=>"1"},""); } if($users_dms->{u_id}){ if($v_journal =~ /bericht/ && $j_exist->{main_id}){ print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; print $q->td({-style=>"background-color:silver;",-class=>'tdsum',-colspan=>"$m"},"Tagesabschluss"),"\n"; print $q->td({-style=>"background-color:silver;",-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},$but->checkbox("1","close_trans","","Tagesbericht abschließen und in das Verkaufsjournal senden"),$but->singlesubmit("v_abschluss","Speichern")),"\n"; print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},""); } } } } if($varenv{dbname} eq "sharee_kn" && $node_meta->{tpl_id} == 228){ if( -d "$opdir_dms/ftp/SWK_codes"){ my @pdfs = $lb->read_dirfiles("$opdir_dms/ftp/SWK_codes","got_last\.csv","file",""); foreach(@pdfs){ print $q->Tr(),"\n"; print $q->td({-class=>"tdtxt",-colspan=>10},"SWK Bonunsnummern download ",$q->a({-class=>'linknav3',-href=>"$varenv{wwwhost}/FileOut?file=$_&sessionid=$coo", -target=>'_default', -title=>'Download',-type=>'application/octet-stream'}, $q->span({-class=>"bi bi-download"}), "\"$_\"")),"\n"; } } } print $q->end_table; print $q->hidden(-name=>'tpl_id',-override=>'1', -value=>"$tpl_id"); print $q->end_form; my $offset_nr = $searchref->{offset} + $nr; my $counter = $rows; print $q->div({-style=>'float:left;padding:6px 0 0 10px;'},"Zeile: $searchref->{offset} - $offset_nr / $counter"); #backward | forward print "
\n"; print $q->a({-class=>"linknav1",-href=>"?go=backward_list;offset=$searchref->{offset};limit=$searchref->{limit}",-title=>'backward'},"← ") if($searchref->{offset} >= $searchref->{limit}); print $q->a({-class=>"linknav1",-href=>"?go=forward_list;offset=$searchref->{offset};limit=$searchref->{limit}",-title=>'forward'}," →") if($counter >= $limit-10); #if($rows > $limit && $nr > 0); print "
\n"; print $q->div({-style=>''}, " "),"\n"; print $q->div({-style=>'padding:6px 0 6px 20px;text-decoration:underline;'}, "Symbol Legende"),"\n"; if($table eq "contentadr"){ print $q->div({-style=>'padding:0 20px;font-style:italic;'}, $q->span({-style=>'padding:0.1em 0.8em;',-style=>'color:red;'},"•"), "Der Verleih ist nicht freigeschaltet"),"\n"; }elsif($table eq "contenttrans"){ print $q->div({-style=>'padding:0 20px;font-style:italic;'}, $q->span({-style=>'padding:0.1em 0.8em;',-style=>'color:red;'},"•"), "payone error"),"\n"; }elsif($table eq "content" && $node_meta->{tpl_id} =~ /205|225/){ print $q->div({-style=>'padding:0 20px;font-style:italic;'}, $q->span({-class=>"bi bi-wrench"}), "Service-Wartung"),"\n"; } print $q->div({-style=>'padding:0.5em;'}, " "),"\n"; print "
"; return $return; } 1;