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 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 %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; $path =~ s/\/login|\/user|\/manager|\/admin|\/$//; my $user_agent = $q->user_agent(); my $fullurl = $users_dms->{fullurl}; 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)); #steht auch in Libenz my @months = ("Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"); my $mon = strftime "%m", localtime; my $hh;my $mm; 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}); ################### new from Callib for collect_pos() ################ my $start_date_time = $R::start_date_time; my $end_date_time = $R::end_date_time; $start_date_time = "01.$mon.$year" if(!$start_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); } #sammle alle termine im definierten Zeitraum my $search_startdt = $start_date_time; my $search_enddt = $end_date_time; #FIXME $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} || "content"; my $hashfile = "$varenv{logdir}/$users_dms->{u_id}-$table-searchhash"; if((!$users_dms->{ek_view}) && ($table eq "content")){ $node_meta->{tpl_order} =~ s/int01=EK €=5,//; } 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 "sharee_primary"){ $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"; if($node_meta->{int10} && $node_meta->{int10} < $varenv{limit}){ $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 $tpath = ""; #get Firma my $ctf = $db->get_content1("contentuser","$dbt->{sharedms_conf}->{parent_id}"); #get Benutzer my $ctb = $db->get_content1("contentuser","$users_dms->{owner}"); my ($umsatz,$edit,$new_key,$copy_key,$save_key,$delete_key,$c_id4csv); my $ct4rel = {}; my $ct4rel_parts = {}; my $k=0; my $message = ""; #print $q->end_form,"\n"; print "
\n"; my $v_journal = $R::v_journal || ""; #if($path =~ /(\w+journal)/){ # $v_journal = "$1" ; #} if($node_meta->{main_id} == $dbt->{shareeconf_dms}->{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 $searchref = {}; #Filter OPOS if($path =~ /OPOS/){ $R::detail_search="suchen"; $searchref->{int14} = ">=1"; $R::todo="Filter"; $message .= ">>> Offene Payone Posten (Fehlgeschlagene Geldeinzüge) <<<"; $offset=0; $limit=10000; } if($path =~ /langzeit/){ $R::detail_search="suchen"; $searchref->{long_rent}="1 day"; $R::todo="Filter"; $message .= ">>> langzeit Mieten (größer 1 Tag) sollten vor Faktura überprüft werden <<<"; $offset=0; $limit=10000; } if(!$v_journal && !$R::detail_search && -f $hashfile && ($path =~ /letzte Suche/ || ($limit > $varenv{limit} && !$ctb->{int04}))){ $R::todo="Filter"; $message .= ">>> es wurden die letzten Suchparameter oder Filter geladen <<<"; $offset=0; $limit=10000; } my $opos = ""; if($node_meta->{node_name} eq "Tagesbericht"){ $offset=0; $limit = "1000"; $R::detail_search="suchen"; $v_journal = $node_meta->{node_name}; $opos="null"; $tpl_id = 218; } my $max_timestamp = ""; $max_timestamp = "$1.$2.$3" if($ctf->{txt80} =~ /(\d{2})\.(\d{2})\.(\d{4})$/); my $max_sum = $ctf->{int03} || ""; if($max_timestamp){ $limit = "2000"; $message .= ">>> Buchbare Rechnungspositionen laut Einstellungen bis Buchungsdatum: $max_timestamp <<<"; } if($max_sum){ $message .= ">>> Buchbare Rechnungspositionen laut Einstellungen bis Verkaufssumme: $max_sum € <<<"; } $message=$R::message if($R::message); #CSV my $export; my $ck4ex = "@R::ck4ex" || ""; $export = "check4export" if($R::ck4ex); if($export || $R::ck4ex){ $db->users_up("time4csv","$time",$users_dms->{u_id}); $users_dms = $db->select_users($users_dms->{u_id}); } #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){ print $q->div({-class=>"copri_header",-style=>"background-color:$node_meta->{bg_color};"},"$path", $q->span({-style=>"padding:3px 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=>'todo', -value=>"Mindermenge") if($R::todo && $R::todo =~ /Mindermenge/); print $q->hidden(-name=>'todo', -value=>"Waren-Summe") if($R::todo && $R::todo =~ /Waren-Summe/); print $q->hidden(-name=>'offset', -value=>"$offset"); print $q->hidden(-name=>'main_id', -value=>"$node_meta->{main_id}"); print $q->hidden(-name=>'kind_of_trans', -value=>"$node_meta->{node_name}"); 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}"); my $tplids = "$tpl_id," || 0; $tplids = "205,224,225,210,226,227,228,229" if(($table !~ /contentadr|contenttrans|contenttver|contentnel/) && !$export); $tplids = 205 if($path =~ /Waren$/);#Defaults to only Verleih_list #collect depends Reparatur_list (AWs) template my $ct_aw; my $ct4aw; if($v_journal){ $ct4aw = $db->collect_cid("content",$lang,"199"); foreach my $aw_id (keys (%$ct4aw)){ $ct_aw .= "$ct4aw->{$aw_id}->{c_id}|" } $ct_aw =~ s/\|$//; } my $s_ct_name = $q->escapeHTML($R::s_ct_name) || ""; my $s_barcode = $q->escapeHTML($R::s_barcode) || ""; #mandanten-modul abhängige rekursive suche my $main_ids = ""; if($v_journal && $v_journal =~ /Verleihjournal|Verkaufsjournal/){ $main_ids = $dbt->{shareedms_conf}->{invoicejournal}; $tplids = 209; }else{ $main_id = $dbt->{shareedms_conf}->{faktura} if($v_journal && $v_journal =~ /bericht/ || $R::todo);#starts at root $main_ids = "$main_id,"; my $excluded = "journal";#case is defined $excluded = "Storno" if($R::todo && $R::todo eq "Filter"); $main_ids .= $db->collect_noderec($main_id,$lang,"$excluded"); } $main_ids =~ s/,$//; if($v_journal){ $offset=0; $limit=10000; $umsatz = "AW"; } #Waren-nodes für Umsatz-Auswertung my $w_nodes = ""; my $verleih_nodes = ""; my $relnod = ""; $relnod = $db->collect_rel4nodes($main_ids,"","","rel_id"); #Faktura/Verkaufsjournal menue (ex. Verleihjournal) my $j_exist = $db->get_node4multi("300011",$lang); #nur für node_name in tabelle my $nodes; if($main_ids){ $nodes = $db->collect_node2($main_ids); }else{ $lb->failure("Fehler! Es fehlen wichtige Einstellungen. ....journal-ID!"); } my $kt_sum=0; my $ct_name_set1;my $ct_name_set2; my $ct_ids;my $ct_aw_ids; my $last_ab; if($R::detail_search && $R::detail_search eq "suchen"){ $offset = 0; $limit = 10000; } 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,#Leihrad_liste parent_id => 200013,#Waren fetch => "all", keyfield => "main_id", }; my $bike_nodes = $dbt->fetch_rel4tpl4nd($dbh,$node); my $tariff_all = $db->collect_ct4rel("content","300026",$lang,"","","","","210"); 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->{int02} >= 1) || ($node_meta->{ct_table} eq "contenttrans" && $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}; } #only for adding to active transaction, disabled because of not browser tab save #$ctrel = $db->get_ctrel("contenttrans","",$lang,"",$users_dms->{c_id4trans},$users_dms->{tpl_id4trans}); #without limit it will takes only one dataset #if(($R::rel_id && $R::rel_id =~ /^\d+$/) || ($c_id4trans && $c_id4trans =~ /^\d+$/)){ if((($R::rel_id && $R::rel_id =~ /^\d+$/) || ($c_id4trans && $c_id4trans =~ /^\d+$/)) && ($limit > $varenv{limit})){ $ct4rel = $db->collect_cid($table,$lang,$tpl_id,$R::rel_id,$R::barcode,"c_id",$c_id4trans); } #Suchen elsif(!$start_chck && !$end_chck){ #2020-12-01 changed to get last tablecontent, not only 1 by edit #testing state #if(!$start_chck && !$end_chck){ $rows = $db->count_content($table,"$main_ids","$tplids"); #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(!$v_journal && $R::detail_search && ref($searchref) eq "HASH"){ store $searchref, $hashfile; }elsif(!$v_journal && !$R::detail_search && !$ctb->{int04} && -f $hashfile && ($path =~ /letzte Suche/ || $limit > $varenv{limit})){ $searchref = {}; $searchref = retrieve($hashfile); } #print Dumper($searchref); #Because of pre counting sum_pos if($node_meta->{node_name} eq "Faktura"){ if($v_journal && (!$R::detail_search || $R::s_start_mtime && $R::s_start_mtime =~ /letzt/)){ my $xtime = "date \'$today\' + integer \'7\'";#just time #$last_ab = $db->get_content6("contenttrans","state","Kassenbestand","int09","$dbt->{shareedms_conf}->{parent_id}","int12","$j_exist->{main_id}","close_time","$xtime",""); $last_ab = $db->get_content6("contenttrans","state","Kassenbestand","","","","","close_time","$xtime",""); } # my $v_journalparts = $v_journal . "_parts"; $ct4rel_parts = $db->search_content3($searchref,$table,$dbt->{shareedms_conf}->{parent_id},$node_meta,$users_dms->{u_id},$lang,"$main_ids","$tplids","$ct_ids",$v_journalparts,$time,$R::s_kontext,$scol,$users_dms->{sort_updown},$offset,$limit,$export,$R::todo,$ck4ex,$opos); #collect invoice ids in kontext of parts foreach my $cp_id (keys (%$ct4rel_parts)){ $ct_ids .= "$ct4rel_parts->{$cp_id}->{ct_id}," if($R::detail_search && ($R::s_kontext && $R::s_kontext eq "Waren" || $export eq "FiBu")); #pre collect of trans for AW if(($umsatz eq "AW") && "$ct_aw" && ($ct4rel_parts->{$cp_id}->{cc_id} =~ /$ct_aw/)){ $ct_aw_ids .= "$ct4rel_parts->{$cp_id}->{ct_id}|";# } } } $ct4rel = $db->search_content3($searchref,$table,$dbt->{shareedms_conf}->{parent_id},$node_meta,$users_dms->{u_id},$lang,"$main_ids","$tplids","$ct_ids",$v_journal,$time,$R::s_kontext,$scol,$users_dms->{sort_updown},$offset,$limit,$export,$R::todo,$ck4ex,$opos); }#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;"; if($v_journal && $v_journal =~ /journal/){ my ($a_check,$b_check,$c_check,$d_check,$f_check,$g_check); $a_check = "1" if($R::s_kontext && $R::s_kontext eq "Waren"); $umsatz="Summe der gefundenen Waren" if($R::s_kontext && $R::s_kontext eq "Waren"); $b_check = "1" if($R::s_kontext && $R::s_kontext eq "Beleg" || !$R::s_kontext); my @_s_time_defaults = ("0,manuelle Eingabe in \"bearbeitet\"","7,1 Woche","14,2 Wochen","28,4 Wochen","365,1 Jahr"); #print $q->div({-style=>'float:left;background-color:silver;'}," Suchzeitraum: ",$but->selector("selected_start_mtime","130px","$R::selected_start_mtime",@_s_time_defaults)); print "
\n"; print $q->span("Suchkontext: ",$but->radiobox("Beleg","s_kontext","$b_check"),"$node_meta->{node_name}/Kunde"); print $q->span($but->radiobox("Waren","s_kontext","$a_check"),"Waren/FiBu"); 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. Zeile mit Suchfelder und NEU-Anlage #table-switch!!! my $sb_style = ""; my $search = "search"; if($v_journal =~ /journal/){ $search = "search_export"; $sb_style= "font-size:0.61em;"; } print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; print $q->td({-style=>"background-color:silver;$hstyle"},$but->singlesubmit1("detail_search","$search","","$sb_style;"),"\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" && !$v_journal){ 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 =~ /area/){ $size = "10em"; }elsif($key =~ /int0|c_id/){ $size = "1em" if(!$size); } $s_val = $searchref->{$key}; #print "$key=$searchref->{$key}|"; if($key =~ /byte|node|txt|int|uri|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|txt24/ && $tpl_id =~ /225|210/){#txt24=Flotten ID select 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 =~ /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}->{txt01}"); } 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 = { 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","80px","$s_val",@_users)),"\n"; }elsif($key =~ /state/){ my @_states = split(/\|/,$varenv{Zahlungsweise}); my @_orderstates = split(/\|/,$varenv{order_state}); push (@_states,@_orderstates); print $q->td({-class=>'search_line'},$but->selector("s_$key","80px","$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 "bctime"){ $s_mtime = $searchref->{start_bctime}; $e_mtime = $searchref->{end_bctime}; } 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"},$q->textfield(-id=>'datepicker1',-class=>'stxt',-name=>"s_start_$key",-default=>"$s_mtime",-size=>"$size",-maxlength=>20)),"\n" if($key =~ /time/); } #2. Tableheader print $q->Tr(); #permissions if($users_dms->{int07} == 2){#only DMS-Account Admin 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")," | ",$q->a({-class=>'linknav3', href=>"$varenv{metahost}/pdf/$users_dms->{u_id}-$users_dms->{time4csv}.xls"},"XLS")),"\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=$offset\&limit=$limit",-title=>'Aufsteigend sortieren'},"$sort_up"),"|",$q->a({-class=>"sortnav",-href=>"?sort_updown=down\&offset=$offset\&limit=$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|uri|save|state|owner|c_id|ct_name|barcode|sort|public/){ $i++; print $q->th($q->a({-class=>"sortnav",-href=>"?col_sort=$key\&offset=$offset\&limit=$limit",-title=>"$sort_title"},"$val")),"\n"; } } #TODO, chrome breaks timeline #print $q->th(" "),"\n"; my $tdcal = scalar @tpl_order; #$tdcal++; #print "$tdcal xxxxxxxxx"; if($tpl_id == "205"){#205=Verleih 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"; } #print $q->end_form,"\n"; my $sum_bar="0";my $sum_ec="0";my $sum_kredit="0";my $sum_abb="0";my $sum_ueb="0";my $sum_geka="0";my $sum_paypal="0";my $sum_SEPApayone="0";my $sum_CCpayone="0";my $sum_ausfall="0";my $sum_kasse="0";my $sum_start="0";my $close_time="";my $payment_time="";my $sum_waren;my $sum_verkauf;my $sum_kaution;my $sum_aw;my $sum_am;my $sum_park; my $sum_radd;my $sum_wst_ek=0; my $sum_wst_vk=0; my $sum_verleih; my $nr=0;my $nx=0; my $check_kaution=0; my $rabatt_key; my $kost_key; #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; if($ct4rel->{$id}->{int01} > 0 && $ct4rel->{$id}->{int03} > 0){ $sum_wst_ek += $ct4rel->{$id}->{int01} * $ct4rel->{$id}->{int03}; } if($ct4rel->{$id}->{int02} > 0 && $ct4rel->{$id}->{int03} > 0){ $sum_wst_vk += $ct4rel->{$id}->{int02} * $ct4rel->{$id}->{int03}; } #AWs Faktor from Firma if($table eq "content" && $ctf->{int02} != 0 && $ct4rel->{$id}->{int09} != 0){ $ct4rel->{$id}->{int02} = $ctf->{int02} * $ct4rel->{$id}->{int09}; $ct4rel->{$id}->{int02} = $lb->cashme($ct4rel->{$id}->{int02}); } # check sum_pos and sum_buchen my $sum_pos=0; #if($v_journal && $ct4rel->{$id}->{state} ne "Kassenbestand"){ if($ct4rel->{$id}->{state} ne "Kassenbestand"){ foreach my $cpid (keys (%$ct4rel_parts)){ if(($ct4rel->{$id}->{c_id} eq $ct4rel_parts->{$cpid}->{ct_id}) && (looks_like_number($ct4rel_parts->{$cpid}->{int02}) && $ct4rel_parts->{$cpid}->{int02} != 0) && (looks_like_number($ct4rel_parts->{$cpid}->{int03}) && $ct4rel_parts->{$cpid}->{int03} != 0)){ if($ct4rel_parts->{$cpid}->{int07} != 0){ my $rabatt_eur = $ct4rel_parts->{$cpid}->{int07}; $rabatt_eur = $ct4rel_parts->{$cpid}->{int02} * $ct4rel_parts->{$cpid}->{int03} * $ct4rel_parts->{$cpid}->{int07}/100 if($ct4rel_parts->{$cpid}->{int08} != 1);#wenn int08 != 1 alias € #$rabatt_eur = $lb->round($rabatt_eur); $sum_pos += $ct4rel_parts->{$cpid}->{int02} * $ct4rel_parts->{$cpid}->{int03} - $rabatt_eur; }else{ $sum_pos += $ct4rel_parts->{$cpid}->{int02} * $ct4rel_parts->{$cpid}->{int03}; } } } my $sum_chk = $ct4rel->{$id}->{int01}; $sum_pos = $lb->round($sum_pos); $sum_pos = $lb->cashme($sum_pos); my $sum_chkdiff = $sum_chk - $sum_pos;#wegen $rabatt_eur kleine Rundungsfehler zulassen. 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'); $sum_kasse = $ct4rel->{$id}->{int01} if($ct4rel->{$id}->{state} eq "Kassenbestand"); $sum_start = $ct4rel->{$id}->{int02} if($ct4rel->{$id}->{state} eq "Kassenbestand"); if(eval($sum_pos . $max_op . $max_sum_pos) || $table ne "contenttrans"){ 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_bar += $ct4rel->{$id}->{int01} if($ct4rel->{$id}->{state} && $ct4rel->{$id}->{state} =~ /^Bar/); $sum_ec += $ct4rel->{$id}->{int01} if($ct4rel->{$id}->{state} && $ct4rel->{$id}->{state} =~ /EC/); #$sum_kredit += $ct4rel->{$id}->{int01} if($ct4rel->{$id}->{state} && $ct4rel->{$id}->{state} =~ /Kredit/); $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->{int07} == 2){#only DMS-Account Admin print $q->td({-style=>"background-color:silver;"}, $q->checkbox(-name=>"ck4ex", -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"; #2021-06-08 disabled because dms must be browser-tab save if(1==2 && $table eq "content" && ($ct4rel->{$id}->{template_id} =~ /205|224|229/)){#bikes|Gutschein|Zubehör print $q->a({-class=>"editnav",-href=>"$tpath?ct_trans=add_transpos\&mandant_main_id=$dbt->{shareedms_conf}->{parent_id}\&kind_of_trans=$users_dms->{kind_of_trans}\&c_id=$ct4rel->{$id}->{content_id}\&owner=$users_dms->{u_id}",-title=>"zum $users_dms->{kind_of_trans} \#$ctrel->{ct_name} $ctrel->{txt01} hinzufügen"}, $q->img({-src=>"$varenv{metahost}/glyphicons/glyphicons-512-copy.png", -style=>'height:1.3em;'})); } 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->img({-src=>"$varenv{metahost}/glyphicons/glyphicons-440-wrench.png", -style=>'height:1em;'})); } ## 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"; } }elsif("$table" =~ /contenttrans/ && $v_journal){ $ecol++; print "\n"; print $q->a({-class=>"editnav",-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=$offset\&limit=$limit",-title=>"öffnen"}, $q->img({-src=>"$varenv{metahost}/img/actions/project-open.png"})); print "\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"); } #print $q->td("$ecol\n") if($ecol <= "2"); #my $ctimg = "000empty"; #my $ct_name4img = "$ct4rel->{$id}->{ct_name}.jpg"; #$ct_name4img =~ s/\s//g; #my $title = "Foto nicht vorhanden"; #if(-f "$varenv{img4thumb}/$ct_name4img"){ # $ctimg = "$ct_name4img"; # $title="$ct4rel->{$id}->{ct_name}"; #} #print $q->td({-class=>'element',-style=>"$set_style"},$q->a({-href=>"/img4ct/$ctimg",-rel=>'lightbox',-title=>"$title"},$q->img({-src=>"/img4thumb/$ctimg", -style=>'max-width:20px;border:1px solid silver;'}))); #Tablecontent (parameter) $k=0; foreach (@tpl_order){ $k++; my ($key,$val,$size,$colorize) = split /=/,$_; $rabatt_key = 1 if($key =~ /int07/); $kost_key = 1 if($key =~ /node05|node08/); my $txtstyle = "text-align:left;"; my $isize = "26"; if($key =~ /barcode|c_id|ct_name|int|state|sort|public/){ $txtstyle = "text-align:right;max-width:8em;"; $isize = "5"; $isize = "5" if($key =~ /int/); } $isize = $size if($size =~ /\d/); $ct4rel->{$id}->{$key} = $lb->time4de($ct4rel->{$id}->{$key},"1") if($key =~ /time/); $ct4rel->{$id}->{$key} = $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")); #$set_style4nr="background-color:#e3dbc9;" if($key eq "barcode"); $ct4rel->{$id}->{$key} =~ s/\./,/ if($key =~ /int/); if($key eq "c_id" && $val eq "raw"){ 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 . "
"; } my $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 =~ /ct_name|c_id/ && $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=$offset\&limit=$limit",-title=>"Terminal öffnen"},"$ct4rel->{$id}->{$key}")); }elsif($table =~ /content$|contentadr|contentnel/){ if($varenv{wwwhost} =~ /regiox/ && $key =~ /ct_name/){ print $q->td({-class=>"tdtxt",-style=>"font-weight:normal;$set_style4nr"},"$ct4rel->{$id}->{$key}"); }else{ 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=$offset\&limit=$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=$offset\&limit=$limit",-title=>"Terminal öffnen"},"$ct4rel->{$id}->{$key}")),"\n"; }elsif($key =~ /txt01/ && $table =~ /content$|contentadr/){ 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=$offset\&limit=$limit",-title=>"Terminal öffnen"},"$txt01")),"\n"; }elsif($key =~ /barcode/ && $table =~ /content$|contentadr/ && $ct4rel->{$id}->{template_id} != 225){ 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=$offset\&limit=$limit",-title=>"Terminal öffnen"},"$ct4rel->{$id}->{$key}")),"\n"; }elsif($key =~ /int04/ && $table eq "content" && $ct4rel->{$id}->{template_id} == 225){ 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=$offset\&limit=$limit",-title=>"Terminal öffnen"},"$ct4rel->{$id}->{$key}")),"\n"; }elsif($key =~ /int04/ && $table eq "content" && $ct4rel->{$id}->{template_id} == 205){ 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->{node_name} eq "Faktura"){ if($ct4rel->{$id}->{state} eq "Kassenbestand"){ print $q->td({-class=>'tdint',-style=>"$txtstyle $set_style"},$q->b("Tatsächl. $ct4rel->{$id}->{$key}")),"\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"},$q->b("Anfangst. $ct4rel->{$id}->{$key}")),"\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} =~ /225|210/ && $key =~ /txt24|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} == 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}->{txt01}
" if($ct4rel->{$id}->{$key} == $tariff_all->{$rid}->{barcode}); } print $q->td({-class=>'tdtxt',-style=>"$txtstyle $set_style"},"$bonustarif"),"\n"; }elsif($key =~ /int|save|time|sort|public/){ if($key eq "int06" && $ct4rel->{$id}->{int06}){ $ct4rel->{$id}->{int06} =~ s/,.*//; } #if($colorize && $ct4rel->{$id}->{$key} == 1){ # print $q->td({-class=>'tdicon',-style=>"$txtstyle $set_style color:$colorize;"},"•"),"\n"; #}else{ print $q->td({-class=>'tdint',-style=>"$txtstyle $set_style"},"$ct4rel->{$id}->{$key}"),"\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=>'download',-type=>'application/octet-stream'}, $q->img({-src=>"$varenv{metahost}/glyphicons/file-any.png", -style=>'height:1.3em;'}),"$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"; } } } #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"; $calpath = "Alarmjournal" if($ct4rel->{$id}->{int13} == $cttpos->{$ctid}->{int13} && $cttpos->{$ctid}->{int10} == 7); 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=>"$script/$users_dms->{fullurl}/$calpath/?cttpos_id=$cttpos->{$ctid}->{c_id}",-title=>"Im $calpath öffnen"},"$hh_en:$mm_en")),"\n"; print "\n"; print $q->Tr(); print $q->td({-style=>'padding-top:1px;'},""),"\n"; } } } } #sub-table-row, Journal mit Teileansicht if($v_journal){ my $o = "9"; $o = 8 if($varenv{wwwhost} =~ /cofi/);#because of extra col ID $o++ if($rabatt_key); #Verkaufjournal mit Rabatt $o++ if($kost_key); #Verkaufjournal mit Kostenstelle my $m = $k - $o; foreach my $cpid (sort { $ct4rel_parts->{$a}->{c_id} <=> $ct4rel_parts->{$b}->{c_id} } keys(%$ct4rel_parts)){ if($ct4rel->{$id}->{c_id} eq $ct4rel_parts->{$cpid}->{ct_id}){ my $pos_style="color:grey;$set_style"; my $sum_parts = $ct4rel_parts->{$cpid}->{int02} * $ct4rel_parts->{$cpid}->{int03}; if($ct4rel_parts->{$cpid}->{int07} != 0){ #my $rabatt_eur = $ct4rel_parts->{$cpid}->{int02} * $ct4rel_parts->{$cpid}->{int03} * $ct4rel_parts->{$cpid}->{int07}/100; my $rabatt_eur = $ct4rel_parts->{$cpid}->{int07}; $rabatt_eur = $ct4rel_parts->{$cpid}->{int02} * $ct4rel_parts->{$cpid}->{int03} * $ct4rel_parts->{$cpid}->{int07}/100 if($ct4rel_parts->{$cpid}->{int08} != 1);#wenn int08 != 1 alias € $sum_parts = $ct4rel_parts->{$cpid}->{int02} * $ct4rel_parts->{$cpid}->{int03} - $rabatt_eur; } $sum_parts = $lb->round($sum_parts); $sum_parts = $lb->cashme($sum_parts); $sum_waren += $sum_parts; $sum_verkauf += $sum_parts if($ct4rel_parts->{$cpid}->{ct_name} ne "999");#999=Ausgaben, Fixme $ctf->{txt31} =~ s/,/|/; if($ct4rel->{$id}->{state} =~ /^Bar/ && $ct4rel_parts->{$cpid}->{int12} =~ /$ctf->{txt31}/){ $sum_kaution += $sum_parts; $sum_bar -= $sum_parts; } #Umsatz Fkt. #AW Material Summen $ct_aw_ids =~ s/\|$//; #if($umsatz eq "AW" && $ct4rel_parts->{$cpid}->{ct_name} eq $ctf->{txt51}){ if($umsatz eq "AW" && $ct4rel_parts->{$cpid}->{cc_id} =~ /$ct_aw/){ $sum_aw += $sum_parts; $sum_verkauf -= $sum_parts; #$pos_style .= "background-color:#a69100;"; }elsif($ct4rel_parts->{$cpid}->{ct_id} =~ /$ct_aw_ids/){ $sum_am += $sum_parts; $sum_verkauf -= $sum_parts; #$pos_style .= "background-color:#c69133;"; } if($umsatz eq "Rad-Station_Verkauf"){ foreach my $nid (keys (%$w_nodes)){ if($ct4rel_parts->{$cpid}->{int12} eq $w_nodes->{$nid}->{main_id}){ if($w_nodes->{$nid}->{txt01} eq "Raddienst"){ $sum_radd += $sum_parts; $sum_verkauf -= $sum_parts; #$pos_style .= "background-color:#a69100;"; }elsif($w_nodes->{$nid}->{txt01} eq "Parkhaus"){ $sum_park += $sum_parts; $sum_verkauf -= $sum_parts; #$pos_style .= "background-color:#a69100;"; } } } } if($umsatz eq "Rad-Station_Verleih"){ #besser, anhand der Verleih-Kostenstelle foreach my $nid (keys (%$verleih_nodes)){ if($ct4rel_parts->{$cpid}->{int12} eq $verleih_nodes->{$nid}->{main_id}){ $sum_verleih += $sum_parts; #$pos_style .= "background-color:#a69100;"; } } } my $parts_time = ""; if($ct4rel_parts->{$cpid}->{start_time} && $ct4rel_parts->{$cpid}->{end_time}){ $ct4rel_parts->{$cpid}->{start_time} = $lb->time4de($ct4rel_parts->{$cpid}->{start_time},"1"); $ct4rel_parts->{$cpid}->{end_time} = $lb->time4de($ct4rel_parts->{$cpid}->{end_time},"1"); $parts_time = "$ct4rel_parts->{$cpid}->{start_time} - $ct4rel_parts->{$cpid}->{end_time}"; } print $q->Tr(),"\n"; print $q->td({-style=>"background-color:silver;"},""),"\n"; #print $q->td({-colspan=>'2',-style=>"$pos_style"},"$ct4rel->{$id}->{c_id} | $ct4rel_parts->{$cpid}->{ct_id}\n"); print $q->td({-colspan=>'3',-style=>"$pos_style"},""),"\n"; print $q->td({-class=>'tdtxt',-style=>"$pos_style"},"$ct4rel_parts->{$cpid}->{txt00}"),"\n"; print $q->td({-colspan=>'1',-style=>"$pos_style"},""),"\n"; print $q->td({-class=>'tdtxt',-style=>"$pos_style"},"$ct4rel_parts->{$cpid}->{txt01}"),"\n"; print $q->td({-class=>'tdint',-style=>"$pos_style"},"$ct4rel_parts->{$cpid}->{ct_name}"),"\n"; print $q->td({-colspan=>"$m",-style=>"$pos_style"},""),"\n"; print $q->td({-class=>'tdint',-style=>"$pos_style"},"$ct4rel_parts->{$cpid}->{int03}"),"\n"; print $q->td({-class=>'tdint',-style=>"$pos_style"},"$ct4rel_parts->{$cpid}->{int02}"),"\n"; #Rabatt if($rabatt_key && $ct4rel_parts->{$cpid}->{int07}){ $ct4rel_parts->{$cpid}->{int07} .= " €" if($ct4rel_parts->{$cpid}->{int08} == 1);#wenn int08 != 1 alias €; $ct4rel_parts->{$cpid}->{int07} .= " %" if($ct4rel_parts->{$cpid}->{int08} != 1);#wenn int08 != 1 alias €; print $q->td({-class=>'tdint',-style=>"$pos_style",-nowrap=>1},"$ct4rel_parts->{$cpid}->{int07}"),"\n"; }elsif($rabatt_key){ print $q->td({-class=>'tdint',-style=>"$pos_style",-nowrap=>1},""),"\n"; } print $q->td({-class=>'tdint',-style=>"$pos_style"},"$sum_parts"),"\n"; print $q->td({-colspan=>'1',-style=>"$pos_style"},""),"\n"; } } } } }#journal offen ende if($R::todo && $R::todo eq "Waren-Summe"){ my $m = 9; $sum_wst_ek = $lb->round($sum_wst_ek); $sum_wst_vk = $lb->round($sum_wst_vk); $sum_wst_ek = $lb->cashme($sum_wst_ek,","); $sum_wst_vk = $lb->cashme($sum_wst_vk,","); 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"},""); print $q->td({-class=>'tdsum',-colspan=>"2",-style=>'background-color:silver;'},""); print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; #print $q->td({-class=>'tdsum',-colspan=>"$m"},$q->span({-style=>'color:silver;font-weight:normal;'},"(Vorsicht! incl. Ausgaben)"),$q->span("Waren-Stamm Summe")); print $q->td({-class=>'tdsum',-colspan=>"$m"},"Waren-Stamm Summe"); print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},"$sum_wst_ek €"); print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},"$sum_wst_vk €"); } #Kassenjournal alias Summe Bar und Kredit if(($nr > 0) && ($v_journal || $R::v_abschluss) && (!$R::rel_id) && ("$R::s_kontext" ne "Waren")){ #if(($nr > 0) && ($v_journal || $R::v_abschluss || $close_time) && (!$R::rel_id)){ #print "($nr > 0) && ($v_journal || $R::v_abschluss || $close_time) && (!$R::rel_id)"; $k="9" if(!$k); my $m = $k; $sum_bar = $lb->round($sum_bar); $sum_bar = $lb->cashme($sum_bar); $sum_ec = $lb->round($sum_ec); $sum_ec = $lb->cashme($sum_ec); #$sum_kredit = $lb->round($sum_kredit); #$sum_kredit = $lb->cashme($sum_kredit); $sum_abb = $lb->round($sum_abb); $sum_abb = $lb->cashme($sum_abb); $sum_ueb = $lb->round($sum_ueb); $sum_ueb = $lb->cashme($sum_ueb); $sum_geka = $lb->round($sum_geka); $sum_geka = $lb->cashme($sum_geka); $sum_paypal = $lb->round($sum_paypal); $sum_paypal = $lb->cashme($sum_paypal); $sum_SEPApayone = $lb->round($sum_SEPApayone); $sum_SEPApayone = $lb->cashme($sum_SEPApayone); $sum_CCpayone = $lb->round($sum_CCpayone); $sum_CCpayone = $lb->cashme($sum_CCpayone); $sum_ausfall = $lb->round($sum_ausfall); $sum_ausfall = $lb->cashme($sum_ausfall); $sum_waren = $lb->round($sum_waren); $sum_waren = $lb->cashme($sum_waren); $sum_kaution = $lb->cashme($sum_kaution); $sum_start = $lb->cashme($sum_start); $sum_kasse = $lb->cashme($sum_kasse); $close_time = $R::s_mtime if($R::s_mtime); my $summiert = "Gesamt Umsätze"; #my @_states = ("Bar","EC-Karte","Kreditkarte","Abbuchung","Überweisung"); 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"},"$summiert"); print $q->td({-class=>'tdsum',-colspan=>"1",-style=>'background-color:silver;'},""); print $q->td({-class=>'tdsum',-colspan=>"1",-style=>'background-color:silver;'},""); if(1==1){ if($sum_ec != "0"){ print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; print $q->td({-class=>'tdsum',-colspan=>"$m"},"EC-Karten Summe"); print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},"$sum_ec €"); print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},""); } #if($sum_kredit != "0"){ # print $q->Tr(); # print $q->td({-style=>"background-color:silver;"},""),"\n"; # print $q->td({-class=>'tdsum',-colspan=>"$m"},"Kreditkarten Summe"); # print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},"$sum_kredit €"); #} if($sum_abb != "0"){ print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; print $q->td({-class=>'tdsum',-colspan=>"$m"},"Abbuchung Summe"); print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},"$sum_abb €"); print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},""); } if($sum_ueb != "0"){ print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; print $q->td({-class=>'tdsum',-colspan=>"$m"},"Überweisung Summe"); print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},"$sum_ueb €"); print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},""); } if($sum_geka != "0"){ print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; print $q->td({-class=>'tdsum',-colspan=>"$m"},"Geldkarte Summe"); print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},"$sum_geka €"); print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},""); } if($sum_paypal != "0"){ print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; print $q->td({-class=>'tdsum',-colspan=>"$m"},"PayPal Summe"); print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},"$sum_paypal €"); print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},""); } if($sum_SEPApayone != "0"){ print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; print $q->td({-class=>'tdsum',-colspan=>"$m"},"SEPA-Lastschrift (payone) Summe"); print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},"$sum_SEPApayone €"); print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},""); } if($sum_CCpayone != "0"){ print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; print $q->td({-class=>'tdsum',-colspan=>"$m"},"Kreditkarte (payone) Summe"); print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},"$sum_CCpayone €"); print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},""); } if($sum_ausfall != "0"){ print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; print $q->td({-class=>'tdsum',-colspan=>"$m"},"Zahlungsausfall Summe"); print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},"$sum_ausfall €"); print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},""); } print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; print $q->td({-class=>'tdsum',-colspan=>"$m",-style=>'background-color:#eaeaec;'},"Bar Summe"); print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1",-style=>'background-color:#eaeaec;'},"$sum_bar €"); print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},""); if($v_journal eq "Tagesbericht" || ($v_journal && $R::s_start_mtime !~ /\d+[\.|,]\d+[\.|,]\d+/)){ print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; $sum_start = "$ctf->{int01}" if($sum_start == "0"); my $sum_start_text = "(Kassenbestand Übernahme vom Vortag)" if(!$sum_start); $sum_start = $last_ab->{int01} if(!$sum_start); print $q->td({-class=>'tdsum',-colspan=>"$m",-style=>'background-color:#eaeaec;'},$q->span({-style=>'color:silver;font-weight:normal;'},"$sum_start_text"),"Anfangs Kassenbestand"); if($close_time){ print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1",-style=>'background-color:#eaeaec;'},"$sum_start €"); }else{ print $q->td({-class=>'tdsum',-colspan=>"1",-style=>'background-color:#eaeaec;'}, $q->textfield(-class=>'etxt',-style=>'text-align:right;',-name=>"sum_start",-override=>'1',-default=>"$sum_start",-size=>"5",-maxlength=>10),"\n"); } print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},""); print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; print $q->td({-class=>'tdsum',-colspan=>"$m",-nowrap=>"1",-style=>'background-color:#eaeaec;'},"Tatsächlicher Kassenbestand"); $sum_kasse = "$varenv{sum_start}" if($sum_kasse == "0"); if($close_time){ print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1",-style=>'background-color:#eaeaec;'},"$sum_kasse €"); }else{ print $q->td({-class=>'tdsum',-colspan=>"1",-style=>'background-color:#eaeaec;'},$q->textfield(-class=>'etxt',-style=>'text-align:right;',-name=>"sum_kasse",-override=>'1',-default=>"$sum_kasse",-size=>"5",-maxlength=>10),"\n"); } print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},""); my $sum_diff = $sum_kasse - $sum_start - $sum_bar; $sum_diff = $lb->round($sum_diff); $sum_diff = $lb->cashme($sum_diff); print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; print $q->td({-class=>'tdsum',-colspan=>"$m",-style=>'background-color:#eaeaec;'},$q->span({-style=>'color:silver;font-weight:normal;'},"($sum_kasse - $sum_start - $sum_bar = $sum_diff)"),"Kassenbestand - Bar Summe = Differenz"); print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1",-style=>'background-color:#eaeaec;'},"$sum_diff €"); print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},""); } ### #AW 2020-01-29 disabled if(1==2 && $umsatz && $node_meta->{node_name} eq "Faktura"){ my $sum_parts_all; 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"},"Teil Umsätze"); print $q->td({-class=>'tdsum',-colspan=>"1",-style=>'background-color:silver;'},""); if("$R::s_kontext" eq "Waren"){ print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; print $q->td({-class=>'tdsum',-colspan=>"$m"},"Suchkontext Waren. Die Umsatz Summe der durch Suchbegriffe gefundenen Artikel"); print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},"$sum_waren €"); } if($umsatz eq "Rad-Station_Verkauf"){ $sum_radd = $lb->cashme($sum_radd); print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; print $q->td({-class=>'tdsum',-colspan=>"$m"},"Raddienst Summe"); print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},"$sum_radd €"); $sum_park = $lb->cashme($sum_park); print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; print $q->td({-class=>'tdsum',-colspan=>"$m"},"Parkhaus Summe"); print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},"$sum_park €"); } if($umsatz eq "Rad-Station_Verleih"){ $sum_verleih = $lb->cashme($sum_verleih); print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; print $q->td({-class=>'tdsum',-colspan=>"$m"},$q->span({-style=>'color:silver;font-weight:normal;'},""),"Verleih Summe"); print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},"$sum_verleih €"); } if($umsatz eq "AW"){ $sum_aw = $lb->round($sum_aw); $sum_aw = $lb->cashme($sum_aw); $sum_am = $lb->round($sum_am); $sum_am = $lb->cashme($sum_am); $sum_verkauf = $lb->round($sum_verkauf); $sum_verkauf = $lb->cashme($sum_verkauf); $sum_parts_all += $sum_aw; print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; print $q->td({-class=>'tdsum',-colspan=>"$m"},"Arbeits-Werte Summe"); print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},"$sum_aw €"); $sum_parts_all += $sum_am; print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; print $q->td({-class=>'tdsum',-colspan=>"$m"},"Arbeits-Material Summe"); print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},"$sum_am €"); $sum_parts_all += $sum_verkauf; print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; print $q->td({-class=>'tdsum',-colspan=>"$m"},"Verkaufs-Material Summe"); print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},"$sum_verkauf €"); $sum_parts_all = $lb->cashme($sum_parts_all); print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; print $q->td({-class=>'tdsum',-colspan=>"$m"},"Gesamt Summe"); print $q->td({-class=>'tdsum',-colspan=>"1",-nowrap=>"1"},"$sum_parts_all €"); } } 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"},""); } } } } print $q->end_table; print $q->hidden(-name=>'tpl_id',-override=>'1', -value=>"$tpl_id"); print "
\n"; if($R::detail_search !~ /suchen/ && $rows > $limit && $nr > 0){ print $q->div({-style=>'float:left;padding:6px 0 0 20px;'},"Datensätze pro Seite:",$q->textfield(-style=>'height:16px;',-name=>"limit",-default=>"$limit",-size=>"3",-maxlength=>10)),"\n"; print $q->div({-style=>'float:left;padding:7px 0 0 10px;'},$but->singlesubmit3("detail_search","reload_search","$varenv{metahost}/img/refresh.png","height:15px;","Tabelle neu laden")),"\n"; } print $q->end_form; my $offset_nr = $offset + $nr; my $counter = $node_meta->{int10} || $rows; print $q->div({-style=>'float:left;padding:6px 0 0 10px;'},"Zeile: $offset - $offset_nr / $counter"); #backward | forward print "
\n"; print $q->a({-class=>"linknav",-href=>"?go=backward_list;offset=$offset;limit=$limit",-title=>''},"< zurück ... ") if($offset >= $limit); print $q->a({-class=>"linknav",-href=>"?go=forward_list;offset=$offset;limit=$limit",-title=>''}," ... vorwärts >") if($counter >= $limit-10); #if($rows > $limit && $nr > 0); print "
\n"; print "
\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"){ #print $q->div({-style=>'padding:0 20px;font-style:italic;'}, $q->span({-style=>'padding:0.1em 0.8em;'},$q->img({-src=>"$varenv{metahost}/glyphicons/glyphicons-512-copy.png", -style=>'height:1.3em;'})), "Artikel zur Rechnung hinzufügen ( Orange unterlegte Faktura Rechnung )"),"\n"; print $q->div({-style=>'padding:0 20px;font-style:italic;'}, $q->span({-style=>'padding:0.1em 0.8em;'},$q->img({-src=>"$varenv{metahost}/glyphicons/glyphicons-440-wrench.png", -style=>'height:1.3em;'})), "Service-Wartung"),"\n"; } print $q->div({-style=>'padding:0.5em;'}, " "),"\n"; print "
"; if($varenv{wwwhost} !~ /regiox/ && $node_meta->{main_id} > 300000 && $rows =~ /\d/){ $db->updater("nodes","main_id",$node_meta->{main_id},"int10",$rows); } #letzte Suche if(!$v_journal && $R::detail_search && ref($searchref) eq "HASH" && $nr =~ /\d/){ $db->updater("nodes","main_id","300023","int10",$nr); } #print Dumper($node_meta); return $return; } 1;