sharee.bike/copri4/main/src/Tpl/Liste3.pm
2022-03-17 20:28:28 +01:00

1522 lines
73 KiB
Perl
Executable file

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 "<div id='Content4list'>\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"}," &larr; "),
$q->a({-class=>"linknav",-style=>"padding:0 0.5em;",-title=>"Monat aktuell",-href=>"?cal_today=1"},"&bull;"),
$q->a({-class=>"linknav",-style=>"padding:0 0.5em;",-title=>"Monat vorwärts",-href=>"?cal_delta_start=0:1:0"}," &rarr; "),
"$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;'},"&nbsp;"),"\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;'},"&nbsp;<b>Suchzeitraum:</b> ",$but->selector("selected_start_mtime","130px","$R::selected_start_mtime",@_s_time_defaults));
print "<div style='background-color:silver;padding:0 0.5em;$hstyle'>\n";
print $q->span("<b>Suchkontext:</b> ",$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 "</div>\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"},"&nbsp;"),"\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;"},"&nbsp;"),"\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 = "<b>$sort_up</b>" if($users_dms->{sort_updown} eq "up");
$sort_down = "<b>$sort_down</b>" 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 = "<b>$val</b>" 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("&nbsp;"),"\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;"},"&nbsp;"),"\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 "<td class='tb_inst' style='$set_style' nowrap>\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 "</td>\n";
}elsif($users_dms->{u_id} > 0 && "$table" =~ /contenttrans|contenttver/){
print "<td class='tb_inst' style='$set_style' nowrap>\n";
print "</td>\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 "<td class='tb_inst' style='$set_style' nowrap>\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 "</td>\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;"},"&bull;","\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;"},"&bull;","\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 "<td class='tdtxt' style='$set_style' nowrap>\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 "</td>\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 . "</br>";
}
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; $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 = "<br />$close_time TaAb.";
my $payment = "";
$payment = "<br />$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},<br />" if($ct4rel->{$id}->{txt22} && $ct4rel->{$id}->{$key});
my $capture_state = "<span>$ct4rel->{$id}->{$key}</span>";
$capture_state = "<span style='color:red;'>$ct4rel->{$id}->{$key}</span>" 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}<br />" 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}<br />" 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;"},"&bull;"),"\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 = "<b>$txt01</b>" 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 .= "<span class='coloricon' style='background-color:$_;'></span>";
}
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 "<td class='$calement' colspan='$tdcal' style='$set_style;'>\n";
#print $q->div({-style=>"position:absolute;margin-left:$daymarker;border-right: solid thin #86cb00;height:1.7em;"},"&nbsp;"),"\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 "</td>\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 "<div id='jump_bottom' style='clear:both;border:0px dotted silver;height:35px;'>\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 "<div style='padding:6px 0 0 10px;'>\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 "</div>\n";
print "</div>\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;'},"&bull;"), "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;'},"&bull;"), "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;'}, "&nbsp;"),"\n";
print "</div>";
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;