2021-12-30 12:05:56 +01:00
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 ;
2022-02-10 16:45:22 +01:00
use Mod::Pricing ;
2021-12-30 12:05:56 +01:00
sub new {
my $ class = shift ;
my $ self = { } ;
bless ( $ self , $ class ) ;
return $ self ;
}
#Template
sub tpl () {
2022-02-10 16:45:22 +01:00
my $ self = shift ;
my $ node_meta = shift ;
my $ users_dms = shift ;
my $ set_main_id = shift ;
my $ rel4tpl = shift ;
my $ return = shift || "" ;
2021-12-30 12:05:56 +01:00
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 ;
2022-02-10 16:45:22 +01:00
my $ pri = new Pricing ;
2021-12-30 12:05:56 +01:00
my % varenv = $ cf - > envonline ( ) ;
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 } ) ;
2022-02-10 16:45:22 +01:00
my $ ctt = $ db - > get_content1 ( "contenttrans" , $ rel4tpl - > { content_id } ) ;
#my $umst1619 = $lb->umst_breaking($ctt,"");
2021-12-30 12:05:56 +01:00
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 } ) ;
2022-02-10 16:45:22 +01:00
my @ tpl_order = ( "txt01=Beschreibung" , "ct_name=Nummer" , "date_time=Mietzeit" , "int03=Menge" , "int02=Preis" , "int07=Rabatt" , "int04=Gesamt" ) ;
2022-02-01 20:53:23 +01:00
my $ tplf = $ db - > get_tpl ( "201" ) ; #Firma tpl
my @ tplf_order = split /,/ , $ tplf - > { tpl_order } ;
2021-12-30 12:05:56 +01:00
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" ;
}
2022-02-14 16:06:02 +01:00
my $ max_sum = 1000 ;
2021-12-30 12:05:56 +01:00
my $ cttpos = { c_id = > 0 } ;
my $ rows = 0 ;
2022-02-10 16:45:22 +01:00
( $ cttpos , $ rows ) = $ db - > collect_contentpos ( "contenttrans" , $ rel4tpl - > { content_id } ) ;
foreach my $ id ( keys ( %$ cttpos ) ) {
if ( $ cttpos - > { $ id } - > { int26 } ) {
@ tpl_order = ( "txt01=Beschreibung" , "ct_name=Nummer" , "date_time=Mietzeit" , "int26=Einsparung" , "int03=Menge" , "int02=Preis" , "int07=Rabatt" , "int04=Gesamt" ) ;
}
}
2022-01-26 15:52:25 +01:00
2021-12-30 12:05:56 +01:00
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 - > start_table ( { - class = > 'list' , - border = > '0' , - width = > '100%' , - align = > 'left' , - cellpadding = > '3' , - cellspacing = > '0' } ) ;
#Parts Header
print $ q - > start_form ( - name = > 'spartform' ) ;
2022-02-10 16:45:22 +01:00
$ 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 - > hidden ( - name = > 'c_id4trans' , - override = > '1' , - value = > "$rel4tpl->{content_id}" ) ;
print $ q - > hidden ( - name = > 'tpl_id4trans' , - override = > '1' , - value = > "$node_meta->{tpl_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' ) ;
$ line_count2 + + ;
print $ q - > Tr ( ) ;
2021-12-30 12:05:56 +01:00
print $ q - > th ( $ but - > singlesubmit ( "select_part" , "*" ) , "\n" ) ;
foreach ( @ tpl_order ) {
my ( $ key , $ val ) = split /=/ , $ _ ;
$ k + + if ( $ val ) ;
2022-02-10 16:45:22 +01:00
if ( $ key eq "ct_name" ) {
2021-12-30 12:05:56 +01:00
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' ) , "" ) ;
2022-02-10 16:45:22 +01:00
} elsif ( $ key =~ /int|txt/ ) {
2021-12-30 12:05:56 +01:00
print $ q - > th ( "$val" ) ;
}
}
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_parts19 = 0 ;
2022-02-10 16:45:22 +01:00
#my $diff19 = 100 + $umst1619;
my $ diff19 = 100 + 19 ;
2021-12-30 12:05:56 +01:00
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 $ 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);
}
2022-02-10 16:45:22 +01:00
my $ gesamt = 0 ;
my $ rabatt = "" ;
( $ gesamt , $ rabatt ) = $ pri - > price2calc ( $ cttpos - > { $ id } ) ;
$ sum_parts19 += $ gesamt ;
$ gesamt = $ lb - > round ( $ gesamt ) ;
$ gesamt = $ lb - > cashme ( $ gesamt , "," ) ;
2021-12-30 12:05:56 +01:00
#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' ) ;
2022-02-10 16:45:22 +01:00
print $ q - > hidden ( - name = > 'c_id4trans' , - override = > '1' , - value = > "$rel4tpl->{content_id}" ) ;
2022-01-11 15:15:26 +01:00
print $ q - > hidden ( - name = > 'tpl_id4trans' , - override = > '1' , - value = > "$node_meta->{tpl_id}" ) ;
2021-12-30 12:05:56 +01:00
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 } ) {
2022-02-10 16:45:22 +01:00
print $ q - > a ( { - class = > "editnav" , - href = > "/DMS/Faktura?trans2edit=transpos\&c_idpos=$cttpos->{$id}->{c_id}\&c_id4trans=$rel4tpl->{content_id}\&tpl_id4trans=$node_meta->{tpl_id}\&owner=$users_dms->{u_id}" , - title = > "Datensatz bearbeiten" } , $ q - > img ( { - src = > "$varenv{metahost}/glyphicons/glyphicons-151-edit.png" } ) ) , "\n" ;
2021-12-30 12:05:56 +01:00
}
my $ calpath = "Mietjournal" ;
2022-01-26 15:52:25 +01:00
print $ q - > a ( { - class = > "linknav3" , - style = > "background-color:$varenv{calendar_active_color}" , - href = > "/DMS/$calpath/?cttpos_id=$cttpos->{$id}->{c_id}" , - title = > "Im $calpath öffnen" } , "<br /><br />ID $cttpos->{$id}->{c_id}" ) , "\n" ;
2021-12-30 12:05:56 +01:00
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" ) ;
2022-02-10 16:45:22 +01:00
} elsif ( $ key eq "int26" ) {
my $ co2saving = "" ;
if ( $ cttpos - > { $ id } - > { int26 } ) {
$ co2saving = "Einsparung</br>" ;
my $ co2diff = $ pri - > co2calc ( $ cttpos - > { $ id } ) ;
my $ sprit_price = $ pri - > sprit2calc ( $ cttpos - > { $ id } ) ;
$ co2saving . = "$co2diff kg CO²<br />" ;
$ co2saving . = "$sprit_price EUR<br />" ;
$ cttpos - > { $ id } - > { int26 } =~ s/\./,/ ;
$ co2saving . = "bei $cttpos->{$id}->{int26} KM" ;
}
print $ q - > td ( { - class = > 'tdint' } , "$co2saving" ) ;
2021-12-30 12:05:56 +01:00
} elsif ( $ key =~ /int03/ ) {
2022-02-10 16:45:22 +01:00
#TODO, autocalc Menge Preis by time-range
#Menge
print $ q - > td ( { - colspan = > '1' , - class = > 'element' , - style = > "$txtstyle $set_style" } , $ q - > textfield ( - class = > 'etxt' , - style = > "$txtstyle" , - name = > "col_$key" , - default = > "$cttpos->{$id}->{$key}" , - override = > '1' , - size = > "$isize" , - maxlength = > 10 , - autofocus = > 1 ) , "\n" ) ;
2021-12-30 12:05:56 +01:00
} elsif ( $ key =~ /int02/ ) {
2022-02-10 16:45:22 +01:00
#Einzelpreis
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" ) ;
2021-12-30 12:05:56 +01:00
} 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" ;
}
2022-02-10 16:45:22 +01:00
my ( $ s_yy , $ s_mo , $ s_dd , $ s_hh , $ s_mi ) = $ lb - > split_date ( $ cttpos - > { $ id } - > { start_time } ) ;
my ( $ e_yy , $ e_mo , $ e_dd , $ e_hh , $ e_mi ) = $ lb - > split_date ( $ cttpos - > { $ id } - > { end_time } ) ;
2021-12-30 12:05:56 +01:00
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" } , " \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 } ) {
2022-01-26 15:52:25 +01:00
print $ q - > td ( { - class = > 'tdint' , - style = > "min-width:60px;padding-top:5px;" } , $ q - > a ( { - class = > "linknav3" , - style = > "$stamm_style" , - href = > "/DMS/Waren/?detail_search=1&s_barcode=$cttpos->{$id}->{barcode}" , - title = > "Im Warenstamm" } , "$article" ) ) , "\n" ;
2021-12-30 12:05:56 +01:00
} else {
print $ q - > td ( { - class = > 'tdint' } , "$article" ) , "\n" ;
}
2022-02-10 16:45:22 +01:00
} elsif ( $ key eq "int26" ) {
my $ co2saving = "" ;
if ( $ cttpos - > { $ id } - > { int26 } ) {
$ co2saving = "Einsparung</br>" ;
my $ co2diff = $ pri - > co2calc ( $ cttpos - > { $ id } ) ;
my $ sprit_price = $ pri - > sprit2calc ( $ cttpos - > { $ id } ) ;
$ co2saving . = "$co2diff kg CO²<br />" ;
$ co2saving . = "$sprit_price EUR<br />" ;
$ cttpos - > { $ id } - > { int26 } =~ s/\./,/ ;
$ co2saving . = "bei $cttpos->{$id}->{int26} KM" ;
}
print $ q - > td ( { - class = > 'tdint' } , "$co2saving" ) ;
2021-12-30 12:05:56 +01:00
} elsif ( $ key =~ /int02/ ) {
2022-02-10 16:45:22 +01:00
$ cttpos - > { $ id } - > { $ key } =~ s/\./,/ ;
print $ q - > td ( { - class = > 'tdint' } , "$cttpos->{$id}->{$key}" ) , "\n" ;
2021-12-30 12:05:56 +01:00
} elsif ( $ key =~ /int03/ ) {
2022-02-10 16:45:22 +01:00
$ cttpos - > { $ id } - > { $ key } =~ s/\./,/ ;
print $ q - > td ( { - colspan = > '1' , - class = > 'tdint' } , "$cttpos->{$id}->{$key}" ) , "\n" ;
2021-12-30 12:05:56 +01:00
} elsif ( $ key =~ /int04/ ) {
$ gesamt =~ s/\./,/ ;
print $ q - > td ( { - class = > 'tdint' , - nowrap = > "1" } , "$gesamt €" ) , "\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}} → $dbt->{copri_conf}->{lock_state}->{$cttpos->{$id}->{int20}} → $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" ;
}
2022-02-10 16:45:22 +01:00
if ( $ cttpos - > { $ id } - > { start_time } && $ cttpos - > { $ id } - > { end_time } ) {
$ cttpos - > { $ id } - > { start_time } = $ lb - > time4de ( $ cttpos - > { $ id } - > { start_time } , "1" ) ;
$ cttpos - > { $ id } - > { end_time } = $ lb - > time4de ( $ cttpos - > { $ id } - > { end_time } , "1" ) ;
2021-12-30 12:05:56 +01:00
print "<br />\n" ;
2022-02-10 16:45:22 +01:00
print $ q - > span ( { - style = > "$time_style" } , "Mietzeit: $cttpos->{$id}->{start_time} – $cttpos->{$id}->{end_time}" ) , "\n" ;
2021-12-30 12:05:56 +01:00
}
print "</td>\n" ;
} elsif ( $ key =~ /txt/ ) {
print $ q - > td ( { - class = > 'tdtxt' } , "$cttpos->{$id}->{$key}" ) ;
} elsif ( $ key =~ /int/ ) {
print $ q - > td ( { - class = > 'tdint' , - nowrap = > "1" } , " \n" ) ;
}
}
}
}
} #foreach end
2022-02-14 16:06:02 +01:00
if ( $ sum_parts19 && $ sum_parts19 != 0 ) {
2022-02-10 16:45:22 +01:00
#$sum_umst19 = $sum_parts19 / $diff19 * $umst1619;
$ sum_umst19 = $ sum_parts19 / $ diff19 * 19 ;
2021-12-30 12:05:56 +01:00
$ sum_umst19 = $ lb - > round ( $ sum_umst19 ) ;
}
my $ sum_netto19 = $ sum_parts19 - $ sum_umst19 ;
$ sum_netto19 = $ lb - > cashme ( $ sum_netto19 ) ;
2022-02-14 16:06:02 +01:00
my $ sum_nettoall = $ sum_netto19 ;
2021-12-30 12:05:56 +01:00
$ sum_nettoall = $ lb - > round ( $ sum_nettoall ) ;
$ sum_nettoall = $ lb - > cashme ( $ sum_nettoall , "," ) ;
2022-02-14 16:06:02 +01:00
my $ sum_paid = $ sum_parts19 ;
2021-12-30 12:05:56 +01:00
$ sum_paid = $ lb - > round ( $ sum_paid ) ;
my $ sum_preauth = $ sum_paid || 0 ;
$ sum_parts19 = $ lb - > cashme ( $ sum_parts19 , "," ) ;
$ sum_umst19 = $ lb - > round ( $ sum_umst19 ) ;
$ sum_umst19 = $ lb - > cashme ( $ sum_umst19 , "," ) ;
$ sum_paid = $ lb - > cashme ( $ sum_paid , "," ) ;
2022-02-01 20:53:23 +01:00
my $ payment_text = "" ;
foreach ( @ tplf_order ) {
my ( $ key , $ des , $ size ) = split /=/ , $ _ ;
if ( $ key =~ /txt5\d/ ) {
$ ctf - > { $ key } = $ q - > unescapeHTML ( "$ctf->{$key}" ) ;
$ ctf - > { $ key } = $ lb - > newline ( $ ctf - > { $ key } , "" , "" ) ;
$ ctt - > { state } =~ s/\(payone.*// ;
if ( $ des =~ /$ctt->{state}/ ) {
if ( $ sum_parts19 < 0 ) {
$ payment_text = "$ctf->{txt58}" ;
} else {
$ payment_text = "$ctf->{$key}" ;
}
}
}
}
2021-12-30 12:05:56 +01:00
my $ n = "5" ;
my $ m = 1 + $ k - $ n ;
2022-01-26 15:52:25 +01:00
$ m + + ;
2022-02-01 20:53:23 +01:00
print "<tr>\n" ;
print "<td class='element' style='border:0;' colspan='$m'>$payment_text</td>\n" ;
print "<td style='font-size:1em;' colspan='$n'>\n" ;
2021-12-30 12:05:56 +01:00
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 ( " " ) ;
2022-02-10 16:45:22 +01:00
if ( $ node_meta - > { node_name } !~ /steuerfrei/ ) {
2021-12-30 12:05:56 +01:00
print $ q - > Tr ( "\n" ) ; $ line_count2 + + ;
print $ q - > td ( { - class = > 'tdint' } , "Nettobetrag:" ) ;
print $ q - > td ( { - class = > 'tdint' , - nowrap = > "1" } , "$sum_nettoall €" ) ;
2022-02-14 16:06:02 +01:00
if ( $ sum_netto19 != 0 ) {
2021-12-30 12:05:56 +01:00
print $ q - > Tr ( "\n" ) ; $ line_count2 + + ;
2022-02-10 16:45:22 +01:00
#print $q->td({-class=>'tdint',-nowrap=>"1"},"$umst1619% UmSt auf $sum_netto19 €:");
print $ q - > td ( { - class = > 'tdint' , - nowrap = > "1" } , "19% UmSt auf $sum_netto19 €:" ) ;
2021-12-30 12:05:56 +01:00
print $ q - > td ( { - class = > 'tdint' , - nowrap = > "1" } , "$sum_umst19 €" ) ;
}
}
my $ summe = "Summe" ;
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> </td>" ;
print "</tr>" ;
print $ q - > end_table ;
2022-01-26 15:52:25 +01:00
print $ q - > hidden ( - name = > 'owner' , - override = > '1' , - value = > "$users_dms->{u_id}" ) ;
2021-12-30 12:05:56 +01:00
print $ q - > hidden ( - name = > 'offset' , - override = > '1' , - value = > "$R::offset" ) if ( $ R:: offset ) ;
2022-02-10 16:45:22 +01:00
print $ q - > hidden ( - name = > 'c_id4trans' , - override = > '1' , - value = > "$rel4tpl->{content_id}" ) ;
2022-01-11 15:15:26 +01:00
print $ q - > hidden ( - name = > 'tpl_id4trans' , - override = > '1' , - value = > "$node_meta->{tpl_id}" ) ;
2021-12-30 12:05:56 +01:00
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 ) ;
2022-02-10 16:45:22 +01:00
$ set_main_id = $ rel4tpl - > { main_id } if ( $ rel4tpl - > { main_id } && $ rel4tpl - > { main_id } > "300000" ) ;
2021-12-30 12:05:56 +01:00
print $ q - > hidden ( - name = > 'set_main_id' , - value = > "$set_main_id" , - override = > '1' ) ;
2022-01-26 15:52:25 +01:00
#if(!$ctt->{close_time} && $varenv{Zahlungsweise} && $users_dms->{u_id} == $dbt->{copri_conf}->{superu_id}){
2021-12-30 12:05:56 +01:00
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" ) ,
2022-01-26 15:52:25 +01:00
$ but - > selector ( "state" , "150px" , $ kind_of_payment , @ _paymentstate ) ) , "\n" ;
2021-12-30 12:05:56 +01:00
}
}
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 ) ;
2022-01-26 15:52:25 +01:00
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_dms - > { u_id } == $ dbt - > { copri_conf } - > { superu_id } ) ;
2021-12-30 12:05:56 +01:00
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" ;
}
2022-02-10 16:45:22 +01:00
$ db - > updater ( "contenttrans" , "c_id" , "$rel4tpl->{content_id}" , "txt20" , "$accounting_start - $accounting_end" , "" , "" , "" , "" , "no_time" ) if ( ! $ int05 && $ accounting_start && $ accounting_end ) ;
$ db - > updater ( "contenttrans" , "c_id" , "$rel4tpl->{content_id}" , "int15" , "$sum_preauth" , "" , "" , "" , "" , "no_time" ) if ( $ sum_preauth || $ sum_preauth == 0 ) ;
2021-12-30 12:05:56 +01:00
return "$line_count2" ;
}
1 ;