Initial commit

This commit is contained in:
Rainer Gümpelein 2021-12-30 12:05:56 +01:00
parent b686656e88
commit 5e91fe947d
177 changed files with 41037 additions and 0 deletions

View file

@ -0,0 +1,159 @@
package APIdialog;
#
#
# SPDX-License-Identifier: AGPL-3.0-or-later
# Copyright (c) Rainer Gümpelein, TeilRad GmbH
#
use strict;
use warnings;
use POSIX;
use CGI::Carp qw(fatalsToBrowser);
use CGI ':standard';
use JSON;
#use Test::JSON;
use Scalar::Util qw(looks_like_number);
use Lib::Config;
use Mod::Buttons;
use Mod::Libenz;
use Mod::DBtank;
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 $json = JSON->new->allow_nonref;
my $cf = new Config;
my $lb = new Libenz;
my $dbt = new DBtank;
my $apif = new APIfunc;
my $but = new Buttons;
my $dbh = "";#$dbt->dbconnect();
my %varenv = $cf->envonline();
my %ib = $but->ibuttons();
my $tpl = $dbt->get_tpl($dbh,$node_meta->{template_id});
my $tpl_order = $tpl->{tpl_order};
#$tpl_order =~ s/barcode=Rad/barcode=Rad,txt09=Wartungsarbeiten=area/;
#$tpl_order =~ s/int04=Station/int04=Station,txt09=Wartungsarbeiten=area/ if($tpl->{tpl_id} == 403);
$tpl_order = "barcode=Rad,txt09=Wartungsprotokoll=area";
$tpl_order = "int04=Station,txt09=Wartungsprotokoll=area" if($tpl->{tpl_id} == 403);
my @tpl_order = split /,/,$tpl_order;
my $edit="rel_edit";
my $save_key = "service_done";
my $ctrel = {};
if(ref($return) ne "SCALAR" && $return =~ /shareejson/){
my $tj = $json->pretty->decode($return);
foreach my $obj (keys (%{$tj->{shareejson}})){
if($obj eq "service_id_done" && looks_like_number($tj->{shareejson}->{$obj})){
my $c_id = $tj->{shareejson}->{$obj};
my $fetch = {
table => "contentpos",
fetch => "one",
c_id => "$c_id",
};
$ctrel = $dbt->fetch_tablerecord($dbh,$fetch);
}
}
}else{
print $q->div($return),"\n";
return;
}
my $u_name;
my $channel_map = $dbt->channel_map();
my $mapref = {};
my $ct_users = $dbt->users_map($dbh,$mapref);#get serviceAPP and DMS users from contentadr
foreach my $id (sort { $channel_map->{$a} cmp $channel_map->{$b} } keys (%$channel_map)){
if($id == $ctrel->{owner}){
$u_name = $channel_map->{$id};
}
}
if(!$u_name){
foreach my $ctu_id (keys (%$ct_users)){
if($ct_users->{$ctu_id}->{c_id} == $ctrel->{owner}){
$u_name = $ct_users->{$ctu_id}->{txt01};
}
}
}
$ctrel->{mtime} = $lb->time4de($ctrel->{mtime},"1") if($ctrel->{mtime});
print $q->hidden(-name=>'mode', -value=>"manager",-override=>1),"\n";
print $q->hidden(-name=>'detail_search', -value=>"1",-override=>1),"\n";
print $q->hidden(-name=>'owner', -value=>"$users_dms->{u_id}",-override=>1),"\n";
print $q->hidden(-name=>'s_barcode', -value=>"$ctrel->{barcode}",-override=>1),"\n" if($ctrel->{barcode});
print $q->hidden(-name=>'s_int04', -value=>"$ctrel->{int04}",-override=>1),"\n" if($ctrel->{int04});
print $q->hidden(-name=>'service_id', -value=>"$ctrel->{c_id}",-override=>1),"\n";
print $q->hidden(-name=>'main_id', -value=>"$node_meta->{main_id}",-override=>1),"\n";
print $q->hidden(-name=>'template_id', -value=>"$node_meta->{template_id}",-override=>1),"\n";
print "<div id='Container_cms'>";
#1. table submit
print $q->start_table({-class=>'list', -border=>'0', -width=>'100%',-align=>'center', -cellpadding=>'3', -cellspacing=>'0'});
print $q->Tr();
print "<td colspan=2 style='height:25px;background-color:$varenv{contentpos_color};padding:2px;border-bottom: 1px solid silver;'>";
print $but->singlesubmit7("$edit","$save_key","$ib{$save_key}","margin:0 5px;");
print $q->span({-style=>'margin-left:200px; font-size:1em;'}, "$u_name / $ctrel->{mtime} ID $ctrel->{c_id}");
print "</td>\n";
print $q->end_table;
print $q->start_table({-border=>'0', -width=>'100%',-align=>'center', -cellpadding=>'3', -cellspacing=>'0'});
my $required="";
my $autofocus="";
foreach (@tpl_order){
my ($key,$des,$size) = split /=/,$_;
#$des .= " ($key)" if($users_dms->{u_id} eq $varenv{superu_id});
my $label_des = $des;
$ctrel->{$key} = $q->unescapeHTML("$ctrel->{$key}");
$ctrel->{$key} = $lb->newline($ctrel->{$key},"","1");
if($key =~ /barcode|int04/){
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
if(!$ctrel->{$key}){
print $q->td({-class=>'content1_cms'},$q->textfield(-class=>'etxt', -style=>"",-name=>"s_$key", -default=>"$ctrel->{$key}", -autofocus=>1, -required=>1)),"\n";
}else{
print $q->td({-class=>'content1_cms'},"$ctrel->{$key}"),"\n";
}
}elsif($key =~ /int/ && $size eq "checkbox"){
my $ck_style = $but->checkbox_style($key,"cbox");
print "$ck_style";
my $checked = "";
$checked = "checked" if($ctrel->{$key});
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"<label for='sq_cbox$key'>$des</label>"),"\n";
print $q->td({-class=>'content1_cms'},$q->div("<input type='checkbox' id='sq_cbox$key' name='$key' value='1' $checked>")),"\n";
}elsif($key =~ /txt/){
my $h= 20;# if($size =~ /area(\d+)/);
print $q->Tr();
print $q->td({-class=>'left_italic_cms',-style=>'vertical-align: top;', -colspan=>1},"$des"),"\n";
print $q->td({-class=>'content1_cms'},$q->textarea(-class=>"autos", -style=>'border: 1px solid silver;',-rows=>"$h",-cols=>'60;', -name=>"$key", -override=>'1',-default=>"$ctrel->{$key}")),"\n";
}
}
print $q->end_table,"\n";
print $q->div($but->singlesubmit7("$edit","$save_key","$ib{$save_key}","margin:10px 20px;")),"\n";
print "</div>";
}
1;

View file

@ -0,0 +1,485 @@
package Address3;
#
##
# SPDX-License-Identifier: AGPL-3.0-or-later
# Copyright (c) Rainer Gümpelein, TeilRad GmbH
#
use strict;
use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use CGI ':standard';
use Lib::Config;
use Mod::Buttons;
use Mod::Libenz;
use Mod::Libenzdb;
use Mod::DBtank;
use Tpl::TransPositionen;
sub new {
my $class = shift;
my $self = {};
bless($self,$class);
return $self;
}
#Template
sub tpl(){
my ($node_meta,$users_dms,$return) = @_;
my $q = new CGI;
my $cf = new Config;
my $lb = new Libenz;
my $db = new Libenzdb;
my $dbt = new DBtank;
my $but = new Buttons;
my $transp = new TransPositionen;
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 $u_id = $users_dms->{u_id};
my $lang = "de";
my $users = $db->select_users($u_id);
my $user_agent = $q->user_agent();
my %ib = $but->ibuttons();
my $line_count1;
#get Firma
my $ctf = $db->get_content1("contentuser",$dbt->{shareedms_conf}->{parent_id});
my $rel4tpl = $db->get_rel4tpl("",$lang,$users_dms->{c_id4trans},$users_dms->{tpl_id4trans});
my @tpl_order = split /,/,$rel4tpl->{tpl_order};
my $node = $db->get_node4multi($rel4tpl->{main_id},$lang) if($rel4tpl->{main_id});
if(!$node->{main_id} && $users->{owner}){
$db->update_users4trans("0","0",$users_dms->{kind_of_trans},$users_dms->{u_id});
$users = $db->select_users($u_id);
}
#edit marker for "question save" dialog
if($u_id && $R::trans2edit && $R::c_id4trans){
$db->users_up("c_id4edit","$R::c_id4trans","$users->{owner}");
}
my $ctx = $db->get_content1("contenttrans",$users_dms->{c_id4trans});
my $c_idadr = $ctx->{int10};#c_id orig from contentadr
my $ctadr = $db->get_content1("contentadr",$c_idadr);
my $rel_adr = $db->get_rel4tpl("","$lang","$c_idadr","202");
#print "\nc_idadr Got it from contenttrans.int10: $c_idadr\n";
#
#my $c_kdnr = $ctx->{txt14};
#my $mandat;
#$mandat = " | Mandat $ctx->{txt26}" if($ctx->{txt26});
my $ctt = $ctx;
if(("$R::trans2edit" eq "client" && $R::c_idadr) || ($R::ct_trans eq "add_transadr")){
$ctt = $db->get_content1("contentadr",$R::c_idadr);
$c_idadr = $ctt->{c_id};
#print "c_idadr Got it from contentadr.c_id: $c_idadr\n";
#$mandat = " | Mandat $ctt->{ct_name}" if($ctt->{ct_name});
#$c_kdnr = $ctt->{ct_name};
}
print<<EOF
<style>
.ui-autocomplete {
text-align:left;
background:#eeeeee;
border:1px solid silver;
}
</style>
<script>
\$(function() {
\$('#json_selectadr').autocomplete({
source: '/ajax_json?main_id=$dbt->{shareedms_conf}->{parent_id}&table=contentadr',
minLength: 2,
select: function(event, ui) {
\$('#vorname_name').val(ui.item.vorname_name);
\$('#c_idadr').val(ui.item.c_id);
}
});
});
</script>
EOF
;
my $main_id = $rel4tpl->{main_id} || $ctx->{int12};
my $set_main_id = $ctf->{txt22};
my @formular_relations=("$set_main_id:Typ auswählen ...");
my @workflow_relations=("$set_main_id:Typ auswählen ...");
my $nodes = $db->collect_node($dbt->{shareedms_conf}->{faktura}, "$lang");
my $depends = "irgendeinzeichen";
#$depends = "Storno" if(!$ctx->{close_time});
foreach my $id (sort { $nodes->{$a}->{node_name} cmp $nodes->{$b}->{node_name} } keys (%$nodes)){
push (@formular_relations, "$id:$nodes->{$id}->{node_path}") if(($main_id eq $id) || ($nodes->{$id}->{node_path} !~ /journal|bericht|offen|Storno|Vorauszahlungsrechnung|letzte|langzeit|OPOS|$depends/));
push (@workflow_relations, "$id:$nodes->{$id}->{node_path}") if($nodes->{$id}->{node_path} !~ /journal|bericht|offen|Schlussrechnung|letzte|langzeit|OPOS|$node->{node_name}$|$ctx->{txt00}|$depends/);
}
print "\n<div style='position:absolute;text-align:left;background-color:white;width:100%;'>\n";
if(!$users_dms->{c_id4trans} || !$users_dms->{tpl_id4trans}){
$lb->failure3("Das Formular wurde gelöscht bzw. ist nicht vorhanden");
}
#######Verkauf Header
print $q->start_form(),"\n";
print "\n<div style='background-color:#a7a18f;padding:0.2em 0.5em;text-align:left;width:100%;' nowrap=1>\n";
#submit Header
my $invoice_time = "";
if($ctt->{invoice_time}){#since 2020-03-16 will be set on Printpreview
$invoice_time = $lb->time4de($ctt->{invoice_time},1);
}else{
$invoice_time = $lb->time4de($ctt->{mtime},1);
}
my $channel_map = $dbt->channel_map();
my $buchen_users = { txt01 => "" };
if($channel_map->{$ctt->{owner}}){
$buchen_users = { txt01 => "$channel_map->{$ctt->{owner}}" };
}else{
$buchen_users = $db->get_content1("contentadr",$ctt->{owner});
}
$set_main_id=$main_id if($rel4tpl->{main_id} > "300000");
if(!$ctx->{close_time} && ($ctx->{txt00} !~ /Storno/)){
my $ebutton = "ebutton";
$ebutton = "ebutton4" if($ctx->{ct_name} !~ /\d+/ && $R::trans2edit ne "client");
print $but->singlesubmit1("set_relation","set_relation","$ebutton","","Generiert RechnungNr. incl. payone Vorautorisierung (txid)");
print $but->selector("set_main_id","11em",$set_main_id,@formular_relations);
}else{
print $q->hidden(-name=>'set_main_id', -override=>'1', -value=>"$set_main_id");
print $q->span({-style=>'padding:0.05em 3em;background-color:white;border:solid thin gray;'}, "$ctx->{txt00}");
}
print $q->b("\# $ctx->{ct_name}");
print $q->span({-style=>'margin:0 0.2em;'}," | ");
if($ctx->{ct_name} =~ /\d+/){
print $but->singlesubmit1("set_workflow","set_workflow");
print $but->selector("set_main_id4workflow","11em","",@workflow_relations);
print $q->span({-style=>'margin:0 0.2em;'}," | ");
}
print $but->singlesubmit1("ct_trans","print_pdf");
print $q->hidden(-name=>'printer_id', -override=>'1', -value=>"PDF");
if(!$ctt->{int01} || $ctt->{ct_name} =~ /-/){
print $q->span({-style=>'margin:0 0.2em;position:absolute;right:3px;'}," $buchen_users->{txt01} / $invoice_time ", $but->singlesubmit7("ct_trans","remove_chk4rel","$ib{remove_chk4rel}","")),"\n";
print $q->hidden(-name=>'c_id', -override=>'1', -value=>"$rel4tpl->{content_id}");
print $q->hidden(-name=>'template_id', -override=>'1', -value=>"$rel4tpl->{template_id}");
print $q->hidden(-name=>'main_id', -override=>'1', -value=>"$rel4tpl->{main_id}");
print $q->hidden(-name=>'rel_id', -override=>'1', -value=>"$rel4tpl->{rel_id}");
}else{
print $q->span({-style=>'margin:0 0.2em;position:absolute;right:3px;'}," $buchen_users->{txt01} / $invoice_time "),"\n";
}
print "</div>\n";
print $q->hidden(-name=>'owner', -override=>'1', -value=>"$users->{owner}");
print $q->hidden(-name=>'c_idadr', -override=>'1', -value=>"$c_idadr");
print $q->hidden(-name=>'offset', -override=>'1', -value=>"$R::offset");
print $q->hidden(-name=>'limit', -override=>'1', -value=>"$R::limit");
print $q->hidden(-name=>'relids', -override=>'1', -value=>"$R::relids");
print $q->hidden(-name=>'ct_name4workflow', -override=>1, -value=>"$ctx->{ct_name}");
print $q->hidden(-name=>'p_template', -override=>'1', -value=>"$node->{node_path}");
print $q->hidden(-name=>'c_id4trans', -override=>'1', -value=>"$ctx->{c_id}");
print $q->hidden(-name=>'c_id4copy', -override=>'1', -value=>"$ctx->{c_id}");
print $q->hidden(-name=>'close_time', -override=>'1', -value=>"$ctx->{close_time}");
print $q->end_form,"\n";
print $q->div({-style=>'position:fixed;bottom:2%;right:1%;z-index:10;font-size:13px;'}," (c_id: $ctx->{c_id} | rel_id: $rel4tpl->{rel_id} | tpl_id: $rel4tpl->{tpl_id})"),"\n" if($u_id eq $varenv{superu_id});
##########
#Form for AdressData
print $q->start_form(-name=>'addressform'),"\n";
#Big table
print $q->start_table({-class=>'list', -border=>'0', -width=>'100%',-align=>'left', -cellpadding=>'3', -cellspacing=>'0'}),"\n";
print "<tr><td width='50%' style='font-size:1em;'>\n";
print $q->start_table({-class=>'list', -height=>'10em',-border=>'0', -width=>'100%',-align=>'left', -cellpadding=>'0', -cellspacing=>'0'}),"\n";
###Content #Edit Address --> template=Adressenliste
$ctt->{txt01} = $q->unescapeHTML("$ctt->{txt01}");
if($u_id && ($R::trans2edit eq "client" || $R::ct_trans eq "add_transadr")){
my @_anrede = ("","Frau","Herr","Firma");
print $q->hidden(-name=>'c_id4trans', -override=>'1', -value=>"$ctx->{c_id}"),"\n";#c_id from contenttrans
print $q->hidden(-name=>'int10', -override=>'1', -value=>"$c_idadr"),"\n";
#print $q->hidden(-name=>'txt26', -override=>'1', -value=>"$mandat"),"\n";
print $q->hidden(-name=>'c_idadr', -override=>'1', -value=>"$c_idadr"),"\n";
print $q->hidden(-name=>'rel_id', -override=>'1', -value=>"$rel4tpl->{rel_id}"),"\n";
print $q->hidden(-name=>'u_id', -override=>'1', -value=>"$u_id"),"\n";
print $q->Tr(),"\n";
print "<td class='tdtxt' nowrap>";
print $but->singlesubmit7("ct_trans","save_adr","$ib{save_adr}","","","ebutton4"),"\n";
#print $q->span($q->a({-class=>"ebutton3",-href=>'javascript:history.back()'}, " back "));
print "</td>\n";
print $q->td({-class=>'tdval',-nowrap=>1}, $but->selector("txt02","60px",$ctt->{txt02},@_anrede)),"\n";
#print $q->td({-class=>'tdval'}," ID $c_idadr $mandat"),"\n";
print $q->td({-class=>'tdval'},"Kunden ID $c_idadr"),"\n";
$ctt->{txt01} = $lb->newline($ctt->{txt01},"","1");
print $q->Tr(),"\n";
print $q->td({-class=>'tdescr'},"Vorname Name<br />Zusatz"),"\n";
print $q->td({-class=>'tdval',-colspan=>'2'},$q->textarea(-class=>'autos',-style=>'border:1px solid #ededed;background-color: #ededed;', -name=>'txt01', -default=>"$ctt->{txt01}", -rows=>1, -columns=>38)),"\n";
print $q->Tr(),"\n";
print $q->td({-class=>'tdescr'},"Straße Nr."),"\n";
print $q->td({-class=>'tdval',-colspan=>'2',-nowrap=>1}, $q->textfield(-class=>'etxt',-name=>'txt03', -default=>"$ctt->{txt03}", -size=>'34', maxlength=>'45')),"\n";
print $q->Tr(),"\n";
print $q->td({-class=>'tdescr'},"PLZ Ort"),"\n";
print $q->td({-class=>'tdval',-colspan=>'2'}, $q->textfield(-class=>'etxt',-name=>'txt06', -default=>"$ctt->{txt06}", -size=>'34', maxlength=>'45')),"\n";
print $q->Tr(),"\n";
print $q->td({-class=>'tdescr'},"eMail"),"\n";
print $q->td({-class=>'tdval',-colspan=>'2'}, $q->textfield(-class=>'etxt',-name=>'txt08', -default=>"$ctt->{txt08}", -size=>'34', maxlength=>'45')),"\n";
}elsif($u_id){
print $q->Tr(),"\n";
if(!$ctx->{close_time}){
print "<td class='tdtxt' style='width:8em;' nowrap>";
print $but->singlesubmit2glyph("trans2edit","client","Kunden bearbeiten","background-color:white;"),"\n";
print $q->hidden(-name=>'c_id4trans', -override=>'1', -value=>"$ctx->{c_id}"),"\n";
#from json_selectadr
print $q->hidden(-id=>'c_idadr', -name=>"c_idadr", -override=>'1'),"\n";
print $q->hidden(-id=>'vorname_name', -name=>"vorname_name", -override=>'1'),"\n";
print $q->textfield(-style=>'border:1px solid silver;vertical-align: top;',-id=>"json_selectadr",-name=>"json_selectadr", -value=>""),"\n";
print "</td>\n";
}else{
print $q->td({-class=>'tdtxt'},"&nbsp;"),"\n";
}
print $q->td({-class=>'tdval'},"$ctt->{txt02}"),"\n";
if($c_idadr && $rel_adr->{rel_id}){
print $q->td({-class=>'tdval'},$q->span({-style=>"background-color:#dcd77f;"},$q->a({-class=>"linknav",-href=>"/$users->{fullurl}/Kunden?node2edit=editpart\&mode=manager\&rel_id=$rel_adr->{rel_id}\&tpl_id=202",-title=>"Kunden Stammdaten öffnen"}," Kunden ID $c_idadr ")), $q->span({-style=>"color:red;"}," $ctadr->{int12}")),"\n";
}
if($ctt->{txt01} || $ctt->{txt02} || $ctt->{txt07} || $ctt->{txt08}){
$ctt->{txt01} = $lb->newline($ctt->{txt01},"","");
print $q->Tr(),"\n"; $line_count1++;
print $q->td({-class=>'tdtxt'},"&nbsp;"),"\n";
print $q->td({-class=>'tdval',-colspan=>2},"$ctt->{txt01}"),"\n";
print $q->Tr(),"\n"; $line_count1++;
print $q->td({-class=>'tdtxt'},"&nbsp;"),"\n";
print $q->td({-class=>'tdval',-colspan=>2},"$ctt->{txt03}"),"\n";
print $q->Tr(),"\n"; $line_count1++;
print $q->td({-class=>'tdtxt'},"&nbsp;"),"\n";
print $q->td({-class=>'tdval',-colspan=>2},"$ctt->{txt06}"),"\n";
print $q->Tr(),"\n"; $line_count1++;
print $q->td({-class=>'tdtxt'},"&nbsp;"),"\n";
print $q->td({-class=>'tdval',-colspan=>2},"$ctt->{txt08}"),"\n";
}
}
print $q->end_table;
print "</td>\n";
my $txt20 = $ctt->{txt20} || $ctf->{txt80};
my $int05 = "";
$int05 = "(manuell)" if($ctt->{int05});
print "<td width='50%' style='font-size:1em;'>\n";
print $q->start_table({-class=>'list', -border=>'0', -width=>'100%',-align=>'left', -cellpadding=>'0', -cellspacing=>'0'}),"\n";
if($u_id && ($R::trans2edit eq "client" || $R::ct_trans eq "add_transadr")){
print $q->Tr(),"\n";
print $q->td({-class=>'tdescr'},"RFID"),"\n";
print $q->td({-class=>'tdval'}, $q->textfield(-class=>'etxt',-name=>'txt09', -default=>"$ctt->{txt09}", -size=>'25', maxlength=>'40')),"\n";
print $q->Tr(),"\n";
print $q->td({-class=>'tdescr'},"Telefon"),"\n";
print $q->td({-class=>'tdval'}, $q->textfield(-class=>'etxt',-name=>'txt07', -default=>"$ctt->{txt07}", -size=>'25', maxlength=>'40')),"\n";
print $q->Tr(),"\n";
print $q->td({-class=>'tdescr'},"Leistungsdatum"),"\n";
print $q->td({-class=>'tdval'}, $q->textfield(-class=>'etxt',-name=>'txt20', -default=>"$txt20", -size=>'25', maxlength=>'60'),$but->checkbox("1","int05","$ctt->{int05}"),"manuell"),"\n";
print $q->hidden(-name=>"int05",-override=>1,-value=>"");
}else{
if($ctt->{txt09}){
print $q->Tr(),"\n";
print $q->td({-class=>'tdescr'},"RFID"),"\n";
print $q->td({-class=>'tdval'},"$ctt->{txt09}"),"\n";
}
if($ctt->{txt07}){
print $q->Tr(),"\n";
print $q->td({-class=>'tdescr'},"Telefon"),"\n";
print $q->td({-class=>'tdval',-style=>'min-width:20em;'},"$ctt->{txt07}"),"\n";
}
if($txt20){
print $q->Tr(),"\n";$line_count1++;
print $q->td({-class=>'tdescr'},"Leistungsdatum"),"\n";
if($ctt->{txt20}){
print $q->td({-class=>'tdval'},"$ctt->{txt20} $int05"),"\n";
}else{
print $q->td({-class=>'tdval'},"Zur Info: Anhand der Einstellung werden nur Positionen bis Buchungsdatum \"$ctf->{txt80}\" erfasst. Für Buchungen neueren Datums wird nach dem \"buchen\" eine weitere Rechnung generiert."),"\n";
}
}
}
#payone is working?
#keep in mind
#$ctx is primarly contenttrans
#$ctt = $ctx
#$ctt will partly overwritten by contentadr if address changes
my $pay_sequence = " | sequencenr: $ctt->{int18}" if($ctt->{int18});
if($ctt->{int03} && $ctt->{txt16}){
my @_paymentstate = split(/\|/,$varenv{Zahlungsweise});
my $kind_of_payment = "fehlt";
$kind_of_payment = "$_paymentstate[0]" if($ctt->{int03} == 1);
$kind_of_payment = "$_paymentstate[1]" if($ctt->{int03} == 2);
print $q->Tr(),"\n";
print $q->td({-class=>'tdescr'},"Payone Zahlungsart"),"\n";
print $q->td({-class=>'tdval'},"$kind_of_payment"),"\n";
print $q->Tr(),"\n";
print $q->td({-class=>'tdescr'},"Payone TXID"),"\n";
print $q->td({-class=>'tdval'},"$ctt->{txt16}"),"\n";
print $q->Tr(),"\n";
print $q->td({-class=>'tdescr'},"Payone Saldo"),"\n";
print $q->td({-class=>'tdval'},"$ctt->{int16} $pay_sequence"),"\n";
if($ctt->{txt28} =~ /error/i){
print $q->Tr(),"\n";
print $q->td({-class=>'tdescr'},"payone error"),"\n";
print $q->td({-class=>'tdval'},"(transaction) $ctt->{txt28}"),"\n";
}
}else{
#check payone status
if($ctt->{txt28} =~ /error/i){
print $q->Tr(),"\n";
print $q->td({-class=>'tdescr'},"payone error"),"\n";
print $q->td({-class=>'tdval'},"(transaction) $ctt->{txt28}"),"\n";
}elsif($ctadr->{txt28} =~ /error/i){
print $q->Tr(),"\n";
print $q->td({-class=>'tdescr'},"payone error"),"\n";
print $q->td({-class=>'tdval'},"(address) $ctadr->{txt28}"),"\n";
}
}
print $q->end_table;
print "</td></tr>\n";
###end
print $q->end_form,"\n";
###Content #Edit Parts
print "<tr><td colspan='5' style='font-size:1em;'>\n";
#require "Tpl/TransPositionen.pm";
my $line_count2 = $transp->tpl($node_meta,$users_dms,$set_main_id,$rel4tpl->{main_id},$rel4tpl->{rel_id},$ctx->{c_id},$u_id,$lang,"$return","$node->{node_name}");
print "</td></tr>\n";
###end Edit Parts
#Text & Vorbelegungen
my $tplf = $db->get_tpl("201");#Firma tpl
my @tplf_order = split /,/,$tplf->{tpl_order};
print $q->start_form(),"\n";
print "<tr><td colspan='5' style='font-size:1.1em;padding-top:1em;'>\n";
print $q->start_table({-class=>'list', -border=>'0', -width=>'100%',-align=>'left', -cellpadding=>'0', -cellspacing=>'0'}),"\n";
print $q->Tr(),"\n";
print $q->td({-class=>'tdval4',-colspan=>"2"},$q->span({-style=>'font-weight:bold;'},"Internas und Bearbeitungstatus")),"\n";
if($varenv{order_state}){
print $q->Tr(),"\n";
my @_orderstate = split(/\|/,$varenv{order_state});
print $q->td({-class=>'tdval4',-colspan=>2},$but->selector("txt22","180px",$ctt->{txt22},@_orderstate)),"\n";
}
$ctt->{txt23} = $q->unescapeHTML("$ctt->{txt23}") if($ctt->{txt23});
print $q->Tr(),"\n";
print $q->td({-class=>'tdval4',-colspan=>'2'},$q->textarea(-class=>'etxt',-name=>'txt23', -default=>"$ctt->{txt23}", -rows=>4, -columns=>90)),"\n";
print $q->hidden(-name=>'c_id4trans', -override=>'1', -value=>"$ctx->{c_id}");
print $q->hidden(-name=>'set_main_id', -override=>'1', -value=>"$set_main_id"),"\n";
my $ebutton = "ebutton";
$ebutton = "ebutton4" if($ctx->{ct_name} && $ctx->{ct_name} =~ /\d+/ && !$R::trans2edit && !$ctt->{txt12} && $ctt->{txt21} && $ctt->{txt21} !~ /\,/);
print $q->Tr(),"\n";
print $q->td({-class=>'tdval',-colspan=>2}, $but->singlesubmit7("ct_trans","save_text_internas","$ib{save_text}","","","$ebutton")),"\n" if($ctx->{close_time});
if($ctx->{close_time}){
print $q->end_form,"\n";
print $q->start_form(),"\n";
}
print $q->Tr(),"\n";
print $q->td({-class=>'tdval4',-colspan=>"2"},$q->span({-style=>'font-weight:bold;'},"PDF Formular Texte "),$q->span({-style=>'color:silver;font-weight:normal;'}," ( z.T. Definitionen aus Einstellung/Firma )")),"\n";
#Zahlungstexte
foreach(@tplf_order){
my ($key,$des,$size) = split /=/,$_;
if($key =~ /txt5/ && $ctf->{$key}){
my @line_txt = split(/\n/,$ctf->{$key});
$line_count1 += scalar(@line_txt);
$ctf->{$key} = $q->unescapeHTML("$ctf->{$key}");
$ctf->{$key} = $lb->newline($ctf->{$key},"","");
if("$des" =~ /$ctt->{state}/){
print $q->Tr(),"\n"; $line_count1++;
if($ctt->{int01} < 0){
#print $q->td({-class=>'tdval4',-style=>'width:8em;'},"Gutschrift Text"),"\n";
print $q->td({-class=>'tdval4',-colspan=>2},"$ctf->{txt58}"),"\n";
}else{
#print $q->td({-class=>'tdval4',-style=>'width:8em;'},"$des"),"\n";
print $q->td({-class=>'tdval4',-colspan=>2},"$ctf->{$key}"),"\n";
}
}
}
}
$ctt->{txt12} = $q->unescapeHTML($ctt->{txt12}) || "";
print $q->Tr(),"\n";
print $q->td({-class=>'tdval4',-colspan=>'2'},$q->textarea(-class=>'etxt',-name=>'txt12', -default=>"$ctt->{txt12}", -rows=>4, -columns=>90)),"\n";
print $q->Tr(),"\n"; $line_count1++;
my @line_txt12 = split(/\n/,$ctt->{txt12});
$line_count1 += scalar(@line_txt12);
#Vorbelegung-Text
my $formular_text = "";
my $set_text_id;
#at first empty checkbox definition (txt21='txt61,txt62,...')
print $q->hidden(-name=>"off_txt21",-override=>1,-value=>"");
foreach(@tplf_order){
my ($key,$des,$size) = split /=/,$_;
if($key =~ /txt6/ && $ctf->{$key}){
$ctf->{$key} = $q->unescapeHTML("$ctf->{$key}");
my $substrtxt = $lb->sub4txt($ctf->{$key},"0","14");
my $check="";
$check=1 if($ctt->{txt21} && $ctt->{txt21} =~ /$key/);
$formular_text .= " [ $key $substrtxt..." . $but->checkbox("$key","$key","$check","$ctf->{$key}") . " ] ";
if($ctt->{txt21} && $ctt->{txt21} =~ /$key/){
my @line_key = split(/\n/,$ctf->{$key});
$line_count1 += scalar(@line_key);
$ctf->{$key} = $lb->newline($ctf->{$key},"","");
print $q->Tr(); $line_count1++;
print $q->td({-class=>'tdval4',-colspan=>2},"$ctf->{$key}"),"\n";
}
}
}
###
print $q->hidden(-name=>'c_id4trans', -override=>'1', -value=>"$ctx->{c_id}"),"\n";
print $q->hidden(-name=>'set_main_id', -override=>'1', -value=>"$set_main_id"),"\n";
my $ebutton = "ebutton";
$ebutton = "ebutton4" if($ctx->{ct_name} && $ctx->{ct_name} =~ /\d+/ && !$R::trans2edit && !$ctt->{txt12} && $ctt->{txt21} !~ /\,/);
print $q->Tr(),"\n";
print $q->td({-class=>'tdval',-colspan=>2}, $but->singlesubmit7("ct_trans","save_text","$ib{save_text}","","","$ebutton"),"$formular_text"),"\n" if(!$ctx->{close_time});
print $q->end_table,"\n";
print "</td></tr>\n";
print $q->end_form,"\n";
print $q->end_table,"\n";
###end Big
$line_count2 = "0" . "$line_count2" if($line_count2 < 10);
my $line_count = "$line_count1.$line_count2";
#print $q->div({style=>'font-size:0.81em;'},"line to print -> address+text: $line_count1 | table: $line_count2"),"\n";
print "</div>\n";
$db->update_content4change2("contenttrans",$ctx->{c_id},"$line_count","int04") if($ctx->{c_id});
return $line_count;
}
1;

View file

@ -0,0 +1,146 @@
package AttributEdit;
#
#
# SPDX-License-Identifier: AGPL-3.0-or-later
# Copyright (c) Rainer Gümpelein, TeilRad GmbH
#
use strict;
use warnings;
use CGI::Carp qw(fatalsToBrowser);
use CGI ':standard';
use Lib::Config;
use Mod::Buttons;
use Mod::Libenz;
use Mod::Libenzdb;
use Mod::DBtank;
sub new {
my $class = shift;
my $self = {};
bless($self,$class);
return $self;
}
#Template
sub tpl(){
my $node_meta = shift;
my $users_dms = shift;
my $mode = shift;
my $return = shift;
my $q = new CGI;
my $cf = new Config;
my $lb = new Libenz;
my $db = new Libenzdb;
my $dbt = new DBtank;
my $but = new Buttons;
my %varenv = $cf->envonline();
my $script = $q->script_name();
my $path = $q->path_info();
my %ib = $but->ibuttons();
my $dbh = "";
my $tpl = $db->get_tpl($R::tpl_id);#Master template
my @tpl_order = split /,/,$tpl->{tpl_order};
my @_attr;
my $asort=0;
my $des_name;
my $key_txt;
my $checked_txt;
my $key_txtarea;
my $checked_txtarea;
my $key_int;
my $checked_int;
my $key_intcheck;
my $checked_intcheck;
my ($key,$des,$size);
foreach (@tpl_order){
$asort++;
($key,$des,$size) = split /=/,$_;
#push (@_attr, "$key") if($key);
if("$key" eq "$R::key"){
$des_name = $des;
if($key =~ /ct_name/){
last;
}
elsif($key =~ /txt(\d+)/ && $size =~ /area/){
$key_txtarea = $1;
$checked_txtarea = "checked";
last;
}
elsif($key =~ /txt(\d+)/){
$key_txt = $1;
$checked_txt = "checked";
last;
}
elsif($key =~ /int(\d+)/ && $size =~ /checkbox/){
$key_intcheck = $1;
$checked_intcheck = "checked";
last;
}
elsif($key =~ /int(\d+)/){
$key_int = $1;
$checked_int = "checked";
last;
}
}
}
$tpl->{change} = $lb->time4de($tpl->{change},"1") if($tpl->{change});
my $u_name = $tpl->{owner};
$u_name = $dbt->sys_username($dbh,$tpl->{owner});
print "<div style='border: 0px solid gray;margin: 0 auto;padding: 0;min-width: 100%;min-height: 150px;font-size: 14px;'>";
print $q->hidden(-name=>'key', -value=>"$R::key",-override=>'1');
print $q->start_table({-class=>'list', -border=>'0', -width=>'100%', -align=>'left', -cellpadding=>'3', -cellspacing=>'3'});
#Buttons
print $q->Tr();
print "<td style='background:$varenv{background_color2};margin:1px 0;padding:2px;' colspan='2' nowrap>\n";
print $but->singlesubmit7("rel_edit","save_attrtpl","","");
print $but->singlesubmit7("rel_edit","remove_chk4attr","","margin-left:10px;");
#print $but->singlesubmit9("dummy","zurück","","ebutton","","");
print $q->span({-style=>'margin-left:5em; font-size:0.91em;'}, "$u_name / $tpl->{change}");
print "</td>\n";
print $q->Tr();
print $q->td({-colspan=>'2'},"&nbsp;");
print $q->Tr();
print $q->td({-class=>'tdescr'}, "Service Datenfeldname"),"\n";
print $q->td({-class=>'tdval'},$q->textfield(-class=>'etxt',-name=>"des", -override=>'1',-default=>"$des_name")),"\n";
if($key =~ /txt|int/){
print $q->Tr();
print $q->td({-class=>'tdescr'}, "Datentyp"),"\n";
print "<td class='tdval'>\n";
if($R::key =~ /txt/){
print $but->radiobox("txt","key_typ","$checked_txt"),"Textzeile\n";
print $but->radiobox("txt_area","key_typ","$checked_txtarea"),"Textarea\n";
}elsif($R::key =~ /int/){
print $but->radiobox("int","key_typ","$checked_int"),"Dezimalzahl\n";
print $but->radiobox("int_checkbox","key_typ","$checked_intcheck"),"Checkbox\n";
}
print "</td>\n";
}
print $q->Tr();
print $q->td({-class=>'tdescr'},"Sortierung"),"\n";
print $q->td({-class=>'tdval'},$q->textfield(-class=>'etxt', -name=>"asort", -default=>"$asort")),"\n";
#print $q->Tr();
#print $q->td({-class=>'tdescr'},"Text Vorauswahl"),"\n";
#my $pre_values = $q->unescapeHTML("$ctf->{$R::key}");
#print $q->td({-class=>'tdval'},$q->textarea(-id=>"prev", -class=>'etxt',-style=>"width:300px;",-rows=>"1", -name=>"pre_values",-default=>"$pre_values", -override=>'1')),"\n";
#print "<script>\$(\"textarea#prev\").autoResize({extraSpace:10});</script>";
#print $q->hidden(-name=>'cuid_glob', -value=>"$cuid_glob",-override=>'1');
#print $q->Tr();
#print $q->td({-class=>'tdescr',-colspan=>'2'},""),"\n";
#print $q->Tr();
#print $q->td({-class=>'tdescr',-colspan=>'2'},"Achtung, das löschen oder ändern verursacht Datenverlust."),"\n";
print $q->end_table;
print "</div>";
}
1;

View file

@ -0,0 +1,205 @@
package AttributMatrix;
#
#
# SPDX-License-Identifier: AGPL-3.0-or-later
# Copyright (c) Rainer Gümpelein, TeilRad GmbH
#
use strict;
use warnings;
use CGI::Carp qw(fatalsToBrowser);
use CGI ':standard';
use Lib::Config;
use Mod::Buttons;
use Mod::Libenz;
use Mod::Libenzdb;
use Mod::DBtank;
sub new {
my $class = shift;
my $self = {};
bless($self,$class);
return $self;
}
#Template
sub tpl(){
my $node_meta = shift;
my $users_dms = shift;
my $mode = shift;
my $return = shift;
my $q = new CGI;
my $cf = new Config;
my $lb = new Libenz;
my $db = new Libenzdb;
my $but = new Buttons;
my $dbt = new DBtank;
my %varenv = $cf->envonline();
my $script = $q->script_name();
my $path_info = $q->path_info();
my $path = $path_info;
if("$varenv{metahost}"){
$path = "$script" . "$path_info";
$script="";
}
my $dbh = "";
my $lang = "de";
my %ib = $but->ibuttons_arch();
my @viewsel = split /\//,$1 if($path =~ /^\/(.*)/);
my $tpl_master = $db->get_tpl("400");
my @tpl_masterorder = ();
my $node = {};
if($users_dms->{int08} == 2){
print<<EOF
<script>
\$(function() {
function postValues() {
var data = \$("input[type='checkbox'], input[type='text'], input[type='hidden']").serialize();
\$.ajax({
url: '$varenv{wwwhost}/ajax_post',
type: 'POST',
async: true,
cache: false,
data: data,
});
}
\$("input[type='checkbox']").on( "click", postValues );
\$("input[type='text']").on( "change", postValues );
});
</script>
EOF
;
}
if($users_dms->{int08} >= 1){
@tpl_masterorder = split /,/,$tpl_master->{tpl_order};
my $pref = { template_id1 => 401,
template_id2 => 499,
fetch => "all",
keyfield => "main_id",
};
$node = $dbt->fetch_rel4tpl4nd($dbh,$pref);
}else{
$return = "failure::Abbruch. Keine Zugriffsberechtigung";
}
sub checkbox_style2() {
my ($sid_key,$dialog) = @_;
my $ck_style = "<style type='text/css'><!--
.sq_$dialog$sid_key {margin:auto;position: relative;width: 16px;height: 16px;}
.sq_$dialog$sid_key label {cursor: pointer;position: absolute;width: 16px;height: 16px;background:#cccccc;top: 0%;left: 0%;}
.sq_$dialog$sid_key :checked + label {content: '';position: absolute;width: 16px;height: 16px;background: #333333;top: 0%;left: 0%;}
//--></style>\n";
return $ck_style;
}
print "<div id='Content4list'>\n";
print $q->div({-class=>"copri_header",-style=>"background-color:#cccccc;"},"$path",$q->span("(shareetool Datenfeld Matrix)"));
print $q->start_form();
print $q->hidden(-name=>'mode', -override=>1, -value=>"supervisor");
#table header
print $q->start_table({-border=>'0', -width=>'100%',-align=>'center', -cellpadding=>'0', -cellspacing=>'0'});
print $q->Tr();
if($users_dms->{int08} == 2){
#print $q->th({-style=>'text-align:right;padding:1px 3px;font-size:1em;'},"Datenfeld", $but->singlesubmit2("rel_edit","new_attrtpl_int","$ib{new_attrtpl_int}","background-color:silver;"), $but->singlesubmit2("rel_edit","new_attrtpl_txt","$ib{new_attrtpl_txt}","background-color:silver;")),"\n";
print $q->th({-style=>'text-align:right;padding:1px 3px;font-size:1em;'},"Datenfeld", $but->singlesubmit2glyph("rel_edit","new_attrtpl_int","$ib{new_attrtpl_int}","background-color:silver;")),"\n";
}else{
print $q->th({-style=>'text-align:right;padding:1px 3px;font-size:1em;'},""),"\n";
}
#foreach my $id (sort {$node->{$a}->{n_sort} <=> $node->{$b}->{n_sort}} keys (%$node)){
foreach my $id (sort {$node->{$a}->{node_name} cmp $node->{$b}->{node_name}} keys (%$node)){
if($node->{$id}->{template_id}){
if($node->{$id}->{main_id} == $node_meta->{main_id}){
print $q->hidden(-name=>'template_id',-override=>'1', -value=>"$node->{$id}->{template_id}");
print $q->th({-class=>'thmatrix',-nowrap=>1,-colspan=>2}, $q->b("$node->{$id}->{node_name}")),"\n";
}else{
if($users_dms->{int08} == 2){
my $uri_path = $dbt->recurse_node($dbh,$node->{$id}->{main_id});
print $q->th({-class=>'thmatrix',-nowrap=>1,-colspan=>2}, $q->a({-class=>"sortnav",-href=>"/$uri_path/supervisor",-title=>'aktivieren'}, "$node->{$id}->{node_name}")),"\n";
}else{
print $q->th({-class=>'thmatrix',-nowrap=>1,-colspan=>2},"$node->{$id}->{node_name}"),"\n";
}
}
}
}
#table content
my $j=0;
my $set_style;
my $checked="";
#tpl_id=400
foreach (@tpl_masterorder){
$j++;
$set_style = "background-color:#fcfdfb;";
$set_style = "background-color:#f4f1ee;" if($j %= 2);
print $q->Tr();
my ($m_key,$m_des,$m_size) = split /=/,$_;
if($m_key !~ /img|time|c_id|barcode|int04|owner/){#static
print $q->td({-class=>'tdtxtw', -style=>"$set_style"},$q->a({-class=>'sortnav',-href=>"/$viewsel[0]/$viewsel[1]/$viewsel[2]/supervisor?node2edit=edit_template\&tpl_id=$tpl_master->{tpl_id}\&key=$m_key", -title=>"edit ($j)"},"$m_des")),"\n";
}else{
print $q->td({-class=>'tdtxtw', -style=>"$set_style"},$q->a({-class=>'sortnav',-href=>"#", -title=>"static"},"$m_des")),"\n";
}
foreach my $id (sort {$node->{$a}->{node_name} cmp $node->{$b}->{node_name}} keys (%$node)){
my $cat_off="";
my $m_style="margin:auto;width:16px;height:16px;background-color:#cccccc;";
my $interval="";
#tpl_id > 400 and depends on node
if($node->{$id}->{tpl_order} =~ /$m_key=[a-z0-9-_ ]+=[a-z0-9-_]+=(\d+)/i){
$interval = $1;
}
my $service_type="";
if($node->{$id}->{tpl_order} =~ /$m_key=[a-z0-9-_ ]+=[a-z0-9-_]+=\d+=(\d+)/i){
$service_type = $1;
}
if($node->{$id}->{main_id} == $node_meta->{main_id}){
my $ck_style = &checkbox_style2($m_key,"attr");
print "$ck_style";
$checked="";
$checked="checked" if($node->{$id}->{tpl_order} =~ /$m_key/);
}else{
$cat_off=1;
$m_style="margin:auto;width:16px;height:16px;background-color:#717171;" if($node->{$id}->{tpl_order} =~ /$m_key/);
}
#my @tpl_node = split /,/,$node->{$id}->{tpl_order};
foreach (@tpl_masterorder){
my ($key,$des,$size) = split /=/,$_;
if($m_key eq $key){
if($cat_off){
my $itext = "";
my $ytext = "";
if($interval){
$itext = "$interval Tage Intervall";
$ytext = "";
$ytext = " | weich=1" if($service_type eq 1);
}
$ytext = " | hart=2" if($service_type eq 2);
print $q->td({-class=>'tdtxtc', -style=>"$set_style"},$q->div({-style=>"$m_style"},"")),"\n";
print $q->td({-class=>'tdtxtc', -style=>"$set_style text-align:left"},$q->div({-style=>""},"$itext $ytext")),"\n";
}else{
#print $q->td({-class=>'tdtxtc', -style=>"$set_style"},$q->div({ -class => "sq_attr$key" },"<input type='checkbox' id='sq_attr$key' name='matrix_template' value='$key=$des=$size' $checked><label for='sq_attr$key'></label>")),"\n";
print $q->td({-class=>'tdtxtc', -style=>"$set_style"},$q->div({ -class => "sq_attr$key" },"<input type='checkbox' id='sq_attr$key' name='matrix_template' value='$key=$des=$size' $checked><label for='sq_attr$key'></label>")),"\n";
print $q->td({-class=>'tdtxtc', -style=>"$set_style text-align:left;"}, $q->textfield(-class=>'etxt',-size=>'1',-name=>"interval_$key", -override=>'1',-default=>"$interval"), "Tage Intervall | Typ ", $q->textfield(-class=>'etxt',-size=>'1',-name=>"servicetype_$key", -override=>'1',-default=>"$service_type")),"\n";
}
}
}
}
}
print $q->end_table;
print $q->end_form;
print "</div>\n";
return $return;
}
1;

View file

@ -0,0 +1,608 @@
package BaseEdit;
#
#
# SPDX-License-Identifier: AGPL-3.0-or-later
# Copyright (c) Rainer Gümpelein, TeilRad GmbH
#
#use lib "/var/www/copri4/shareedms-primary/src";
#
use strict;
use warnings;
use POSIX;
use CGI::Carp qw(fatalsToBrowser);
use CGI ':standard';
use Lib::Config;
use Mod::Buttons;
use Date::Calc qw(:all);
use Mod::Libenz;
use Mod::Libenzdb;
use Mod::Basework;
use Mod::DBtank;
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 $cf = new Config;
my $lb = new Libenz;
my $db = new Libenzdb;
my $bw = new Basework;
my $dbt = new DBtank;
my $apif = new APIfunc;
my $but = new Buttons;
my %ib = $but->ibuttons();
my %varenv = $cf->envonline();
my $lang = "de";
my $dbh = "";
#print $dbt->{operator}->{$varenv{dbname}}->{oprefix};
my $rel_id = $1 if($R::rel_id && $R::rel_id =~ /(\d+)/);
my $u_id = $1 if($R::u_id && $R::u_id =~ /(\d+)/);
$u_id = $1 if($R::c_idadr && $R::c_idadr =~ /(\d+)/ && $R::base_edit eq "new_dmsusers");
my ($edit,$copy_key,$save_key,$relate_key,$move_key,$delete_key,$package_key);
my $tpl;
my @tpl_order;
my $edit_template;
my $bg_color = "grey";
my $ctrel = {};
if($node_meta->{ct_table} eq "content" && $node_meta->{tpl_id}){
my $ref = {
table => "$node_meta->{ct_table}",
fetch => "one",
template_id => "$node_meta->{tpl_id}",
rel_id => "$rel_id",
};
$ctrel = $dbt->fetch_record($dbh,$ref);
print $q->hidden(-name=>'c_id',-override=>'1', -value=>"$ctrel->{c_id}");
print $q->hidden(-name=>'rel_id',-override=>'1', -value=>"$ctrel->{rel_id}");
$bg_color = $varenv{background_color2};
$edit = "rel_edit";
#$relate_key = "relate_dialog4menu";
$move_key = "move_dialog4menu" if($node_meta->{tpl_id} == 205);#only Waren
#$copy_key = "copy_content";
$save_key = "save_content";
$edit_template = "$ctrel->{template_id}";
$tpl = $db->get_tpl($edit_template);
}elsif($node_meta->{ct_table} eq "contentadr" && $node_meta->{tpl_id}){
my $ref = {
table => "$node_meta->{ct_table}",
fetch => "one",
template_id => "$node_meta->{tpl_id}",
rel_id => "$rel_id",
};
$ctrel = $dbt->fetch_record($dbh,$ref);
print $q->hidden(-name=>'c_id',-override=>'1', -value=>"$ctrel->{c_id}");
print $q->hidden(-name=>'rel_id',-override=>'1', -value=>"$ctrel->{rel_id}");
$bg_color = $varenv{background_color2};
$edit = "base_edit";
$save_key = "save_adr";
$edit_template = "$ctrel->{template_id}" . "000";
$tpl = $db->get_tpl($edit_template);
}elsif($node_meta->{ct_table} eq "users" && $u_id){
my $ref = {
table => "$node_meta->{ct_table}",
fetch => "one",
u_id => "$u_id",
};
$ctrel = $dbt->fetch_tablerecord($dbh,$ref);
print $q->hidden(-name=>'u_id',-override=>'1', -value=>"$ctrel->{u_id}");
$bg_color = $varenv{background_color2};
$edit = "base_edit";
$save_key = "save_dmsusers";
$tpl = $db->get_tpl($node_meta->{tpl_id});
#print Dumper($node_meta->{tpl_id}) . "\n u_id:" . $u_id;
}else{
print $q->div("Es konnten keine Daten gefunden werden"),"\n";
return "failure::Error, no table selected";
}
my $u_name = $dbt->sys_username($dbh,$ctrel->{owner});
if(ref($ctrel) ne "HASH" && !$ctrel->{c_id} && !$ctrel->{u_id}){
print $q->div("error: no content available");
}
$ctrel->{mtime} = $lb->time4de($ctrel->{mtime},"1") if($ctrel->{mtime});
my $selsize="200px";
#$db->users_up("rel_id4edit",$ctrel->{rel_id},$users_dms->{u_id});
print $q->hidden(-name=>'parent_id',-override=>'1', -value=>"$node_meta->{parent_id}");
print $q->hidden(-name=>'main_id',-override=>'1', -value=>"$node_meta->{main_id}");
print $q->hidden(-name=>'template_id',-override=>'1', -value=>"$node_meta->{template_id}");
print $q->hidden(-name=>'offset',-override=>'1', -value=>"$R::offset");
print $q->hidden(-name=>'limit', -override=>'1', -value=>"$R::limit");
print $q->hidden(-name=>'relids', -override=>'1', -value=>"$R::relids");
my ($start_date,$start_time,$s_dd,$s_mo,$s_yy,$s_hh,$s_mi,$end_date,$end_time,$e_yy,$e_mo,$e_dd,$e_hh,$e_mi);
my $today = strftime("%d.%m.%Y",localtime(time));
my $start_datetime = $ctrel->{start_time};
my $end_datetime = $ctrel->{end_time};
if($start_datetime){
($start_date,$start_time) = split(/ /,$start_datetime);
($s_yy,$s_mo,$s_dd) = split(/-/,$start_date);
$start_date = "$s_dd-$s_mo-$s_yy";
($s_hh,$s_mi) = split(/\:/,$start_time);
}
if($end_datetime){
($end_date,$end_time) = split(/ /,$end_datetime);
($e_yy,$e_mo,$e_dd) = split(/-/,$end_date);
$end_date = "$e_dd-$e_mo-$e_yy";
($e_hh,$e_mi) = split(/\:/,$end_time);
}
###
my $bike_nodes = {};
my $tariff_all = {};
if($varenv{systype} eq "sharee"){
my $node = { template_id => 205,#Leihrad_liste
parent_id => 200013,#Waren
fetch => "all",
keyfield => "main_id",
};
$bike_nodes = $dbt->fetch_rel4tpl4nd($dbh,$node);
$tariff_all = $db->collect_ct4rel("content","300026",$lang,"","","","","210");
}
print "<div id='Container_cms'>\n";
#1. table submit
print $q->start_table({-class=>'list', -border=>'0', -width=>'100%',-align=>'center', -cellpadding=>'3', -cellspacing=>'0'});
print $q->Tr();
print "<td style='background-color:$bg_color;padding:2px;border-bottom: 1px solid silver;'>";
print $but->singlesubmit7("$edit","$save_key","$ib{$save_key}","margin:0 5px;");
print $but->singlesubmit7("rel_edit","$relate_key","$ib{$relate_key}","margin:0 5px;");
print $but->singlesubmit7("rel_edit","$move_key","$ib{$move_key}","margin:0 5px;");
print $but->singlesubmit7("rel_edit","$copy_key","$ib{$copy_key}","margin:0 5px;");
print $but->singlesubmit7("$edit","remove_chk4rel","$ib{remove_chk4rel}","margin:0 5px;");
#print $q->div({-style=>'position:fixed;bottom:2%;right:1%;z-index:10;font-size:13px;'}," (c_id: $ctrel->{c_id} | rel_id: $ctrel->{rel_id} | tpl_id: $ctrel->{template_id} / $edit_template)"),"\n" if($users_dms->{u_id} eq $varenv{superu_id});
print "</td>\n";
print $q->td({-style=>"background-color:$bg_color;padding-right:10px;border-bottom: 1px solid silver;text-align:right;font-size:11px;"}, "$u_name / $ctrel->{mtime}");
print $q->end_table;
###Terminal target
my $c_key = "c_id";
my $add_trans = "add_transpos";
if("$node_meta->{ct_table}" =~ /contentadr/){
$add_trans = "add_transadr";
$c_key = "c_idadr";
}
my $tpath = "";
my $top = 70;
if($node_meta->{tpl_id} == 202){
my $cttrans = $db->collect_ct4rel4nd("contenttrans","","$lang","","","","ct.int10","$ctrel->{c_id}","209,218","","rel_id","");
foreach my $id (sort { $cttrans->{$b}->{c_id} <=> $cttrans->{$a}->{c_id} } keys (%$cttrans)){
my $toppx = $top . "px";
print $q->div({-style=>"position:absolute;top:$toppx;right:20px;"}, " TXID $cttrans->{$id}->{txt16} ",$q->span({-style=>"background-color:$varenv{term_active_color}"},$q->a({-class=>"linknav",-href=>"/$dbt->{shareedms_conf}->{parent_node}/Faktura/$cttrans->{$id}->{node_name}?ct_trans=open\&c_id4trans=$cttrans->{$id}->{c_id}\&tpl_id4trans=$cttrans->{$id}->{template_id}\&kind_of_trans=$users_dms->{kind_of_trans}&owner=$users_dms->{u_id}",-title=>"Faktura Terminal öffnen"},"[ $cttrans->{$id}->{node_name} #$cttrans->{$id}->{ct_name} ]"))),"\n";
$top += 22;
}
}elsif($node_meta->{tpl_id} == 205){
my $day = strftime "%d", localtime;
my $month = strftime "%m", localtime;
my $year = strftime "%Y", localtime;
my ($nyear,$nmonth,$nday) = Add_Delta_YMD($year,$month,$day, 0,0,-28);
my $toppx = $top . "px";
print $q->div({-style=>"position:absolute;top:$toppx;right:20px;"}, $q->span({-style=>"background-color:$varenv{calendar_active_color}"},$q->a({-class=>"linknav",-href=>"/$dbt->{shareedms_conf}->{parent_node}/Mietjournal/?detail_search=1&barcode=$ctrel->{barcode}&start_date_time=$nday.$nmonth.$nyear",-title=>"Mietjournal der letzten 4 Wochen"},"[ Mietjournal zu Rad $dbt->{operator}->{$varenv{dbname}}->{oprefix}$ctrel->{barcode} ]"))),"\n";
$top += 22;
#}else{
#print $q->div({-style=>"position:absolute;top:$top;right:20px;"},"no valid users path definition: $tpath"),"\n";
}
###
#just for checking if ct_name or barcode still available
if($varenv{orga} eq "dms"){
print<<EOF
<style>
.ui-autocomplete {
text-align:left;
font-size:14px;
background:#eeeeee;
border:1px solid silver;
}
</style>
<script>
\$(function() {
\$('#json_select').autocomplete({
source: '/ajax_json?mandant_id=catch_equal&table=content',
minLength: 1,
response: function(event, ui) {
if (ui.content.length === 0) {
\$('#log').text(' neu');
}else{
\$('#log').text('bereits angelegt!');
}
}
});
});
</script>
EOF
;
}
#2. table content
print $q->start_table({-border=>'0', -width=>'100%',-align=>'center', -cellpadding=>'3', -cellspacing=>'0'});
print "<tr>\n";
my $j=0;
@tpl_order = split /,/,$tpl->{tpl_order};
#2.1 sub-table
print "<td style='border-bottom:1px solid silver;border-right:1px solid silver;vertical-align:top;padding:15px;'>\n";
print $q->start_table({-border=>'0', -width=>'100%',-align=>'center', -cellpadding=>'3', -cellspacing=>'0'});
$j++;
my @_service_valxx = ("","1","2","3","4");
foreach (@tpl_order){
my ($key,$des,$size,$postdes) = split /=/,$_;
my $seldes = $des;
$des .= " ($key)" if($users_dms->{u_id} eq $varenv{superu_id});
$ctrel->{$key} = $q->unescapeHTML("$ctrel->{$key}");
$ctrel->{$key} = $lb->newline($ctrel->{$key},"",1);
if($key =~ /c_id|ct_name|barcode|txt/ && $size eq "readonly"){
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms',-colspan=>2},$q->textfield(-class=>'etxt', -style=>"width:15em;",-name=>"$key", -default=>"$ctrel->{$key}", -readonly=>1)),"\n";
}elsif($key eq "u_id" && $size eq "readonly"){
my $adref = {
table => "contentadr",
fetch => "one",
template_id => "202",
c_id => "$ctrel->{$key}",
};
my $ctadr = $dbt->fetch_record($dbh,$adref);
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"ID"),"\n";
print $q->td({-class=>'content1_cms',-colspan=>2},$q->textfield(-class=>'etxt', -style=>"width:15em;",-name=>"$key", -default=>"$ctrel->{$key}", -readonly=>1)),"\n";
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"Vorname Name"),"\n";
print $q->td({-class=>'content1_cms',-colspan=>2},$q->textfield(-class=>'etxt', -style=>"width:15em;",-name=>"", -default=>"$ctadr->{txt01}", -readonly=>1)),"\n";
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"eMail (Login)"),"\n";
print $q->td({-class=>'content1_cms',-colspan=>2},$q->textfield(-class=>'etxt', -style=>"width:15em;",-name=>"", -default=>"$ctadr->{txt08}", -readonly=>1)),"\n";
}elsif($key eq "ct_name"){
#blank Teilenummer
my $ct_name = $ctrel->{$key};
if(($node_meta->{ct_table} eq "content") && ($tpl->{tpl_order} =~ /barcode/) && ("$ct_name" eq "$ctrel->{barcode}")){
$ct_name = "";
}
my $w = $size . "em";
my $oprefix = "";
$oprefix = "$dbt->{operator}->{$varenv{dbname}}->{oprefix}-" if($node_meta->{tpl_id} == 224 || $node_meta->{tpl_id} == 228);
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms',-colspan=>2}, "$oprefix", $q->textfield(-class=>'etxt', -style=>"width:$w;",-name=>"$key", -override=>'1',-default=>"$ct_name")),"\n";
}
elsif($key eq "barcode"){
my $w = $size . "em";
my $oprefix = "";
$oprefix = "$dbt->{operator}->{$varenv{dbname}}->{oprefix}" if($node_meta->{tpl_id} == 205);
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms',-colspan=>1}, "$oprefix", $q->textfield(-class=>'etxt',-style=>"width:$w;",-id=>"json_select",-name=>"$key",-value=>"$ctrel->{$key}", -override=>'1',-size=>"25",-maxlength=>50),"");
print $q->td({-class=>'content1_cms',-id=>'log'},""),"\n";
}
elsif($key =~ /int/ && $size =~ /\w\+\w/ && $postdes eq "reverse"){
my ($a,$b) = split /\+/,$size;
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms',-colspan=>1},$but->radiobox2reverse("$key","$ctrel->{$key}","$a","$b")),"\n";
}
elsif($key =~ /int/ && $size =~ /\w\+\w/){
#if($users_dms->{u_id} eq $varenv{superu_id} || $des !~ /DMS/){#only superu_id can acivate DMS-Admin
if($users_dms->{u_id}){
my ($a,$b,$c) = split /\+/,$size;
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms',-colspan=>1},$but->radiobox2("$key","$ctrel->{$key}","$a","$b","$c")),"\n";
}
}
elsif($key =~ /int/ && $size =~ /checkbox/){
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms', -colspan=>'1'}, $but->checkbox("1","$key","$ctrel->{$key}"), $postdes),"\n";
print $q->hidden(-name=>"$key",-override=>1,-value=>"null");
}
elsif($key eq "int04"){
my $w = $size . "em";
my $oprefix = "";
$oprefix = "$dbt->{operator}->{$varenv{dbname}}->{oprefix}" if($node_meta->{tpl_id} == 225 || $node_meta->{tpl_id} == 205);
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms',-colspan=>1}, "$oprefix", $q->textfield(-class=>'etxt',-style=>"width:$w;",-name=>"$key",-value=>"$ctrel->{$key}", -override=>'1',-size=>"25",-maxlength=>50),"");
}
elsif($key =~ /int12/ && "$size" eq "select" && $node_meta->{tpl_id} == 210){#Flotte bike_group (bikenode.main_id)
my @_valxx = ("");
foreach my $rid (sort { $bike_nodes->{$a}->{node_name} cmp $bike_nodes->{$b}->{node_name} } keys (%$bike_nodes)){
push (@_valxx, "$bike_nodes->{$rid}->{main_id}:$bike_nodes->{$rid}->{node_name} - $bike_nodes->{$rid}->{main_id}");
}
print $q->Tr();
print $q->td({-class=>'left_italic_cms',-colspan=>'1'},"$des");
print $q->td({-class=>'content1_cms',-colspan=>'1'},$but->selector_class("$key","eselect","width:250px;",$ctrel->{$key},@_valxx));
}
elsif($key =~ /int21|int22/ && "$size" eq "select" && $node_meta->{tpl_id} == 228){#Bonus Tarif
my @_valxx = ("");
foreach my $rid (sort { $tariff_all->{$a}->{barcode} <=> $tariff_all->{$b}->{barcode} } keys (%$tariff_all)){
push (@_valxx, "$tariff_all->{$rid}->{barcode}:$tariff_all->{$rid}->{barcode} - $tariff_all->{$rid}->{txt01}");
}
print $q->Tr();
print $q->td({-class=>'left_italic_cms',-colspan=>'1'},"$des");
print $q->td({-class=>'content1_cms',-colspan=>'1'},$but->selector_class("$key","eselect","width:350px;",$ctrel->{$key},@_valxx));
}
elsif($key =~ /int07/ && "$size" eq "select" && $node_meta->{tpl_id} == 225){#Station Service Tour
my $selsize="50px";
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms',-colspan=>'2'},$but->selector("$key","$selsize",$ctrel->{$key},@_service_valxx));
}
elsif($key =~ /int10/ && "$size" eq "select" && ($node_meta->{tpl_id} == 205 || $node_meta->{tpl_id} == 225)){#bike_state
my @_lock_valxx = ();
while (my ($key, $value) = each %{ $dbt->{copri_conf}->{bike_state} }) {
push @_lock_valxx, "$key:$value";#[1:available] ...
}
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms',-colspan=>'2'},$but->selector_class("$key","eselect","",$ctrel->{$key},@_lock_valxx));
}
elsif($key =~ /int18/ && "$size" eq "select" && $node_meta->{tpl_id} == 210){#sharing_type
my @_lock_valxx = ();
while (my ($key, $value) = each %{ $dbt->{copri_conf}->{sharing_type} }) {
push @_lock_valxx, "$key:$value";#[0:private] ...
}
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms',-colspan=>'2'},$but->selector_class("$key","eselect","",$ctrel->{$key},@_lock_valxx));
}
elsif($key =~ /int20/ && "$size" eq "select" && $node_meta->{tpl_id} == 205){#lock_state locked/unlocked
my @_lock_valxx = ();
while (my ($key, $value) = each %{ $dbt->{copri_conf}->{lock_state} }) {
push @_lock_valxx, "$key:$value";#[2:unlocked]
}
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms',-colspan=>'2'},$but->selector_class("$key","eselect","",$ctrel->{$key},@_lock_valxx));
}
elsif($key =~ /int11/ && "$size" eq "select" && $node_meta->{tpl_id} == 205){#lock_system BC Ilockit usw
my @_lock_valxx = ();
while (my ($key, $value) = each %{ $dbt->{copri_conf}->{lock_system} }) {
push @_lock_valxx, "$key:$value";#[2:Ilockit]
}
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms',-colspan=>'2'},$but->selector_class("$key","eselect","",$ctrel->{$key},@_lock_valxx));
}
elsif($key =~ /int/ && "$size" eq "select"){
my @_valxx;
my $selsize="50px";
@_valxx = split(/\|/,$varenv{$seldes});
$ctrel->{$key} =~ s/\.00//;
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms',-colspan=>'2'},$but->selector("$key","$selsize",$ctrel->{$key},@_valxx));
}
elsif($key =~ /int/){
my $w = $size . "em";
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms',-colspan=>2},$q->textfield(-class=>'etxt', -style=>"width:$w;",-name=>"$key", -override=>'1', -default=>"$ctrel->{$key}"), $postdes),"\n";
}
elsif($key =~ /txt/ && "$size" eq "select" && "$des" =~ /Status|PiQuest|Zahlungsweise/){
my @_valxx;
my $selsize="150px";
@_valxx = split(/\|/,$varenv{$seldes}) if($varenv{$seldes});
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
if($des eq "PiQuest"){
print $q->td({-class=>'content1_cms',-colspan=>'2'},$but->selector("$key","$selsize","",@_valxx)," $ctrel->{$key}");
}else{
print $q->td({-class=>'content1_cms',-colspan=>'2'},$but->selector("$key","$selsize",$ctrel->{$key},@_valxx));
}
}
elsif($key =~ /txt/ && "$size" eq "select" && "$des" =~ /System|Ziel Datei/){
my @_valxx;
my $selsize="150px";
@_valxx = split(/\|/,$varenv{$seldes}) if($varenv{$seldes});
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms',-colspan=>'2'},$but->selector("$key","$selsize",$ctrel->{$key},@_valxx));
}
elsif($key =~ /txt/ && "$size" eq "select" && "$des" =~ /Land/){
my @_valxx;
my $selsize="150px";
my $country = $lb->country_code();
$ctrel->{$key} = "DE" if(!$ctrel->{$key});
foreach (sort { $country->{$a} cmp $country->{$b} } keys (%$country)){
push @_valxx, "$_:$country->{$_}";
}
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms',-colspan=>'2'},$but->selector("$key","$selsize",$ctrel->{$key},@_valxx));
}
elsif($node_meta->{tpl_id} == 205 && $key =~ /txt23/ && "$size" =~ /select/){#Service-Farbcode
my @_valxx = ("red","blue","green");
my @service_code = ("red","red","red","red","red","red");
@service_code = split(/\s/,$ctrel->{$key}) if($ctrel->{$key} =~ /\w+\s\w+\s\w+\s\w+\s\w+\s\w+/g);
print $q->Tr();
print $q->td({-class=>'left_italic_cms',-style=>'vertical-align:top;',-colspan=>'1'},"$des");
print "<td class='content1_cms' colspan='1'>\n";
foreach(@service_code){
print $but->selector_color("$key","color:white;background-color:$_;width:60px;",$_,@_valxx);
}
print "</td>\n";
}
elsif($key =~ /txt/ && "$size" =~ /select/){
if($size =~ /_multiple/){
if($key =~ /txt18/ && $node_meta->{tpl_id} eq "202"){ #service_tour alias user_tour
my $height = scalar(@_service_valxx);
print $q->Tr();
print $q->td({-class=>'left_italic_cms',-style=>'vertical-align:top;',-colspan=>'1'},"$des");
print $q->td({-class=>'content1_cms',-colspan=>'1'},$but->selector2("$key","50px;","$height",$ctrel->{$key},@_service_valxx));
}
elsif($key =~ /txt24/ && $node_meta->{tpl_id} == 225){ #sharee station_group (bikenode.main_ids)
my @_valxx = ("");
foreach my $rid (sort { $bike_nodes->{$a}->{node_name} cmp $bike_nodes->{$b}->{node_name} } keys (%$bike_nodes)){
push (@_valxx, "$bike_nodes->{$rid}->{main_id}:$bike_nodes->{$rid}->{node_name} - $bike_nodes->{$rid}->{main_id}");
}
my $height = scalar(@_valxx);
print $q->Tr();
print $q->td({-class=>'left_italic_cms',-style=>'vertical-align:top;',-colspan=>'1'},"$des");
print $q->td({-class=>'content1_cms',-colspan=>'1'},$but->selector2("$key","250px;","$height",$ctrel->{$key},@_valxx));
}
#sharee user_group Tarif-2.0 (tarif.c_ids)
elsif($key =~ /txt30/ && $varenv{dbname} ne "sharee_primary"){
my @_valxx = ("");
foreach my $rid (sort { $tariff_all->{$a}->{barcode} <=> $tariff_all->{$b}->{barcode} } keys (%$tariff_all)){
if($tariff_all->{$rid}->{ct_name}){
push (@_valxx, "$tariff_all->{$rid}->{barcode}:$tariff_all->{$rid}->{barcode} - $tariff_all->{$rid}->{txt01} - $tariff_all->{$rid}->{int12}");
}
}
my $height = scalar(@_valxx);
print $q->Tr();
print $q->td({-class=>'left_italic_cms',-style=>'vertical-align:top;',-colspan=>'1'},"$des");
print $q->td({-class=>'content1_cms',-colspan=>'1'},$but->selector2("$key","350px;","$height",$ctrel->{$key},@_valxx));
}
}else{
my @_valxx = ("");
@_valxx = split(/,/,$varenv{$seldes}) if($varenv{$seldes});
my $selsize = "80px";
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms',-colspan=>'2'},$but->selector("$key","$selsize",$ctrel->{$key},@_valxx));
}
#print $q->hidden(-name=>"$key",-override=>1,-value=>"null");#2021-06-02 select works without empty null
}
elsif($key =~ /txt/ && $size =~ /area$/){
my $h= 1;# if($size =~ /area(\d+)/);
print $q->Tr();
print $q->td({-class=>'left_italic_cms',-colspan=>1},"$des"),"\n";
print $q->td({-class=>'content1_cms', -colspan=>'3'},$q->textarea(-class=>"autos", -style=>'border: 1px solid silver;background-color:#ededed;',-rows=>"$h",-cols=>'35em;', -name=>"$key", -override=>'1',-default=>"$ctrel->{$key}")),"\n";
}
elsif($key =~ /txt/ && $size =~ /area(\d+)/){
#my $h= $1 if($size =~ /area(\d+)/);
my $h= "height:" . $1 . "em;";
my $w = "width:25em;";
$w= "width:" . $2 . "em;" if($size =~ /area(\d+)-(\d+)/);
print $q->Tr();
print $q->td({-style=>'padding:4px 0 0 0px;',-colspan=>1},""),"\n";
print $q->td({-style=>'padding:4px 0 0 0px;',-colspan=>3},"$des"),"\n";
print $q->Tr();
print $q->td({-style=>'padding:4px 0 0 0px;',-colspan=>1},""),"\n";
if($key eq "txt28" && $ctrel->{$key} =~ /SEPA-Lastschriftmandat/){
use URI::Encode qw(uri_encode uri_decode);
$ctrel->{txt28} = uri_decode($ctrel->{txt28});
$ctrel->{txt28} =~ s/\+/ /g;
print $q->td({-style=>'border:1px solid silver;'},$ctrel->{txt28}),"\n";
}else{
print $q->td({-class=>'content1_cms', -colspan=>'3'},$q->textarea(-id=>"$key", -class=>"autos", -style=>"border: 1px solid silver;background-color:#ededed;$h $w", -name=>"$key", -override=>'1',-default=>"$ctrel->{$key}")),"\n";
}
}
elsif($key =~ /txt02/ && $varenv{syshost} =~ /sharee/){
#nothing txt02=Datei aktiv=10=sharee-APP aktivierte Dokument
}
elsif($key =~ /txt15/ && $varenv{syshost} =~ /sharee/ && $node_meta->{tpl_id} == 202){
my $w = $size . "em";
my $record_bonus = {c_id => 0};
my $pref_cc = {
table => "content",
fetch => "one",
template_id => "228",
ct_name => "$ctrel->{txt15}",
};
$record_bonus = $dbt->fetch_record($dbh,$pref_cc);
my @tariff = ("$ctrel->{txt30}");
@tariff = split(/\s/,$ctrel->{txt30}) if($ctrel->{txt30} =~ /\s/);
foreach my $tf_id (@tariff){
$tf_id =~ s/\s//g;
#print "$record_bonus->{int22} == $tf_id<br>";
if($record_bonus->{int22} == $tf_id){
$postdes = "Tarif: $record_bonus->{int21} - $record_bonus->{int22} (public - bonus)";
$postdes .= $q->span({-style=>'color:red;padding-left:10px;'},"Fehler: Bonusnummer") if(!$ctrel->{$key});
}
}
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms',-colspan=>'2'},$q->textfield(-class=>'etxt', -style=>"width:$w;",-name=>"$key", -override=>'1', -default=>"$ctrel->{$key}"), $postdes),"\n";
}
#Operators or Operators Antrag
elsif($key =~ /txt17|txt19/){
if($varenv{dbname} eq "sharee_primary"){
my $w = $size . "em";
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms',-colspan=>'2'},$q->textfield(-class=>'etxt', -style=>"width:$w;",-name=>"$key", -override=>'1', -default=>"$ctrel->{$key}"), $postdes),"\n";
}
}
elsif($key =~ /txt/){
my $w = $size . "em";
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"$des"),"\n";
print $q->td({-class=>'content1_cms',-colspan=>'2'},$q->textfield(-class=>'etxt', -style=>"width:$w;",-name=>"$key", -override=>'1', -default=>"$ctrel->{$key}"), $postdes),"\n";
}
elsif($key =~ /byte/){
my $K_int = unpack "H*", $ctrel->{$key};
#$K_int =~ s/(.)/sprintf( "%x", ord($1))/eg;
my $w = $size . "em";
print $q->Tr();
print $q->td({-class=>'left_italic_cms',-colspan=>1},"$des"),"\n";
print $q->td({-class=>'content1_cms',-colspan=>'2'},$q->textfield(-class=>'etxt', -style=>"width:$w;",-name=>"$key", -override=>'1', -default=>"$K_int"), $postdes),"\n";
}
if($key =~ /date_time/){
#print $q->hidden(-name=>'t_id', -override=>'1',-value=>"$times_id");
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"Datum Start"),"\n";
print $q->td({-class=>'content1_cms', -colspan=>'1'},$q->textfield(-id=>'datepicker1',-class=>'etxt',-name=>"start_date",-default=>"$start_date",-override=>'1',-size=>"10",-maxlength=>10)),"\n";
print $q->td({-class=>'content1_cms', -colspan=>'1'},"Ende", $q->textfield(-id=>'datepicker2',-class=>'etxt',-name=>"end_date",-default=>"$end_date",-override=>'1',-size=>"10",-maxlength=>10)),"\n";
print $q->Tr();
print $q->td({-class=>'left_italic_cms'},"Uhrzeit Start"),"\n";
print $q->td({-class=>'content1_cms',-colspan=>'1'},
$q->textfield(-class=>'etxt',-name=>"s_hh", -override=>'1',-default=>"$s_hh",-size=>"2",-maxlength=>2),":",
$q->textfield(-class=>'etxt',-name=>"s_mi", -override=>'1',-default=>"$s_mi",-size=>"2",-maxlength=>2)),"\n";
print $q->td({-class=>'content1_cms',-colspan=>'1'},"Ende",
$q->textfield(-class=>'etxt',-name=>"e_hh", -override=>'1',-default=>"$e_hh",-size=>"2",-maxlength=>2),":",
$q->textfield(-class=>'etxt',-name=>"e_mi", -override=>'1',-default=>"$e_mi",-size=>"2",-maxlength=>2)),"\n";
}
}
print $q->end_table;
print "</td>\n";
print "</tr>\n";
print $q->end_table;
#2.table ende
print $q->div($but->singlesubmit7("$edit","$save_key","$ib{$save_key}","margin:10px 20px;")),"\n";
my $debug = "";
#$debug = "(ct_table: $node_meta->{ct_table} | main_id: $node_meta->{main_id} | c_id: $ctrel->{c_id} | tpl_id: $tpl->{tpl_id} | rel_id: $ctrel->{rel_id})";
print $q->div({-style=>'z-index:10;font-size:13px;'},"$debug"),"\n" if($users_dms->{u_id} eq $varenv{superu_id});
print "</div>";
}
1;

View file

@ -0,0 +1,467 @@
package Calorin;
#
#
# SPDX-License-Identifier: AGPL-3.0-or-later
# Copyright (c) Rainer Gümpelein, TeilRad GmbH
#
use strict;
use warnings;
use POSIX;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use CGI ':standard';
use Calendar::Simple;
use Date::Calc qw(:all);
use Lib::Config;
use Mod::Buttons;
use Mod::Libenz;
use Mod::Callib;
use Mod::Libenzdb;
use Mod::DBtank;
use Mod::APIfunc;
use Mod::Pricing;
use Data::Dumper;
sub new {
my $class = shift;
my $self = {};
bless($self,$class);
return $self;
}
#Template
sub tpl(){
my ($node_meta,$users_dms,$u_group,$return) = @_;
my $q = new CGI;
my $cf = new Config;
my $lb = new Libenz;
my $but = new Buttons;
my $cb = new Callib;
my $db = new Libenzdb;
my $apif = new APIfunc;
my $dbt = new DBtank;
my $pri = new Pricing;
my $lang = "de";
#my $rel = $db->get_relation($main_id,$lang);
my $tpl = $db->get_tpl($node_meta->{template_id});
my @tpl_order = split /,/,$tpl->{tpl_order};
my %varenv = $cf->envonline();
my %ib = $but->ibuttons();
my $script = $q->script_name();
my $path_info = $q->path_info();
my $path = $path_info;
#with meta_host,
if("$varenv{metahost}"){
$path = "$script" . "$path_info";
$script="";
}
$path =~ s/\/user|\/manager|\/admin//;
my $now_time = strftime "%Y-%m-%d %H:%M", localtime;
my $table = "contenttrans";
my $u_name = $q->escapeHTML("$R::u_name");
my $ctf = $db->get_content1("contentuser",$dbt->{shareedms_conf}->{parent_id});
my $dbh = "";
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 = (":user");
foreach my $id (sort { $channel_map->{$a} cmp $channel_map->{$b} } keys (%$channel_map)){
push (@_users, "$id:$channel_map->{$id}");
if($channel_map->{$id} eq $R::s_owner){
#$searchref->{owner} = $id;
#$s_u_name = $channel_map->{$id};
}
}
if(1==1){
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} && ($ct_users->{$ctu_id}->{txt01} =~ /$R::s_owner/i)){
#$searchref->{owner} = $ct_users->{$ctu_id}->{c_id};
#$s_u_name = $ct_users->{$ctu_id}->{txt01};
}
}
}
my $bnode = { template_id => 205,#Leihrad_liste
parent_id => 200013,#Waren
fetch => "all",
keyfield => "main_id",
};
my $bike_nodes = $dbt->fetch_rel4tpl4nd($dbh,$bnode);
my $root_id = 100;
#alle nicht abgeschlossene mandanten-einträge ....
my $x_main_ids = "$root_id,";
my $tplids = "$node_meta->{template_id},";
$tplids .= "$ctf->{txt34}," if($ctf->{txt34});
$tplids .= "$ctf->{txt35}," if($ctf->{txt35});
$tplids .= "$ctf->{txt36}," if($ctf->{txt36});
#sollte ins ctf-System. Verkaufliste,Verleihliste
#incl. Verkauf/Verleih journal
$tplids .= "204,207,218,209";
$tplids =~ s/,$//;
$x_main_ids .= $db->collect_noderec($root_id,$lang,"nothing");
$x_main_ids =~ s/,$//;
my $ct4rel = $db->collect_ct4rel4nd($table,"$x_main_ids","$lang","","","","","","$tplids","","c_id","");
my @months = $cb->monthmap();
my $hh;my $mm;
my $day = strftime "%d", localtime;
my $day_today = $day;
my $mon = strftime "%m", localtime;
my $mon_today = $mon;
my $year = strftime "%Y", localtime;
my $year_today = $year;
($year,$mon,$day,$hh,$mm) = $lb->split_date($users_dms->{cal_start}) if($users_dms->{cal_start});
print $q->end_form;
print $q->start_form();
print "<div id='Content4list' style='font-size:0.91em;min-width:1300px;'>\n";
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 $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 "%");
print $q->div({-style=>'background-color:white;color:red;'},"&rarr; Datum Eingabefehler: $start_date_time <<<") if($end_chck);
}
if($end_date_time){
($end_date_time,$end_chck) = $lb->checkdate($end_date_time) if($end_date_time ne "%");
print $q->div({-style=>'background-color:white;color:red;'},"&rarr; Datum Eingabefehler: $end_date_time <<<") if($end_chck);
}
if(!$end_date_time){
my $days4month = Days_in_Month($year,$mon);
$end_date_time = "$days4month.$mon.$year";
$end_date_time = $cb->datetime_defaults($end_date_time,"dummy",$lang);
}
my $limit = $R::limit || $varenv{limit} * 2;#max. 160 * 2
my $offset = $R::offset || "0";
if($R::detail_search){
$limit = 10000;
$offset = 0;
}
#backward | forward
if($R::go eq "backward_list"){
$offset -= $limit if($offset >= $limit);
}elsif($R::go eq "forward_list"){
$offset += $limit;
}
my $cttpos;
$R::ct_ct_name =~ s/\#//;
my $search = {
#table => "contenttranspos",
table => "$node_meta->{ct_table}",
cttpos_id => $q->escapeHTML("$R::cttpos_id"),
txt06 => $q->escapeHTML("$R::txt06"),
txt08 => $q->escapeHTML("$R::txt08"),
int04 => $q->escapeHTML("$R::int04"),
int06 => $q->escapeHTML("$R::int06"),
int12 => $q->escapeHTML("$R::int12"),
int13 => $q->escapeHTML("$R::int13"),
cp_ct_name => $q->escapeHTML("$R::cp_ct_name"),
int10 => $q->escapeHTML("$R::int10"),
int20 => $q->escapeHTML("$R::int20"),
barcode => $q->escapeHTML("$R::barcode"),
ct_txt06 => $q->escapeHTML("$R::ct_txt06"),#PLZ
ct_ct_name => $q->escapeHTML("$R::ct_ct_name"),
owner => $q->escapeHTML("$R::owner"),
limit => $q->escapeHTML($limit),
offset => $q->escapeHTML($offset),
cal_sort_updown => $users_dms->{cal_sort_updown},
};
$search = { %$search,
start_date_time => "$start_date_time",
end_date_time => "$end_date_time",
} if(!$R::cttpos_id);
if(!$start_chck && !$end_chck){
if($node_meta->{ct_table} eq "contenttranspos"){
$cttpos = $dbt->collect_transpos($dbh,$search);
}elsif($node_meta->{ct_table} eq "contenttheftpos"){
$cttpos = $dbt->collect_theftpos($dbh,$search);
}
}
#2019-05-09 collect content to get content.txt10 for Räder Status
my $tpl_id_ware = "205";
my $ct4rel_ware = {};
$ct4rel_ware = $db->collect_cid("content",$lang,$tpl_id_ware,"","","","");
my $header_style = "";
$header_style = "border:2px solid #9f1f0e;" if($message);
print $q->div({-class=>"copri_header",-style=>"background-color:$tpl->{bg_color};"},"$path", $q->span({-style=>"padding:4px 10px;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";
my $sort_up = "up";
my $sort_down = "down";
$sort_up = "<b>$sort_up</b>" if($users_dms->{cal_sort_updown} eq "up");
$sort_down = "<b>$sort_down</b>" if($users_dms->{cal_sort_updown} eq "down");
print $q->div({-style=>'background-color:silver;height:10px;'},""),"\n";
my $hstyle = "border-right: solid thin gray;border-bottom: solid thin gray;";
my $search = "search";
my $edit="ct_trans";
my $new_key="new_transdate";
print $q->start_table({ -style=>"width:100%;", -border=>'0',-align=>'left', -cellpadding=>'1', -cellspacing=>'0'});
print $q->Tr();
print $q->td({-style=>"background-color:silver;$hstyle;width:30px;padding:1px 10px;"},$but->singlesubmit1("detail_search","$search")),"\n";
#1. Search-fields
my $h=3;
print "<td class='search_line'>\n";
print $q->a({-class=>"sortnav",-href=>"?cal_sort_updown=up\&offset=$offset\&limit=$limit",-title=>'Aufsteigend sortieren'},"$sort_up"),"|",$q->a({-class=>"sortnav",-href=>"?cal_sort_updown=down\&offset=$offset\&limit=$limit",-title=>'Absteigend sortieren'},"$sort_down"),"\n";
foreach(@tpl_order){
#$h++;
my ($key,$des,$size) = split /=/,$_;
if($key =~ /time/){
$size="10px";
print $q->textfield(-id=>'datepicker1',-class=>'etxt',-name=>"start_$key",-default=>"$start_date_time",-size=>"$size",-maxlength=>20), "-", $q->textfield(-id=>'datepicker2',-class=>'etxt',-name=>"end_$key",-default=>"$end_date_time",-size=>"$size",-maxlength=>20),"\n";
}
elsif($key =~ /owner/){
print $but->selector_class("$key","eselect","width:80px;",$R::owner,@_users),"\n";
}
elsif($key =~ /int10/ && "$size" eq "select"){# && $node_meta->{tpl_id} == 205){#bike_state
my @_lock_valxx = (":$des");
while (my ($key, $value) = each %{ $dbt->{copri_conf}->{bike_state} }) {
push @_lock_valxx, "$key:$value";#[1:available] ...
}
print $but->selector_class("$key","eselect","",$R::int10,@_lock_valxx),"\n";
}
elsif($key =~ /int12/ && "$size" eq "select"){# && $node_meta->{tpl_id} == 210){#Flotte bike_group (bikenode.main_id)
my @_valxx = (":$des");
foreach my $rid (sort { $bike_nodes->{$a}->{node_name} cmp $bike_nodes->{$b}->{node_name} } keys (%$bike_nodes)){
push (@_valxx, "$bike_nodes->{$rid}->{main_id}:$bike_nodes->{$rid}->{node_name} ($bike_nodes->{$rid}->{main_id})");
}
print $but->selector_class("$key","eselect","width:100px;",$R::int12,@_valxx),"\n";
}
elsif($key =~ /int20/ && "$size" eq "select"){# && $node_meta->{tpl_id} == 205){#lock_state locked/unlocked
my @_lock_valxx = (":$des");
while (my ($key, $value) = each %{ $dbt->{copri_conf}->{lock_state} }) {
push @_lock_valxx, "$key:$value";#[2:unlocked]
}
print $but->selector_class("$key","eselect","width:100px;",$R::int20,@_lock_valxx),"\n";
}
else{
$size="9px" if($key =~ /int/);
if($key =~ /ct_name/){
print $q->textfield(-class=>'stxt2',-name=>"$key",-default=>"",-size=>"$size",-maxlength=>40, -placeholder=>"$des",-autofocus=>1),"\n";
}else{
print $q->textfield(-class=>'stxt2',-name=>"$key",-default=>"",-size=>"$size",-maxlength=>40, -placeholder=>"$des"),"\n";
}
}
}
print "</td>\n";
my ($daymarker,$raster_mmpx,$day4month) = $lb->month_line($users_dms);
print $q->Tr();
print $q->td({-class=>'element',-style=>"height:1.5em;padding:0;border:0px solid green;",-colspan=>"$h",-nowrap=>"1"},"$day4month"),"\n";
###
###Calendar Content
my $nx;my $set_style="";my $kind;
my $scale_color = $node_meta->{bg_color};
my $edit="ct_trans";
my $save_key="save";
my $delete_key="delete";
my $itime;
my $start_time;
my $end_time;
my ($year_st,$mon_st,$day_st,$hh_st,$mm_st);
my ($year_en,$mon_en,$day_en,$hh_en,$mm_en);
my $nr=0;
my $i= $offset || 0;
$users_dms->{cal_sort_updown} = "down" if(!$users_dms->{cal_sort_updown});
foreach my $pid (sort {
if($users_dms->{cal_sort_updown} eq "down"){
$cttpos->{$b}->{end_time} cmp $cttpos->{$a}->{end_time}
}else{
$cttpos->{$a}->{end_time} cmp $cttpos->{$b}->{end_time}
}
} keys(%$cttpos)){
$nr++;
$i++;
$nx++;
$set_style = "background-color:#fcfdfb;";
$set_style = "background-color:#f4f1ee;" if($nx %= 2);
#$set_style = "background-color:$varenv{calendar_active_color}" if("$R::c_idpos" == "$cttpos->{$pid}->{c_id}");
my $trans_style = "padding:0 5px;border: 2px solid #f7ae37;";
my $stamm_style = "padding:0 5px;border: 2px solid #98c13b;";
my $ware_style = "padding:0 5px;border: 2px solid #dcd77f;";
my ($ct_name,$ct_txt00,$ct_txt01,$ct_phone,$c_id4trans,$tpl_id4trans,$u_name,$order_state22);
my $id = $cttpos->{$pid}->{ct_id};
if($ct4rel->{$id}->{c_id} == $cttpos->{$pid}->{ct_id}){
$ct_name = $ct4rel->{$id}->{ct_name};
$ct_txt00 = $ct4rel->{$id}->{txt00};
$ct_txt01 = $ct4rel->{$id}->{txt01};
$ct_phone = $ct4rel->{$id}->{txt07};
$order_state22 = $ct4rel->{$id}->{txt22};
$c_id4trans = $ct4rel->{$id}->{c_id};
$tpl_id4trans = $ct4rel->{$id}->{template_id};
$trans_style .= "background-color:#f7ae37;" if($ct4rel->{$id}->{c_id} == $users_dms->{c_id4trans});
}
($year_st,$mon_st,$day_st,$hh_st,$mm_st) = $lb->split_date($cttpos->{$pid}->{start_time}) if($cttpos->{$pid}->{start_time});
($year_en,$mon_en,$day_en,$hh_en,$mm_en) = $lb->split_date($cttpos->{$pid}->{end_time}) if($cttpos->{$pid}->{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;";
}
if($cttpos->{$pid}->{start_time}){
$itime = $lb->time4de($cttpos->{$pid}->{itime},1);
$start_time = $lb->time4de($cttpos->{$pid}->{start_time},1);
$end_time = $lb->time4de($cttpos->{$pid}->{end_time},1);
}
my $u_name = $cttpos->{$pid}->{owner};
my $u_name_end = $cttpos->{$pid}->{owner_end};
foreach my $ctu_id (keys (%$ct_users)){
if($channel_map->{$u_name}){
$u_name = $channel_map->{$u_name};
}elsif($cttpos->{$pid}->{owner} eq $ct_users->{$ctu_id}->{c_id}){
$u_name = $ct_users->{$ctu_id}->{txt01};
}
if($channel_map->{$u_name_end}){
$u_name_end = $channel_map->{$u_name_end};
}elsif($cttpos->{$pid}->{owner_end} eq $ct_users->{$ctu_id}->{c_id}){
$u_name_end = $ct_users->{$ctu_id}->{txt01};
}
}
#if($ct_name){
if(1==1){
print "<Tr><td class='element' colspan='$h' style='$set_style;0.91em;padding:0.3em 0 0 0em;'>\n";
my $pos_hash = $cttpos->{$pid};
my $pos_details = "";
foreach my $did (sort keys (%{$pos_hash})){
$pos_details .= $did . " = " . $pos_hash->{$did} . "</br>" if($pos_hash->{$did});
}
my $pos_id = "";
my $user_device = "";
#if($users_dms->{u_id} == $dbt->{copri_conf}->{bike_state}->{superu_id}){
if($users_dms->{u_id} && $users_dms->{u_id} =~ /1842|5781|11765/){
$pos_id = $q->div({-class=>"popup",-onclick=>"toggle_box('$pid')"},"$cttpos->{$pid}->{c_id}", $q->span({-class=>"popuptext",-id=>"$pid"},"$pos_details"));
my $txt26 = $cttpos->{$pid}->{txt26};
my $txt21 = $cttpos->{$pid}->{txt21};
$txt26 = substr($cttpos->{$pid}->{txt26},0,20) . " ..." if(length($cttpos->{$pid}->{txt26}) > 20);
$txt21 = substr($cttpos->{$pid}->{txt21},0,50) . " ..." if(length($cttpos->{$pid}->{txt21}) > 50);
$user_device = "";
$user_device .= " &rarr; lock charge $cttpos->{$pid}->{int14} %" if($cttpos->{$pid}->{int14});
$user_device .= " &rarr; agent $txt26" if($txt26);
$user_device .= " &rarr; device $txt21" if($txt21);
}
my $bikenr = "$cttpos->{$pid}->{barcode}";
$bikenr = $q->a({-class=>"linknav3",-style=>"$stamm_style",-href=>"$script/$users_dms->{fullurl}/Waren/?detail_search=1&s_barcode=$cttpos->{$pid}->{barcode}",-title=>"Rad im Warenstamm"},"$cttpos->{$pid}->{barcode}") if($cttpos->{$pid}->{cc_id});
# (Flotte $cttpos->{$pid}->{int12})
#
my $status = "$dbt->{copri_conf}->{bike_state}->{$cttpos->{$pid}->{int10}}" || "state failure";
$status = "<span style='color:#c63e3e;'>$dbt->{copri_conf}->{bike_state}->{$cttpos->{$pid}->{int10}}</span>" if($cttpos->{$pid}->{int10} == 2 || $cttpos->{$pid}->{int10} == 3);
if($cttpos->{$pid}->{int10} ne $ct4rel_ware->{$cttpos->{$pid}->{cc_id}}->{int10}){
$status = "<span style='border: 1px solid #c63e3e;'>$dbt->{copri_conf}->{bike_state}->{$cttpos->{$pid}->{int10}}</span>";
}
my $lock_state = "lock failure" if(!$cttpos->{$pid}->{int20});
$lock_state = "locked" if($cttpos->{$pid}->{int20} == 1);
$lock_state = "<span style='color:#c63e3e;'>unlocked</span>" if($cttpos->{$pid}->{int20} == 2);
$lock_state = "<span style='color:#c63e3e;'>locking in progress</span>" if($cttpos->{$pid}->{int20} == 3);
my $track_info = "";
my $co2saving = "";
if($cttpos->{$pid}->{int26}){
$co2saving = $pri->co2calc($cttpos->{$pid});
$cttpos->{$pid}->{int26} =~ s/\./,/;
$track_info = "&rarr; - $co2saving kg CO&sup2; ($cttpos->{$pid}->{int26} km)";
}
if($node_meta->{ct_table} eq "contenttranspos"){
my $start_station = "$cttpos->{$pid}->{int06}";
my $end_station = "$cttpos->{$pid}->{int04}";
$start_station = $q->a({-class=>"linknav3",-style=>"",-href=>"$script/$users_dms->{fullurl}/Waren/?detail_search=1&s_int04=$cttpos->{$pid}->{int06}",-title=>"Rad Warenstamm nach Station filtern"},"$cttpos->{$pid}->{int06}") if($ct4rel_ware->{$cttpos->{$pid}->{cc_id}}->{rel_id});
$end_station = $q->a({-class=>"linknav3",-style=>"",-href=>"$script/$users_dms->{fullurl}/Waren/?detail_search=1&s_int04=$cttpos->{$pid}->{int04}",-title=>"Rad Warenstamm nach Station filtern"},"$cttpos->{$pid}->{int04}") if($ct4rel_ware->{$cttpos->{$pid}->{cc_id}}->{rel_id});
my $kunde = $q->a({-class=>"linknav3",-style=>"$ware_style",-href=>"$script/$users_dms->{fullurl}/Kunden/?detail_search=1&s_c_id=$cttpos->{$pid}->{ca_id}",-title=>"Kunde im Kundenstamm"},"$cttpos->{$pid}->{txt08} ($cttpos->{$pid}->{ca_id})");#2021-05-24 saves kd name
print $q->div({-style=>'float:left;margin-left:1em;font-size:0.91em;'}, "$i) <span style='$time_style'> $start_time $end_time</span> &rarr; $kunde &rarr; Start Station $start_station &rarr; End Station $end_station &rarr; Rad $bikenr $status $lock_state $track_info &rarr; $u_name $pos_id"),"\n";
print $q->div({-style=>'float:left;margin-left:1em;font-size:0.91em;'}, "&rarr; Faktura", $q->a({-class=>"linknav3",-style=>"$trans_style",-href=>"$script/$users_dms->{fullurl}/Faktura?ct_trans=open\&c_id4trans=$c_id4trans\&tpl_id4trans=$tpl_id4trans\&kind_of_trans=Faktura\&owner=$users_dms->{owner}",-title=>"Faktura Terminal öffnen"},"\#$ct_name")),"\n";
print $q->div({-style=>'float:left;margin-left:1em;font-size:0.91em;'}, "$user_device"),"\n";
}elsif($node_meta->{ct_table} eq "contenttheftpos"){
my $speed = 0;
if($cttpos->{$pid}->{int07} && $cttpos->{$pid}->{int07} > 0){
$speed = $cttpos->{$pid}->{int07} * 1.852;
$speed = $lb->round_half($speed);
}
my $event_type = "";
$event_type = "Diebstahlalarm" if($cttpos->{$pid}->{int01});
$event_type = "GPS $cttpos->{$pid}->{txt06} &rarr; speed $speed km/h &rarr; distance $cttpos->{$pid}->{int08} Meter" if($cttpos->{$pid}->{int02});
print $q->div({-style=>'float:left;margin-left:1em;font-size:0.91em;'}, "$i) <span style='$time_style'> $end_time</span> &rarr; $event_type &rarr; Rad $bikenr &rarr; $u_name $pos_id"),"\n";
}
print $q->div({-style=>"position:absolute;margin-left:$daymarker;border-right: solid thin #86cb00;height:1.5em;"},"&nbsp;"),"\n" if("$mon" eq "$mon_today");
print $q->div({-style=>"position:static;margin-left:$day_stpx;width:$rent_day_px;height:1.5em;background-color:$scale_color;"},"&nbsp;"),"\n";
print "</td></Tr>\n";
}
}
}
print $q->end_table;
###
print "</div>\n";
my $offset_nr = $offset + $nr;
#backward | forward
print $q->div({-style=>'float:left;padding:0.5em;'}, "Zeile: $offset - $offset_nr"),"\n";
print "<div style='padding:0.5em;'>\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($nr >= $limit-10);
print "</div>\n";
print $q->end_form;
}
1;

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,139 @@
package MandantConf;
#
# SPDX-License-Identifier: AGPL-3.0-or-later
# Copyright (c) Rainer Gümpelein, TeilRad GmbH
#
#
use strict;
use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use CGI ':standard';
use Lib::Config;
use Mod::Buttons;
use Mod::Libenz;
use Mod::Libenzdb;
use Mod::DBtank;
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 $cf = new Config;
my $lb = new Libenz;
my $db = new Libenzdb;
my $dbt = new DBtank;
my $but = new Buttons;
my %ib = $but->ibuttons();
my %varenv = $cf->envonline();
my $script = $q->script_name();
my $path_info = $q->path_info();
my $path = $path_info;
#with meta_host,
if("$varenv{metahost}"){
$path = "$script" . "$path_info";
$script="";
}
$path =~ s/\/user|\/manager|\/admin//;
my $lang = "de";
my $dbh = "";
my $rel = {};
my $ct = {};
if($node_meta->{ct_table} eq "contentuser"){
if(($node_meta->{node_name} eq "Firma") && ($users_dms->{u_id} eq $varenv{superu_id})){
$rel = $db->get_rel4tpl($node_meta->{main_id},$lang,"","201","","",">0");
$ct = $db->get_content1("contentuser",$rel->{content_id});
}elsif(($node_meta->{node_name} eq "System") && ($users_dms->{u_id} eq $varenv{superu_id})){
$rel = $db->get_rel4tpl($node_meta->{main_id},$lang,"","215","","",">0");
$ct = $db->get_content1("contentuser",$rel->{content_id});
}elsif($node_meta->{node_name} eq "Kontakt-Hotline" && $users_dms->{int08} >= 1){
$rel = $db->get_rel4tpl($node_meta->{main_id},$lang,"","197","","",">0");
$ct = $db->get_content1("contentuser",$rel->{content_id});
}else{
$return = "failure::Abbruch. Keine Zugriffsberechtigung";
}
}
my $tpl = $db->get_tpl($rel->{template_id});
my @tpl_order = split /,/,$tpl->{tpl_order};
my $u_name = $dbt->sys_username($dbh,$ct->{owner});
$ct->{mtime} = $lb->time4de($ct->{mtime},"1");
print "<div id='Content4list'>";
print $q->div({-class=>"copri_header",-style=>"background-color:#cccccc;"},"Pfad: $path");
print $q->div({-style=>'background-color:silver;height:10px;'},""),"\n";
print $q->start_form();
#Content
print $q->start_table({-border=>'0', -width=>'100%',-align=>'center', -cellpadding=>'3', -cellspacing=>'0'});
print $q->Tr();
if($R::config2edit){
print "<td class='ct_editline'>";
print $q->hidden(-name=>'owner',-override=>'1', -value=>"$users_dms->{u_id}");
print $q->hidden(-name=>'c_id',-override=>'1', -value=>"$ct->{c_id}");
print $q->hidden(-name=>'rel_id',-override=>'1', -value=>"$rel->{rel_id}");
print $but->singlesubmit7("rel_edit","save_user","$ib{save}");
print "</td>\n";
}else{
print "<td class='ct_editline'>";
print $q->a({-class=>"editnav",-href=>"$script$path?config2edit=1",-title=>'bearbeiten'}, $q->img({-src=>"$varenv{metahost}/glyphicons/glyphicons-151-edit.png"}));
print "</td>\n";
}
print $q->td({-style=>"background-color:white;padding-right:10px;border-bottom: 1px solid silver;text-align:right;font-size:12px;"}, "$u_name / $ct->{mtime}");
my $i=0;
foreach (@tpl_order){
$i++;
my ($key,$des,$size) = split /=/,$_;
$size = "60" if($key =~ /ct_name|txt/ && !$size);
$ct->{$key} = $q->unescapeHTML("$ct->{$key}");
$ct->{$key} = $lb->newline($ct->{$key});
my $value = "";
if($R::config2edit){
if($size eq "area"){
$value = "<textarea class='etxtarea' name='$key' rows=2 cols=40>$ct->{$key}</textarea>";
}elsif($size =~ /\w\+\w/){
my ($a,$b) = split /\+/,$size;
my $a_checked;
my $b_checked;
$a_checked = "checked" if($ct->{$key} eq "$a" || !$ct->{$key});
$b_checked = "checked" if($ct->{$key} eq "$b");
$value = "$a <input type='radio' name='$key' value='$a' $a_checked> $b <input type='radio' name='$key' value='$b' $b_checked>";
}elsif($key =~ /txt|ct_name/){
$value = "<input class='etxt' type='text' name='$key' value='$ct->{$key}' size=$size maxlength=200>";
}elsif($key =~ /int/){
$value = "<input class='etxt' type='text' name='$key' value='$ct->{$key}' size=6 maxlength=10>";
}elsif($key =~ /img/){
$value = "<input class='etxt' type='text' name='$key' value='$ct->{$key}' size=40 maxlength=40>";
}
}else{
$value = "$ct->{$key}";
}
print $q->Tr();
if($key =~ /header/){
print $q->td({-class=>'tdval2',-colspan=>'2'},$q->b("<br />$des")),"\n";
}elsif($users_dms->{u_id} eq $varenv{superu_id}){
print $q->td({-class=>'tdescr2'},"$des ($key)"),"\n";
}else{
print $q->td({-class=>'tdescr2'},"$des"),"\n";
}
print $q->td({-class=>'tdval2'}, "$value"),"\n" if($key !~ /header/);
}
print $q->end_table;
print $q->end_form;
print "</div>";
return $return;
}
1;

View file

@ -0,0 +1,436 @@
package SubListe;
#
# 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/shareedms-primary/src);
#
use strict;
use warnings;
use POSIX;
use CGI;
use URI::Escape;
use Encode;
use Lib::Config;
use Mod::Buttons;
use Mod::Libenz;
use Mod::Libenzdb;
use Mod::DBtank;
use Mod::APIfunc;
use Date::Calc qw(:all);
use Storable;
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 $keycount = scalar(@keywords);
my $time = time;
my $now_db = strftime("%d.%m.%Y %H:%M:%S",localtime(time));
my $cf = new Config;
my $lb = new Libenz;
my $db = new Libenzdb;
my $dbt = new DBtank;
my $apif = new APIfunc;
my $but = new Buttons;
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 $dbh = "";
my $parent_node4rel = $db->get_node4rel($node_meta->{parent_id},"","","null");
my %ib = $but->ibuttons();
my $tpl_order = $node_meta->{tpl_order};
if(1==2 && $node_meta->{tpl_id} >= 400 && $node_meta->{tpl_id} < 500){
$tpl_order =~ s/barcode=Rad/barcode=Rad,txt10=Station-log,txt09=Wartungsprotokoll=area/;
$tpl_order =~ s/int04=Station/int04=Station,txt09=Wartungsprotokoll=area/ if($node_meta->{tpl_id} == 403);
}
my @tpl_order = split /,/,$tpl_order;
my $message = "";
#$message = "Fehler: bitte Unter \"Servicetechnik\" die Datenklasse konfigurieren!" if(scalar(@tpl_order) < 1);
my $s_owner_id = "";
#my $s_u_name = "";
my @viewsel = split /\//,$1 if($path =~ /^\/(.*)/);
my $depth = scalar(@viewsel);
my $view_base = $viewsel[1] || "nothing";#like Waren
my $node_mandant = $db->get_node("$view_base","$lang");
#TODO, build service path by pos.template_id or pos.barcode alis bike_id
#my $pref = { table => "content",
# table_pos => "contentpos",
#};
#my $template_group = $dbt->pos_template_group($dbh,$pref);
#my $subrelnode = $dbt->get_subrelnode($dbh,$crecord->{main_id},$template_id_pos);
my $searchref = {};
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($channel_map->{$id} eq $R::s_owner){
$searchref->{owner} = $id;
#$s_u_name = $channel_map->{$id};
}
}
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} && ($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};
#$s_u_name = $ct_users->{$ctu_id}->{txt01};
}
}
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 eq "backward_list"){
$offset -= $limit if($offset >= $limit);
}elsif($R::go eq "forward_list"){
$offset += $limit;
}
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);
}
#because of search we need parents
my $main_ids = $parent_node4rel->{main_id};
my $tpl_ids = $parent_node4rel->{template_id};
my $rows = 0;
my $scol = "mtime";
my $table = "content";
$searchref->{table_pos} = "contentpos";
if($node_meta->{tpl_id} > 600 && $node_meta->{tpl_id} < 700){
$table = "contentadr";
$searchref->{table_pos} = "contentadrpos";
$searchref->{template_id_pos} = "$node_meta->{tpl_id}";
}
if($node_meta->{tpl_id} == 198){
my $mandant_id = 100002;
$table = "contentadr";
$searchref->{table_pos} = "users";
#$searchref->{template_id_pos} = "$node_meta->{tpl_id}";
$main_ids = 200011;
$tpl_ids = 202;
print<<EOF
<style>
.ui-autocomplete {
text-align:left;
background:#eeeeee;
border:1px solid silver;
}
</style>
<script>
\$(function() {
\$('#json_selectadr').autocomplete({
source: '/ajax_json?mandant_id=$mandant_id&table=contentadr',
minLength: 2,
select: function(event, ui) {
\$('#vorname_name').val(ui.item.vorname_name);
\$('#c_idadr').val(ui.item.c_id);
}
});
});
</script>
EOF
;
}
#print Dumper($node_meta);
my $hashfile = "$varenv{logdir}/$users_dms->{u_id}-$searchref->{table_pos}-searchhash";
my $ct4rel = {};
if(!$start_chck && !$end_chck && $parent_node4rel ne "Servicetechnik" && $main_ids && $tpl_ids){
#$rows = $db->count_content($searchref->{table_pos},"$main_ids","$tpl_ids");
#collect search keys
foreach my $postkey (@keywords){
foreach(@tpl_order){
my ($key,$val,$size) = split /=/,$_;
if($postkey =~ /s_$key|s_start_$key|s_end_$key/){
my $val = $q->param($postkey);
$postkey =~ s/^s_//;
$searchref->{$postkey} = $val;
}
}
}
#trying to save hashref
if($R::detail_search && ref($searchref) eq "HASH"){
store $searchref, $hashfile;
}elsif($keycount > 0 && !$R::detail_search && -f $hashfile){
$searchref = {};
$searchref = retrieve($hashfile);
}
#print Dumper($searchref);
my $export = "";
my $todo = "";
my $ck4ex = "";
#only if permission read
if(($node_meta->{ct_table} eq "users" && $users_dms->{int07} >= 1) || ($node_meta->{ct_table} eq "contentadrpos" && $users_dms->{int02} >= 1) || ($node_meta->{ct_table} eq "contentpos" && $users_dms->{int01} >= 1)){
$ct4rel = $db->search_content3($searchref,$table,$node_mandant->{parent_id},"",$users_dms->{u_id},$lang,"$main_ids","$tpl_ids","","",$time,"",$scol,$users_dms->{sort_updown},$offset,$limit,$export,$todo,$ck4ex,"");
}else{
$return = "failure::Abbruch. Keine Zugriffsberechtigung";
}
}
print "<div id='Content4list'>\n";
if($varenv{syshost} ne "azn"){
my $header_style = "";
$header_style = "border:2px solid #9f1f0e;" if($message);
print $q->div({-class=>"copri_header",-style=>"background-color:$node_meta->{bg_color};"},"$path",$q->span({-style=>"$header_style"},"$message"));
}
print $q->div({-style=>'background-color:silver;height:10px;'},""),"\n";
print $q->start_form(-name=>'searchform'),"\n";
print $q->hidden(-name=>'offset', -value=>"$offset"),"\n";
print $q->hidden(-name=>'main_id', -value=>"$node_meta->{main_id}"),"\n";
print $q->hidden(-name=>'mode', -value=>"manager"),"\n";
print $q->hidden(-name=>'owner', -value=>"$users_dms->{u_id}"),"\n";
print $q->hidden(-name=>'template_id', -value=>"$node_meta->{template_id}"),"\n";
my $hstyle = "width:20px;background-color:$node_meta->{bg_color};border-right: solid thin gray;border-bottom: solid thin gray;";
print $q->start_table({ -style=>'clear:both;', -border=>'0', -width=>'100%',-align=>'center', -cellpadding=>'0', -cellspacing=>'0'}),"\n";
#new_edit and search (disabled for DMS-Account)
if($node_meta->{tpl_id} != 198){
my $edit="rel_edit";
my $new_key="service_done";
my $search = "search";
print $q->Tr(),"\n";
print $q->td({-style=>"background-color:silver;$hstyle"},$but->singlesubmit1("detail_search","$search","","")),"\n";
#https://tinkwwp.copri4.de/APIjsonserver?request=service_done&bike=202&work_id=txt11&work_val=aaa&authcookie=1842_ad720ed63bd40039e4abe8a9ad7315e1_34567890
#disabled
if(1==2 && $node_meta->{tpl_id} >= 400 && $node_meta->{tpl_id} < 500){
print $q->td({-style=>"$hstyle"}, $but->singlesubmit2glyph("$edit","$new_key","$ib{$new_key}","background-color:$node_meta->{bg_color};")),"\n";
}else{
print $q->td({-style=>"$hstyle"},"&nbsp;"),"\n";
}
#1. Search-fields
my $s_val;
foreach(@tpl_order){
my ($key,$val,$size) = split /=/,$_;
$size = 15 if($size =~ /area/);
$size = 10 if($size =~ /time/);
$size = 2 if($size =~ /checkbox/);
$s_val = $searchref->{$key};
#print "$key=$searchref->{$key}|";
if($key =~ /node|txt|int|uri|ct_name|_id|barcode|sort|public/){
if($key =~ /barcode|int04/){
print $q->td({-class=>"search_line"},$q->textfield(-class=>'stxt',-name=>"s_$key",-size=>"4",-default=>"$s_val",-maxlength=>40, -autofocus=>1)),"\n";
}else{
print $q->td({-class=>"search_line"},$q->textfield(-class=>'stxt',-name=>"s_$key",-size=>"$size",-default=>"$s_val",-maxlength=>40)),"\n";
}
}elsif($key =~ /owner/){
print $q->td({-class=>'search_line'},$but->selector("s_$key","","$s_val",@_users)),"\n";
}
my $s_mtime; my $e_mtime;
if($key eq "mtime"){
$s_mtime = $searchref->{start_mtime};
$e_mtime = $searchref->{end_mtime};
}
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=>'etxt',-name=>"s_start_$key",-default=>"$s_mtime",-size=>"$size",-maxlength=>20),"-",$q->textfield(-id=>'datepicker2',-class=>'etxt',-name=>"s_end_$key",-default=>"$e_mtime",-size=>"$size", -maxlength=>20)),"\n" if($key =~ /time/);
}#end Search-fields
}
#2. Tableheader
print $q->Tr();
my $i=0;
if($node_meta->{tpl_id} == 198){
my $edit="base_edit";
my $new_key="new_dmsusers";
print "<th style='$hstyle;width:250px;'>\n";
print $but->singlesubmit2glyph("$edit","$new_key","$ib{$new_key}","background-color:$node_meta->{bg_color};"),"\n";
#print $q->hidden(-name=>'c_id4trans', -override=>'1', -value=>"$ctx->{c_id}"),"\n";
#from json_selectadr
print $q->hidden(-id=>'c_idadr', -name=>"c_idadr", -override=>'1'),"\n";
print $q->hidden(-id=>'vorname_name', -name=>"vorname_name", -override=>'1'),"\n";
print $q->textfield(-style=>'border:1px solid grey;height:25px;width:80%;',-id=>"json_selectadr",-name=>"json_selectadr", -placeholder=>'Neuer DMS-Account', -value=>""),"\n";
print "</th>\n";
}else{
print $q->th({-style=>""},"&nbsp;"),"\n";
print $q->th({-style=>""},"&nbsp;"),"\n";
}
#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";
foreach (@tpl_order){
my ($key,$val,$size,$interval) = split /=/,$_;
my $divstyle = "";
if($size =~ /checkbox/){
$size = 2;
$divstyle = "width:20px;white-space:nowrap;overflow:hidden;";
}
my $sort_title="| $val";
$val = "<b>$val</b>" if($key eq $users_dms->{col_sort});
$i++;
print $q->th({-style=>'padding:5px 0'},$q->div({-style=>"$divstyle"},$q->a({-class=>"sortnav",-href=>"?col_sort=$key\&offset=$offset\&limit=$limit",-title=>"$val"},"$val"))),"\n" if($key ne "u_id");
}#end Tableheader
#BIG LOOP loop content table
#if($users_dms->{sort_updown} eq "up"){
my $nr=0;
foreach my $id (sort {
if($users_dms->{sort_updown} eq "down"){
if ($scol =~ /barcode|int/) {
$ct4rel->{$b}->{$scol} <=> $ct4rel->{$a}->{$scol}
}else{
$ct4rel->{$b}->{$scol} cmp $ct4rel->{$a}->{$scol}
}
}else{
if ($scol =~ /barcode|int/) {
$ct4rel->{$a}->{$scol} <=> $ct4rel->{$b}->{$scol}
}else{
$ct4rel->{$a}->{$scol} cmp $ct4rel->{$b}->{$scol}
}
}
} keys(%$ct4rel)){
my $set_style = "";
$nr++;
#Tablecontent (parameter)
print $q->Tr(),"\n";
if($node_meta->{tpl_id} != 198){
print $q->td({-class=>'tdtxt',-style=>"$set_style"},""),"\n";
print $q->td({-class=>'tdint',-style=>"$set_style"},""),"\n";
}
my $k=0;
foreach (@tpl_order){
$k++;
my ($key,$val,$size) = split /=/,$_;
$size = 15 if($size =~ /area/);
$size = 2 if($size =~ /checkbox/);
my $tdclass = "tdtxt";
my $tdstyle = "text-align:left;";
if($size =~ /\w\+\w/){
$size = 5;
}elsif($key =~ /barcode|c_id|ct_name|int|state|sort|public/){
$tdclass = "tdint";
$tdstyle = "text-align:right;max-width:8em;$size px;";
}
$ct4rel->{$id}->{$key} = $lb->time4de($ct4rel->{$id}->{$key},"1") if($key =~ /time/);
$ct4rel->{$id}->{$key} = $q->unescapeHTML("$ct4rel->{$id}->{$key}");
$ct4rel->{$id}->{$key} = $lb->newline($ct4rel->{$id}->{$key},"","");
if($key eq "owner"){
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};
}
}
#$u_name = $ct_users->{$ct4rel->{$id}->{$key}}->{txt01} || $ct4rel->{$id}->{$key};
print $q->td({-class=>"$tdclass",-style=>"$tdstyle $set_style"},"$u_name"),"\n";
}elsif($key eq "barcode" && $node_meta->{ct_table} eq "contentadrpos"){
print $q->td({-class=>"$tdclass",-style=>"$tdstyle $set_style"},$q->a({-class=>"linknav3",-href=>"/$users_dms->{fullurl}/Waren/?detail_search=1\&s_barcode=$ct4rel->{$id}->{barcode}",-title=>"zum Rad "},"$ct4rel->{$id}->{barcode}")),"\n";
#print $q->td({-class=>"$tdclass",-style=>"$tdstyle $set_style"},$q->a({-class=>"editnav",-href=>"/$users_dms->{fullurl}/Waren/?detail_search=1\&s_barcode=$ct4rel->{$id}->{barcode}",-title=>"zur Liste der Rad $ct4rel->{$id}->{barcode} Servicearbeiten"}, $q->img({-src=>"$varenv{metahost}/glyphicons/glyphicons-440-wrench.png", -style=>'height:1.3em;'}),"$ct4rel->{$id}->{barcode}")),"\n";
}elsif($key eq "u_id" && $node_meta->{ct_table} eq "users"){
my $adref = {
table => "contentadr",
fetch => "one",
template_id => "202",
c_id => "$ct4rel->{$id}->{$key}",
};
my $ctadr = $dbt->fetch_record($dbh,$adref);
print $q->td({-class=>"$tdclass",-style=>"$tdstyle $set_style width:300px;"},$q->a({-class=>"linknav3",-href=>"?node2edit=editpart\&u_id=$ct4rel->{$id}->{u_id}",-title=>"edit"},"$ctadr->{txt01} - $ctadr->{txt08} ($ct4rel->{$id}->{$key})")),"\n";
}elsif($key eq "txt08" && $node_meta->{ct_table} eq "contentadrpos"){
my $subject = "sharee.bike feedback";
my $body = "Hallo $ct4rel->{$id}->{txt01},\%0A\%0Avielen Dank für Ihre Nachricht \"$ct4rel->{$id}->{txt02}\"";
print $q->td({-class=>"$tdclass",-style=>"$tdstyle $set_style"},$q->a({-class=>"editnav",-href=>"mailto:$ct4rel->{$id}->{$key}?subject=$subject&body=$body"},$q->span({-class=>"bi bi-envelope"}," $ct4rel->{$id}->{$key}"))),"\n";
}elsif($key =~ /int0[1-8]/ && $node_meta->{ct_table} eq "users"){
print $q->td({-class=>"$tdclass",-style=>"$tdstyle $set_style",-nowrap=>1},"$dbt->{copri_conf}->{permission}->{$ct4rel->{$id}->{$key}}"),"\n";
}elsif($key =~ /int09/ && $node_meta->{ct_table} eq "users"){
print $q->td({-class=>"$tdclass",-style=>"$tdstyle $set_style",-nowrap=>1},"$dbt->{copri_conf}->{access}->{$ct4rel->{$id}->{$key}}"),"\n";
}else{
print $q->td({-class=>"$tdclass",-style=>"$tdstyle $set_style"},"$ct4rel->{$id}->{$key}"),"\n";
}
}
}
print $q->end_table;
my $offset_nr = $offset + $nr;
print $q->div({-style=>'float:left;padding:0.5em;'},"Zeile: $offset - $offset_nr");
#backward | forward
print "<div style='padding:0.5em;'>\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($nr >= $limit-10); #if($rows > $limit && $nr > 0);
print "</div>\n";
print $q->end_form,"\n";
print "</div>\n";
my $debug = "(ct_table: $node_meta->{ct_table} | main_id: $node_meta->{main_id} | template_id: $node_meta->{template_id})";
print $q->div({-style=>'position:fixed;bottom:1%;font-size:13px;'},"$debug"),"\n" if($users_dms->{u_id} eq $varenv{superu_id});
return $return;
}
1;

View file

@ -0,0 +1,559 @@
package TransPositionen;
#
# SPDX-License-Identifier: AGPL-3.0-or-later
# Copyright (c) Rainer Gümpelein, TeilRad GmbH
#
#
use strict;
use warnings;
use POSIX;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use CGI ':standard';
use DateTime;
use DateTime::Format::Pg;
use Date::Calc::Object qw(:ALL);
use Scalar::Util qw(looks_like_number);
use Lib::Config;
use Mod::Buttons;
use Mod::Libenz;
use Mod::Libenzdb;
use Mod::DBtank;
use Mod::APIfunc;
sub new {
my $class = shift;
my $self = {};
bless($self,$class);
return $self;
}
#Template
sub tpl(){
my $self=shift;
my ($node_meta,$users_dms,$set_main_id,$main_id,$rel_id,$c_id,$u_id,$lang,$return,$node_name) = @_;
my $q = new CGI;
my $cf = new Config;
my $lb = new Libenz;
my $db = new Libenzdb;
my $dbt = new DBtank;
my $apif = new APIfunc;
my $but = new Buttons;
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 $users = $db->select_users($u_id);
my %ib = $but->ibuttons();
my $today = strftime("%d.%m.%Y",localtime(time));
my $dbh = "";
my $channel_map = $dbt->channel_map();
my $mapref = {};
my $ct_users = $dbt->users_map($dbh,$mapref);#get serviceAPP and DMS users from contentadr
my $line_count2;
my $k=0;
my $spart_ct_name = $R::spart_ct_name || "";
my $c_idpos = $R::c_idpos || $R::pos_id || "";
my $ctf = $db->get_content1("contentuser",$dbt->{shareedms_conf}->{parent_id});
my $ctt = $db->get_content1("contenttrans",$c_id);
my $umst1619 = $lb->umst_breaking($ctt,"");
my $ctadr = $db->get_content1("contentadr",$ctt->{int10});
my $buchen_mtime = $lb->time4de($ctt->{mtime});
my $vibuchen_mtime = "";
$vibuchen_mtime = "Payone post " . $lb->time4de($ctt->{pay_time},1) . " . " if($ctt->{pay_time});
my $tpl = $db->get_tpl($ctf->{txt36});
my @tpl_order = split /,/,$tpl->{tpl_order};
my $txt20 = $R::txt20 || $ctt->{txt20} || "";#Leistungsdatum
my $int05 = $R::int05 || $ctt->{int05} || "";#manuell
my $max_timestamp = "210001012359";
if($ctf->{txt80} && $txt20 =~ /(\d{2})\.(\d{2})\.(\d{4})$/){
$max_timestamp = $3 . $2 . $1 . "2359";
}elsif($ctf->{txt80} =~ /(\d{2})\.(\d{2})\.(\d{4})$/){
$max_timestamp = $3 . $2 . $1 . "2359";
}
my $max_sum = $ctf->{int03} || "10000";
my $cttpos = { c_id => 0 };
my $rows = 0;
($cttpos,$rows) = $db->collect_contentpos("contenttrans",$c_id) if($c_id);
my $tpath; #Terminal target-path
if($users->{transaction_uri} =~ /Verkauf|Verleih|Faktur/){
$tpath = "$users->{transaction_uri}";
}elsif("$users->{fullurl}"){
$tpath = "$script/$users->{fullurl}/$users->{kind_of_trans}";
}
if($varenv{orga} eq "dms"){#obsolete after migrating lx-rad and mobile ...
print<<EOF
<style>
.ui-autocomplete {
text-align:left;
font-size:14px;
background:#eeeeee;
border:1px solid silver;
}
</style>
<script>
\$(function() {
\$('#json_select').autocomplete({
source: '/ajax_json?main_id=$dbt->{shareedms_conf}->{parent_id}&table=content',
minLength: 2,
select: function(event, ui) {
\$('#spart_ct_name').val(ui.item.spart_ct_name);
\$('#c_id').val(ui.item.c_id);
}
});
});
</script>
EOF
;
}
#print $q->div({ -class=>"ui-widget"}, $q->label({ -for=>"birds"},"Birds: "),$q->input({ -id=>"birds"},"")),"\n";
print $q->start_table({-class=>'list', -border=>'0', -width=>'100%',-align=>'left', -cellpadding=>'3', -cellspacing=>'0'});
#my $action_sort = "itime";
#Parts Header
print $q->start_form(-name=>'spartform');
print $q->Tr(); $line_count2++;
print $q->th($but->singlesubmit("select_part","*"),"\n");
foreach (@tpl_order){
my ($key,$val) = split /=/,$_;
$k++ if($val);
if("$key" eq "ct_name"){
my $ctpos;
print $q->hidden(-name=>'c_id4trans', -override=>'1', -value=>"$c_id");
print $q->hidden(-id=>'c_id', -name=>"c_id", -override=>'1');
print $q->hidden(-id=>'spart_ct_name', -name=>"spart_ct_name", -override=>'1');
print $q->th($q->textfield(-class=>'etxt',-style=>'height:19px;width:140px;font-size:1.3em;text-align:right;',-id=>"json_select",-name=>"json_select",-value=>"", -override=>'1',-size=>"25",-maxlength=>50, -placeholder=>'Nummer'),"");
}
if($key =~ /int03/){
print $q->th("$val");
}elsif($key =~ /int|txt03/){
print $q->th("$val");
}elsif($key =~ /txt01/){
my $cal_button = "";
my $ter_button = "";
my $war_button = "";
print $q->th("Beschreibung"),"\n";
}elsif($key =~ /txt/){
print $q->th("$val");
}
}
$c_idpos = $1 if($return && $return =~ /pos_id=(\d+)/);
print $q->hidden(-name=>'trans2edit', -value=>"transpos", -override=>'1');
print $q->hidden(-name=>'offset', -override=>'1', -value=>"$R::offset") if($R::offset);
print $q->hidden(-name=>'limit', -override=>'1', -value=>"$R::limit") if($R::limit);
print $q->hidden(-name=>'relids', -override=>'1', -value=>"$R::relids") if($R::relids);
print $q->end_form,"\n";
print $q->start_form(-name=>'transposform'),"\n";
#Tablecontent (buttons and ct_name(primary key))
#my $scol = "c_id";#changed to itime because of Storno resorts
my $scol = "itime";
my $sum_parts0=0;
my $sum_parts7=0;
my $sum_parts19=0;
my $diff7 = 100 + 7;
my $diff19 = 100 + $umst1619;
my $sum_umst7=0;
my $sum_umst19=0;
my $i=0;
my $accounting_start;
my $accounting_end;
#foreach my $id (sort { $cttpos->{$b}->{$scol} <=> $cttpos->{$a}->{$scol} } keys(%$cttpos)){
foreach my $id (sort { $cttpos->{$b}->{$scol} cmp $cttpos->{$a}->{$scol} } keys(%$cttpos)){
my $set_style="";
my $gesamt="0";
my $occupied_style = "";
my $time_style = "";
#$occupied_style = "color:#ff1493" if($cttpos->{$id}->{txt10} =~ /occupied|requested|canceled/);
$occupied_style = "color:#ff1493" if($cttpos->{$id}->{int10} == 2 ||$cttpos->{$id}->{int10} == 3 || $cttpos->{$id}->{int10} == 6);
my $cttpos_timestamp = $1 . $2 . $3 . "0000" if($cttpos->{$id}->{itime} =~ /(\d+)\-(\d+)\-(\d+)/);
#max. Rechnungspositionen
if(($cttpos_timestamp <= $max_timestamp) && ($sum_parts19 <= $max_sum)){
$i++;
#print "$i (($id: $cttpos_timestamp <= $max_timestamp) && ($sum_parts19 <= $max_sum))<br>";
if($i==1){
$accounting_end = "$3.$2.$1" if($cttpos->{$id}->{itime} =~ /(\d+)\-(\d+)\-(\d+)/);
}else{
$accounting_start = "$3.$2.$1" if($cttpos->{$id}->{itime} =~ /(\d+)\-(\d+)\-(\d+)/);
}
#print "$accounting_start - $accounting_end<br>";
my @line_txt01 = split(/\n/,$cttpos->{$id}->{txt01});
if($cttpos->{$id}->{int02} != 0){
$line_count2++;
#$line_count2 += scalar(@line_txt01);
}
my ($s_date,$s_dd,$s_mo,$s_yy,$s_hh,$s_mi,$e_date,$e_yy,$e_mo,$e_dd,$e_hh,$e_mi);
my $einzel = $cttpos->{$id}->{int02};
my $menge = $cttpos->{$id}->{int03} || 0;
#Make date and time
if($cttpos->{$id}->{start_time} && $cttpos->{$id}->{end_time}){
($s_yy,$s_mo,$s_dd,$s_hh,$s_mi) = $lb->split_date($cttpos->{$id}->{start_time});
($e_yy,$e_mo,$e_dd,$e_hh,$e_mi) = $lb->split_date($cttpos->{$id}->{end_time});
}
my $dt1 = DateTime->new(year => 2018, month => 3, day => 20);
my $dt0 = $dt1;
my $dt2 = $dt1;
$dt0 = DateTime::Format::Pg->parse_datetime($cttpos->{$id}->{start_time}) if($cttpos->{$id}->{start_time});
$dt2 = DateTime::Format::Pg->parse_datetime($cttpos->{$id}->{end_time}) if($cttpos->{$id}->{end_time});
#if($dt2 < $dt0){
#$time_style="color:red;";
#}
if(looks_like_number($einzel) && $einzel != 0 && looks_like_number($menge) && $menge != 0){
$gesamt = $einzel * $menge;
my $rabatt_val = $cttpos->{$id}->{int07} || "";
if($rabatt_val != 0){
my $rabatt_eur = $rabatt_val;
$rabatt_eur = $einzel * $menge * $rabatt_val/100 if($cttpos->{$id}->{int08} != 1);#wenn int08 != 1 alias €
$gesamt = $einzel * $menge - $rabatt_eur;
}
}
$gesamt = $lb->round($gesamt);
$gesamt = $lb->cashme($gesamt);
$ctf->{txt13} = $1 if($ctf->{txt13} =~ /(\d+)/);
if($node_name =~ /steuerfrei/){#dirty hack
$sum_parts0 += $gesamt;
}elsif("$cttpos->{$id}->{int05}" =~ /\d/){
$sum_parts0 += $gesamt if("$cttpos->{$id}->{int05}" == "0");
$sum_parts7 += $gesamt if("$cttpos->{$id}->{int05}" == "7");
#$sum_parts19 += $gesamt if("$cttpos->{$id}->{int05}" == "19");
$sum_parts19 += $gesamt if($cttpos->{$id}->{int05} >= 16);
}else{
#print "yyy $gesamt $ctf->{txt13} |";
$sum_parts0 += $gesamt if("$ctf->{txt13}" == "0");
$sum_parts7 += $gesamt if("$ctf->{txt13}" == "7");
$sum_parts19 += $gesamt if("$ctf->{txt13}" >= "16");
}
#1. Spalte
print $q->Tr(),"\n";
print "<td class='tdtxt'>";
if(($c_idpos == $cttpos->{$id}->{c_id}) && ($R::trans2edit && $R::trans2edit =~ /transpos/)){
print $q->hidden(-name=>'c_idpos', -value=>"$cttpos->{$id}->{c_id}", -override=>'1');
print $q->hidden(-name=>'cc_id', -value=>"$cttpos->{$id}->{cc_id}", -override=>'1');
print $q->hidden(-name=>'c_id4trans', -override=>'1', -value=>"$c_id");
print $but->singlesubmit2("ct_trans","save_pos","$ib{save_pos}","","ebutton5"),
$but->singlesubmit2("ct_trans","delete_pos","$ib{delete_pos}"),"\n";
}elsif(!$ctt->{close_time}){
print $q->a({-class=>"editnav",-href=>"$tpath?trans2edit=transpos\&c_idpos=$cttpos->{$id}->{c_id}\&c_id4trans=$c_id\&owner=$users->{u_id}",-title=>"Datensatz bearbeiten"}, $q->img({-src=>"$varenv{metahost}/glyphicons/glyphicons-151-edit.png"})),"\n";
}
my $calpath = "Mietjournal";
print $q->a({-class=>"linknav3", -style=>"background-color:$varenv{calendar_active_color}",-href=>"$script/$users->{fullurl}/$calpath/?cttpos_id=$cttpos->{$id}->{c_id}",-title=>"Im $calpath öffnen"},"<br /><br />ID $cttpos->{$id}->{c_id}"),"\n";
print "</td>\n";
#Tablecontent (parameter)
foreach (@tpl_order){
my ($key,$val,$inputsize) = split /=/,$_;
$cttpos->{$id}->{$key} = $q->unescapeHTML($cttpos->{$id}->{$key});
$cttpos->{$id}->{$key} = $lb->newline($cttpos->{$id}->{$key},"",$R::trans2edit) if($R::trans2edit);
my $ct_pos = "$cttpos->{$id}->{ct_name}";
my $txtstyle = "text-align:left;min-width:150px;";
my $isize = "30";
$isize = $inputsize if($inputsize);
if($key =~ /int|txt03/){ #für zahlen etwas kleiner
$txtstyle = "text-align:right;min-width:50px;";
$isize = "5";
}
if(($c_idpos == $cttpos->{$id}->{c_id}) && ($R::trans2edit && $R::trans2edit =~ /transpos/)){
if($key =~ /ct_name/){
print $q->td({-class=>'element',-style=>"$set_style text-align:right;"}, $q->textfield(-class=>'etxt',-style=>"text-align:right;min-width:120px;",-name=>"ct_name",-default=>"$ct_pos", -override=>'1',-size=>10,-readonly=>'1'),"\n");
}elsif($key =~ /int03/){
print $q->td({-colspan=>'1',-class=>'element',-style=>"$txtstyle $set_style"},$q->textfield(-class=>'etxt',-style=>"$txtstyle",-name=>"col_$key",-default=>"$menge", -override=>'1',-size=>"$isize",-maxlength=>10, -autofocus=>1),"\n");
}elsif($key =~ /int02/){
print $q->td({-class=>'element',-style=>"$txtstyle $set_style"},$q->textfield(-class=>'etxt',-style=>"$txtstyle",-name=>"col_$key",-default=>"$einzel", -override=>'1',-size=>"$isize",-maxlength=>100),"\n");
}elsif($key =~ /int07/){
print $q->td({-class=>'element',-style=>"$txtstyle $set_style",-nowrap=>'1'},$q->textfield(-class=>'etxt',-style=>"$txtstyle",-name=>"col_$key",-default=>"$cttpos->{$id}->{$key}", -override=>'1',-size=>"$isize",-maxlength=>100),$but->selector("int08","40px","$cttpos->{$id}->{int08}",("0.00:%","1.00:€"))),"\n";
}elsif($key =~ /int04/){
print $q->td({-class=>'element',-style=>'text-align:right;padding:0.1em 0.5em;',-nowrap=>"1"},"$gesamt €");
}elsif($key =~ /txt01/){
if($cttpos->{$id}->{int09} && $cttpos->{$id}->{$key} !~ /Manuell/){
$cttpos->{$id}->{$key} .= "\nManuell bearbeitet\n";
}
print "<td class='element' style='$txtstyle $set_style;background-color: #ededed;$occupied_style;'\n>";
print $q->textarea(-class=>'autos',-style=>"border: 1px solid #ededed;background-color: #ededed;",-name=>"col_$key",-default=>"$cttpos->{$id}->{$key}", -override=>'1',-rows=>"1",-cols=>65),"<br />\n";
if($cttpos->{$id}->{int09}){#2020-12-07 Verleihräder werden anhand der TarifNr als solches erkannt
print $q->span({-style=>"$txtstyle $set_style"},
"Tarif Nr.: ", $q->textfield(-class=>'etxt',-name=>"int09",-default=>"$cttpos->{$id}->{int09}",-size=>"5",-maxlength=>5),
"Tarif Text", $q->textfield(-class=>'etxt',-name=>"txt04",-default=>"$cttpos->{$id}->{txt04}",-size=>"30",-maxlength=>50)),"<br />\n";
print $q->span({-style=>"$txtstyle $set_style"},
"Endstation: ", $q->textfield(-class=>'etxt',-name=>"int04",-default=>"$cttpos->{$id}->{int04}",-size=>"5",-maxlength=>40),
"GPS: ", $q->textfield(-class=>'etxt',-name=>"txt06",-default=>"$cttpos->{$id}->{txt06}",-size=>"35",-maxlength=>40)),"<br />\n";
print $q->span({-style=>"$txtstyle $set_style"},"Mietzeit: ",
$q->textfield(-id=>'datepicker1',-class=>'etxt',-name=>"start_date",-default=>"$s_dd.$s_mo.$s_yy",-size=>"10",-maxlength=>10),
$q->textfield(-class=>'etxt',-name=>"s_hh",-default=>"$s_hh",-size=>"2",-maxlength=>2),":",
$q->textfield(-class=>'etxt',-name=>"s_mi",-default=>"$s_mi",-size=>"2",-maxlength=>2)," ",
$q->textfield(-id=>'datepicker2',-class=>'etxt',-name=>"end_date",-default=>"$e_dd.$e_mo.$e_yy",-size=>"10",-maxlength=>10),
$q->textfield(-class=>'etxt',-name=>"e_hh",-default=>"$e_hh",-size=>"2",-maxlength=>2),":",
$q->textfield(-class=>'etxt',-name=>"e_mi",-default=>"$e_mi",-size=>"2",-maxlength=>2)),"\n";
}
print "</td>\n";
}elsif($key =~ /txt/){
print $q->td({-class=>'element',-style=>"$txtstyle $set_style"},$q->textfield(-class=>'etxt',-style=>"$txtstyle",-name=>"col_$key",-default=>"$cttpos->{$id}->{$key}", -override=>'1',-size=>"$isize",-maxlength=>100),"\n");
#}elsif($key =~ /save/){
#print $q->td({-class=>'element',-style=>"$set_style"},$but->singlesubmit2("ct_trans","save_pos","$ib{save_pos}"));
}elsif($key =~ /int/){
print $q->td({-class=>'tdint',-nowrap=>"1"},"&nbsp;\n");
}
}else{
if($key =~ /ct_name/){
#print $q->td({-class=>'tdint',-style=>"min-width:60px;"},"$ct_pos");
my $stamm_style = "background-color:#98c13b;padding:2px;";
my $article = $cttpos->{$id}->{ct_name};
if($cttpos->{$id}->{int09}){
print $q->td({-class=>'tdint',-style=>"min-width:60px;padding-top:5px;"}, $q->a({-class=>"linknav3",-style=>"$stamm_style",-href=>"$script/$users->{fullurl}/Waren/?detail_search=1&s_barcode=$cttpos->{$id}->{barcode}",-title=>"Im Warenstamm"},"$article")),"\n";
}else{
print $q->td({-class=>'tdint'},"$article"),"\n";
}
}elsif($key =~ /int02/){
$einzel =~ s/\./,/;
print $q->td({-class=>'tdint'},"$einzel"),"\n";
}elsif($key =~ /int03/){
$menge =~ s/\./,/;
print $q->td({-colspan=>'1',-class=>'tdint'},"$menge"),"\n";
}elsif($key =~ /int04/){
$gesamt =~ s/\./,/;
print $q->td({-class=>'tdint',-nowrap=>"1"},"$gesamt €"),"\n";
}elsif($key =~ /int02/){
print $q->td({-class=>'tdint'},"$einzel"),"\n";
}elsif($key =~ /int07/){
my $proz="";
$proz = "%" if($cttpos->{$id}->{$key} && $cttpos->{$id}->{$key} != 0);
$proz = "€" if($cttpos->{$id}->{$key} && $cttpos->{$id}->{$key} != 0 && $cttpos->{$id}->{int08} && $cttpos->{$id}->{int08} == 1);
print $q->td({-class=>'tdint',-nowrap=>"1"},"$cttpos->{$id}->{$key} $proz"),"\n";
}elsif($key =~ /txt03/){
print $q->td({-class=>'tdint'},"$cttpos->{$id}->{$key}"),"\n";
}elsif($key =~ /txt01/){
$cttpos->{$id}->{$key} = $q->unescapeHTML("$cttpos->{$id}->{$key}");
$cttpos->{$id}->{$key} = $lb->newline($cttpos->{$id}->{$key},"","");
print "<td class='tdtxt', style='$occupied_style;'>\n";
if($cttpos->{$id}->{barcode} && $cttpos->{$id}->{int09}){#bike with tariff-nr
my $u_name = $cttpos->{$id}->{owner};
my $u_name_end = $cttpos->{$id}->{owner_end};
foreach my $ctu_id (keys (%$ct_users)){
if($channel_map->{$u_name}){
$u_name = $channel_map->{$u_name};
}elsif($cttpos->{$id}->{owner} eq $ct_users->{$ctu_id}->{c_id}){
$u_name = $ct_users->{$ctu_id}->{txt01};
}
if($channel_map->{$u_name_end}){
$u_name_end = $channel_map->{$u_name_end};
}elsif($cttpos->{$id}->{owner_end} eq $ct_users->{$ctu_id}->{c_id}){
$u_name_end = $ct_users->{$ctu_id}->{txt01};
}
}
if($cttpos->{$id}->{itime} =~ /(\d{4})-(\d{2})-(\d{2})\s(\d{2}):(\d{2})/){
print $q->span("$dbt->{copri_conf}->{bike_state}->{$cttpos->{$id}->{int10}} &rarr; $dbt->{copri_conf}->{lock_state}->{$cttpos->{$id}->{int20}} &rarr; $u_name / $u_name_end"),"\n";
print "<br />\n";
}
}
if($cttpos->{$id}->{txt01} || $cttpos->{$id}->{int09}){
#$line_count2++;
$cttpos->{$id}->{txt01} =~ s/fixed/\<span style='color:red'\>fixed\<\/span\>/;
$cttpos->{$id}->{txt01} =~ s/defect/\<span style='color:red'\>defect\<\/span\>/;
my $bike="";
my $tariff = "";
$bike = "$cttpos->{$id}->{$key}" if($cttpos->{$id}->{$key});
$tariff = ", Tarif: $cttpos->{$id}->{int09} $cttpos->{$id}->{txt04}" if($cttpos->{$id}->{txt04});
print $q->span("$bike $tariff<br />"),"\n";
}
if($cttpos->{$id}->{int06} || $cttpos->{$id}->{int04}){
print $q->span("Start/End Station: $cttpos->{$id}->{int06} / $cttpos->{$id}->{int04}, GPS: $cttpos->{$id}->{txt06}"),"\n";
}
if($cttpos->{$id}->{start_time}){
print "<br />\n";
print $q->span({-style=>"$time_style"}, "Mietzeit: $s_dd.$s_mo.$s_yy $s_hh:$s_mi $e_dd.$e_mo.$e_yy $e_hh:$e_mi"),"\n";
}
print "</td>\n";
}elsif($key =~ /txt/){
print $q->td({-class=>'tdtxt'},"$cttpos->{$id}->{$key}");
}elsif($key =~ /int/){
print $q->td({-class=>'tdint',-nowrap=>"1"},"&nbsp;\n");
}
}
}
}
}#foreach end
if($sum_parts7 != "0"){
$sum_umst7 = $sum_parts7 / $diff7 * 7;
$sum_umst7 = $lb->round($sum_umst7);
}
if($sum_parts19 != "0"){
$sum_umst19 = $sum_parts19 / $diff19 * $umst1619;
$sum_umst19 = $lb->round($sum_umst19);
}
my $sum_netto7 = $sum_parts7 - $sum_umst7;
my $sum_netto19 = $sum_parts19 - $sum_umst19;
$sum_netto7 = $lb->cashme($sum_netto7);
$sum_netto19 = $lb->cashme($sum_netto19);
my $sum_nettoall = $sum_parts0 + $sum_netto7 + $sum_netto19;
$sum_nettoall = $lb->round($sum_nettoall);
$sum_nettoall = $lb->cashme($sum_nettoall,",");
my $sum_paid = $sum_parts0 + $sum_parts7 + $sum_parts19;
$sum_paid = $lb->round($sum_paid);
my $sum_preauth = $sum_paid || 0;
$sum_parts0 = $lb->cashme($sum_parts0,",");
$sum_parts7 = $lb->cashme($sum_parts7,",");
$sum_parts19 = $lb->cashme($sum_parts19,",");
$sum_umst7 = $lb->cashme($sum_umst7,",");
$sum_umst19 = $lb->round($sum_umst19);
$sum_umst19 = $lb->cashme($sum_umst19,",");
$sum_paid = $lb->cashme($sum_paid,",");
my $n="5";
my $m= 1 + $k - $n;
$m++ if($users->{kind_of_trans} =~ /Faktur|Verleih/);
print "<tr><td colspan='$m'>&nbsp;</td><td style='font-size:1em;' colspan='$n'>\n";
print $q->start_table({-class=>'list',-style=>'border-top:1px;border-style:solid;border-color:black;', -border=>'0', -width=>'100%',-align=>'center', -cellpadding=>'3', -cellspacing=>'0'}),"\n";
print $q->Tr("\n");
print $q->td("&nbsp;");
#if($users->{kind_of_trans} ne "Einkauf" && $node_name !~ /steuerfrei/){
if($node_name !~ /steuerfrei/){
print $q->Tr("\n"); $line_count2++;
print $q->td({-class=>'tdint'},"Nettobetrag:");
print $q->td({-class=>'tdint',-nowrap=>"1"},"$sum_nettoall €");
if($sum_parts0 != "0"){
print $q->Tr("\n");$line_count2++;
print $q->td({-class=>'tdint',-nowrap=>"1"},"0% UmSt auf $sum_parts0 €:");
print $q->td({-class=>'tdint',-nowrap=>"1"},"0,00 €");
}
if($sum_netto7 != "0"){
print $q->Tr("\n");$line_count2++;
print $q->td({-class=>'tdint',-nowrap=>"1"},"7% UmSt auf $sum_netto7 €:");
print $q->td({-class=>'tdint',-nowrap=>"1"},"$sum_umst7 €");
}
if($sum_netto19 != "0"){
print $q->Tr("\n");$line_count2++;
print $q->td({-class=>'tdint',-nowrap=>"1"},"$umst1619% UmSt auf $sum_netto19 €:");
print $q->td({-class=>'tdint',-nowrap=>"1"},"$sum_umst19 €");
}
}
my $summe = "Summe";
#$summe = "Nettosumme" if($users->{kind_of_trans} eq "Einkauf");
print $q->Tr("\n");$line_count2++;
print $q->td({-class=>'tdsum'},"<b>$summe:</b>");
print $q->td({-class=>'tdint',-nowrap=>"1"},"<b>$sum_paid €<b/>");
print $q->hidden(-name=>'sum_paid', -override=>'1',-value=>"$sum_paid");
print $q->end_table;
print "</td><td>&nbsp;</td>";
print "</tr>";
print $q->end_table;
print $q->hidden(-name=>'owner', -override=>'1', -value=>"$users->{u_id}");
print $q->hidden(-name=>'offset', -override=>'1', -value=>"$R::offset") if($R::offset);
print $q->hidden(-name=>'c_id4trans', -override=>'1', -value=>"$c_id");
print $q->hidden(-name=>'offset', -override=>'1', -value=>"$R::offset") if($R::offset);
print $q->hidden(-name=>'limit', -override=>'1', -value=>"$R::limit") if($R::limit);
print $q->hidden(-name=>'relids', -override=>'1', -value=>"$R::relids") if($R::relids);
$set_main_id=$main_id if($main_id && $main_id > "300000");
print $q->hidden(-name=>'set_main_id', -value=>"$set_main_id", -override=>'1');
#if(!$ctt->{close_time} && $varenv{Zahlungsweise} && $users->{u_id} == $dbt->{copri_conf}->{superu_id}){
if($users_dms->{int03} == 2){
#only if user is also a primary DMS user with invoice rw
my $dbh_primary = $dbt->dbconnect_extern("sharee_primary");
my $users_dms_primary = { u_id => 0 };
$users_dms_primary = $dbt->select_users($dbh_primary,$users_dms->{u_id},"and int03=2");
if($users_dms_primary->{int03} == 2 && !$ctt->{close_time} && $varenv{Zahlungsweise}){
my @_paymentstate = split(/\|/,$varenv{Zahlungsweise});
push @_paymentstate, "";
my $kind_of_payment = "";
if($ctadr->{int03} == 1 && ($ctadr->{ct_name} =~ /PO-\d+/ || $ctadr->{ct_name} =~ /TM-\d+/)){
$kind_of_payment = "$_paymentstate[0]";
}else{
undef $_paymentstate[0];
}
if($ctadr->{int03} == 2 && length($ctadr->{ct_name}) >= 19){
$kind_of_payment = "$_paymentstate[1]";
}else{
undef $_paymentstate[1];
}
$kind_of_payment = "$ctt->{state}" if($ctt->{state});
print $q->hidden(-name=>'printer_id', -value=>"PDF - Normalpapier", -override=>'1');
my $send_invoice_checkbox = 1;
$send_invoice_checkbox = 0 if($ctt->{txt30});
print $q->div({-class=>'element',-style=>'float:right;'},
"buchen incl. drucken ",$but->checkbox("print_pdf","ct_trans","1","PDF drucken",""),
" eMail Versand ",$but->checkbox("1","send_invoice","$send_invoice_checkbox","eMail Rechnung",""),
$but->singlesubmit1("set_state","buchen"),
$but->selector("state","150px",$kind_of_payment,@_paymentstate),"\n") if($users->{kind_of_trans} =~ /Verkauf|Verleih|Faktur/);
}
}
my $praefix = "$ctt->{txt00}-$varenv{praefix}";
if($ctt->{state} && $ctt->{int01}){
$ctt->{int01} =~ s/\./,/;
my $style = "color:red;" if($ctt->{int01} ne $sum_paid);
my $opos = "";
$opos = "OPOS" if($ctt->{int14} eq "1");
print $q->div({-style=>"float:right;padding:0.71em;font-size:0.81em;$style"},"[<span style='color:red;'>$opos</span> $vibuchen_mtime Gebucht $ctt->{int01} € \"$ctt->{state}\"]") if($ctt->{state});
}
print $q->end_form;
print $q->div({-style=>"clear:both;height:0.1px;"},""),"\n";
if($ctt->{txt30}){
print $q->div({-style=>"padding:0.5em;font-size:0.81em;width:98%;text-align:right;"}, "$ctt->{txt30}"),"\n";
}elsif( -f "$varenv{pdf}/$praefix-$ctt->{ct_name}.pdf" ){
print $q->start_form(),"\n";
print $q->hidden(-name=>'offset', -override=>'1', -value=>"$R::offset") if($R::offset);
print $q->hidden(-name=>'limit', -override=>'1', -value=>"$R::limit") if($R::limit);
print $q->hidden(-name=>'relids', -override=>'1', -value=>"$R::relids") if($R::relids);
print $q->div({-style=>"padding:0.5em;font-size:0.81em;width:98%;text-align:right;"}, "eMail wurde nicht versandt! Rechnung eMail ", $but->singlesubmit1("ct_trans","send_invoice_again","send_invoice_again")),"\n" if($users->{u_id} == $dbt->{copri_conf}->{superu_id});
print $q->end_form;
}
if( -f "$varenv{pdf}/$praefix-$ctt->{ct_name}.pdf" && $varenv{metahost}){
print $q->div({-style=>"padding:0.5em;font-size:0.81em;width:98%;text-align:right;"}, "Download: ", $q->a({-href=>"$varenv{metahost}/pdf/$praefix-$ctt->{ct_name}.pdf", -target=>'_blank'},"$praefix-$ctt->{ct_name}.pdf"));
}
if($ctt->{state} && $ctt->{state} =~ /payone/ && $ctt->{txt28} && $ctt->{txt28} =~ /error/i){
print $q->div({-style=>"clear:both;padding:0.5em;font-size:0.81em;width:98%;text-align:right;color:red;"}, "Payone error: $ctt->{txt28}"),"\n";
}elsif($ctt->{txt28} =~ /settleaccount=yes/i){
print $q->div({-style=>"clear:both;padding:0.5em;font-size:0.81em;width:98%;text-align:right;color:green;"}, "Payone SEPA-Lastschrifteinzug war erfolgreich"),"\n";
}
$db->updater("contenttrans","c_id","$c_id","txt20","$accounting_start - $accounting_end","","","","","no_time") if(!$int05 && $accounting_start && $accounting_end);
$db->updater("contenttrans","c_id","$c_id","int15","$sum_preauth","","","","","no_time") if($sum_preauth || $sum_preauth == 0);
return "$line_count2";
}
1;