2022-10-14 08:28:51 +02:00
package TransInvoices ;
#
# 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 Data::Dumper ;
use Lib::Config ;
use Mod::Buttons ;
use Mod::Libenz ;
use Mod::Libenzdb ;
use Mod::DBtank ;
use Mod::APIfunc ;
use Mod::Pricing ;
sub new {
my $ class = shift ;
my $ self = { } ;
bless ( $ self , $ class ) ;
return $ self ;
}
#Template
sub tpl () {
my $ self = shift ;
my $ node_meta = shift ;
my $ users_dms = shift ;
my $ set_main_id = shift ;
my $ rel4tpl = 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 $ apif = new APIfunc ;
my $ but = new Buttons ;
my $ pri = new Pricing ;
my % varenv = $ cf - > envonline ( ) ;
my % ib = $ but - > ibuttons ( ) ;
my $ today = strftime "%d.%m.%Y" , localtime ;
my $ now_dt = strftime "%Y-%m-%d %H:%M:%S" , localtime ;
my $ coo = $ q - > cookie ( - name = > 'domcookie' ) ;
2022-10-18 20:15:11 +02:00
my $ dbh = "" ;
2022-10-14 08:28:51 +02:00
my $ line_count2 = 0 ;
my $ k = 0 ;
2022-10-18 20:15:11 +02:00
my $ ctf = $ db - > get_content1 ( "contentuser" , "2" ) ; #Operator-Faktura config
2022-10-14 08:28:51 +02:00
my $ ctt = $ db - > get_content1 ( "contenttrans" , $ rel4tpl - > { content_id } ) ;
my $ ctadr = $ db - > get_content1 ( "contentadr" , $ ctt - > { int10 } ) ;
my $ vibuchen_mtime = "" ;
$ vibuchen_mtime = "payone post " . $ lb - > time4de ( $ ctt - > { pay_time } , 1 ) . " . " if ( $ ctt - > { pay_time } ) ;
2022-10-18 20:15:11 +02:00
#int9x are not in db
my @ tpl_order = ( "ct_name=Rechnung" , "int01=Summe payone Einzug" , "state=Zahlungsart" , "int91=TeilRad Gebühren" , "int92=Disagio" , "int93=Transaktion" , "int02=Summe Auszahlung" ) ;
my $ tplf = $ db - > get_tpl ( "196" ) ; #Operator-Faktuar
2022-10-14 08:28:51 +02:00
my @ tplf_order = split /,/ , $ tplf - > { tpl_order } ;
my $ txt20 = $ R:: txt20 || $ ctt - > { txt20 } || "" ; #Leistungsdatum
my $ int05 = $ R:: int05 || $ ctt - > { int05 } || "" ; #manuell
my $ cttpos = { c_id = > 0 } ;
my $ rows = 0 ;
2022-10-18 20:15:11 +02:00
#collects invoices
2022-10-14 08:28:51 +02:00
( $ cttpos , $ rows ) = $ dbt - > collect_contenttrans ( $ dbh , $ rel4tpl - > { content_id } ) ;
2022-10-18 20:15:11 +02:00
#maybe sum payment types
2022-10-14 08:28:51 +02:00
#foreach my $id (keys(%$cttpos)){
# if(ref($cttpos->{$id}) eq "HASH"){
# if($cttpos->{$id}->{int26}){
# }
# }
#}
print $ q - > start_table ( { - class = > 'list' , - border = > '0' , - width = > '100%' , - align = > 'left' , - cellpadding = > '3' , - cellspacing = > '0' } ) ;
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 = > 'c_id4trans' , - override = > '1' , - value = > "$rel4tpl->{content_id}" ) ;
print $ q - > hidden ( - name = > 'tpl_id4trans' , - override = > '1' , - value = > "$node_meta->{tpl_id}" ) ;
$ line_count2 + + ;
print $ q - > Tr ( ) ;
print $ q - > th ( "Pos." ) , "\n" ;
foreach ( @ tpl_order ) {
my ( $ key , $ val ) = split /=/ , $ _ ;
$ k + + if ( $ val ) ;
2022-10-18 20:15:11 +02:00
$ val . = " ($key)" if ( $ users_dms - > { u_id } eq $ varenv { superu_id } ) ;
2022-10-14 08:28:51 +02:00
print $ q - > th ( "$val" ) ;
}
print $ q - > start_form ( - name = > 'transposform' ) , "\n" ;
2022-10-18 20:15:11 +02:00
my $ scol = "c_id" ;
2022-10-14 08:28:51 +02:00
my $ sum_parts19 = 0 ;
my $ diff19 = 100 + 19 ;
my $ sum_umst19 = 0 ;
my $ i = 0 ;
my $ accounting_start = "" ;
my $ accounting_end = "" ;
2022-10-18 20:15:11 +02:00
foreach my $ id ( sort { $ cttpos - > { $ b } - > { $ scol } <=> $ cttpos - > { $ a } - > { $ scol } } keys ( %$ cttpos ) ) {
my $ oac = $ pri - > operator_accounting2calc ( \ % varenv , $ cttpos - > { $ id } , $ ctf , $ tplf ) ;
#$sum_parts19 += $oac->{int01};#payone Einzug
$ sum_parts19 += $ oac - > { int02 } ; #Auszahlung
#$oac->{int01} = $pri->round($oac->{int01});
$ oac - > { int01 } = sprintf ( '%.2f' , $ oac - > { int01 } ) ;
2022-10-14 08:28:51 +02:00
if ( 1 == 1 ) {
$ i + + ;
if ( $ i == 1 ) {
$ accounting_end = "$3.$2.$1" if ( $ cttpos - > { $ id } - > { pay_time } =~ /(\d+)\-(\d+)\-(\d+)/ ) ;
$ accounting_start = $ accounting_end ;
} else {
$ accounting_start = "$3.$2.$1" if ( $ cttpos - > { $ id } - > { pay_time } =~ /(\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);
}
#1. Spalte
print $ q - > Tr ( ) , "\n" ;
2022-10-18 20:15:11 +02:00
print $ q - > td ( { - class = > 'tdint' } , "$i" ) , "\n" ;
2022-10-14 08:28:51 +02:00
#Tablecontent (parameter)
foreach ( @ tpl_order ) {
2022-10-18 20:15:11 +02:00
my ( $ key , $ val ) = split /=/ , $ _ ;
2022-10-14 08:28:51 +02:00
$ cttpos - > { $ id } - > { $ key } = $ q - > unescapeHTML ( $ cttpos - > { $ id } - > { $ key } ) ;
2022-10-18 20:15:11 +02:00
my $ txtstyle = "text-align:left;min-width:100px;" ;
2022-10-14 08:28:51 +02:00
if ( $ key =~ /int\d+/ ) {
$ txtstyle = "text-align:right;min-width:50px;" ;
}
if ( 1 == 1 ) {
if ( $ key =~ /ct_name/ ) {
2022-10-18 20:15:11 +02:00
print $ q - > td ( { - class = > 'tdtxt' } , "\# $cttpos->{$id}->{ct_name} $cttpos->{$id}->{txt01}" ) , "\n" ;
2022-10-14 08:28:51 +02:00
}
2022-10-18 20:15:11 +02:00
elsif ( $ key =~ /int/ ) {
$ oac - > { $ key } =~ s/\./,/ ;
print $ q - > td ( { - class = > 'tdint' , - nowrap = > 1 } , "$oac->{$key} €" ) , "\n" ;
2022-10-14 08:28:51 +02:00
}
2022-10-18 20:15:11 +02:00
elsif ( $ key =~ /state/ ) {
print $ q - > td ( { - class = > 'tdint' , - nowrap = > 1 } , "$cttpos->{$id}->{$key}" ) , "\n" ;
}
elsif ( $ key =~ /txt/ ) {
print $ q - > td ( { - class = > 'tdtxt' } , "$cttpos->{$id}->{$key}" ) , "\n" ;
}
}
2022-10-14 08:28:51 +02:00
}
}
} #foreach end
if ( $ sum_parts19 && $ sum_parts19 != 0 ) {
$ sum_umst19 = $ sum_parts19 / $ diff19 * 19 ;
$ sum_umst19 = $ pri - > round ( $ sum_umst19 ) ;
}
my $ sum_netto19 = $ sum_parts19 - $ sum_umst19 ;
$ sum_netto19 = sprintf ( '%.2f' , $ sum_netto19 ) ;
$ sum_netto19 =~ s/\./,/ ;
my $ sum_paid = $ sum_parts19 ;
$ sum_paid = $ pri - > round ( $ sum_paid ) ;
my $ sum_preauth = $ sum_paid || 0 ;
$ sum_paid = sprintf ( '%.2f' , $ sum_paid ) ;
$ sum_paid =~ s/\./,/ ;
$ sum_parts19 = sprintf ( '%.2f' , $ sum_parts19 ) ;
$ sum_umst19 = sprintf ( '%.2f' , $ sum_umst19 ) ;
$ sum_umst19 =~ s/\./,/ ;
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}" ;
}
}
}
}
my $ n = "5" ;
my $ m = 1 + $ k - $ n ;
$ m + + ;
print "<tr>\n" ;
print "<td colspan='$m'><div style='font-size:0.81em;padding:0.3em 0em;border:0px;'>$payment_text</div></td>\n" ;
print "<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 ( " " ) ;
2022-10-18 20:15:11 +02:00
if ( 1 == 1 ) {
2022-10-14 08:28:51 +02:00
print $ q - > Tr ( "\n" ) ; $ line_count2 + + ;
print $ q - > td ( { - class = > 'tdint' } , "Nettobetrag:" ) ;
print $ q - > td ( { - class = > 'tdint' , - nowrap = > "1" } , "$sum_netto19 €" ) ;
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" } , "19% UmSt auf $sum_netto19 €:" ) ;
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 ;
print $ q - > hidden ( - name = > 'owner' , - override = > '1' , - value = > "$users_dms->{u_id}" ) ;
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 ( - 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 = $ rel4tpl - > { main_id } if ( $ rel4tpl - > { main_id } && $ rel4tpl - > { main_id } > "300000" ) ;
print $ q - > hidden ( - name = > 'set_main_id' , - value = > "$set_main_id" , - override = > '1' ) ;
2022-10-18 20:15:11 +02:00
if ( $ users_dms - > { int03 } == 2 ) {
2022-10-14 08:28:51 +02:00
#only if user is also a primary DMS user with invoice rw
print $ q - > hidden ( - name = > 'printer_id' , - value = > "PDF" , - override = > '1' ) ;
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 - > { u_id } && $ users_dms_primary - > { int03 } == 2 && ! $ ctt - > { close_time } ) {
2022-10-18 20:15:11 +02:00
my @ _paymentstate = ( "" , "Überweisung" ) ;
2022-10-14 08:28:51 +02:00
my $ kind_of_payment = "" ;
$ kind_of_payment = "$ctt->{state}" if ( $ ctt - > { state } && $ ctt - > { int01 } ) ;
my $ send_invoice_checkbox = 1 ;
$ send_invoice_checkbox = 0 if ( $ ctt - > { txt30 } ) ;
print $ q - > div ( { - class = > 'element6' , - 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" , "250px" , $ kind_of_payment , @ _paymentstate ) ) , "\n" ;
}
2022-10-18 20:15:11 +02:00
}
2022-10-14 08:28:51 +02:00
print $ q - > end_form ;
my $ praefix = "$ctt->{txt00}-$varenv{praefix}" ;
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_dms - > { u_id } == $ dbt - > { copri_conf } - > { superu_id } ) ;
print $ q - > end_form ;
}
2022-10-18 20:15:11 +02:00
if ( $ ctt - > { state } && $ ctt - > { int01 } ) {
2022-10-14 08:28:51 +02:00
$ ctt - > { int01 } =~ s/\./,/ ;
my $ style = "color:red;" if ( $ ctt - > { int01 } ne $ sum_paid ) ;
my $ opos = "" ;
$ opos = "OPOS" if ( $ ctt - > { int14 } && $ ctt - > { int14 } > 0 ) ;
print $ q - > div ( { - style = > "padding:0.5em;font-size:0.81em;width:98%;text-align:right;" } , "<span style='color:red;'>$opos</span> $vibuchen_mtime Gebucht $ctt->{int01} € \"$ctt->{state}\"" ) if ( $ ctt - > { state } ) ;
2022-10-18 20:15:11 +02:00
}
2022-10-14 08:28:51 +02:00
if ( - f "$varenv{basedir}/pdfinvoice/$praefix-$ctt->{ct_name}.pdf" ) {
print $ q - > div ( { - style = > 'padding:0.5em;font-size:0.81em;width:98%;text-align:right;' } , "Download: " , $ q - > a ( { - href = > "$varenv{wwwhost}/FileOut?file=$praefix-$ctt->{ct_name}.pdf&sessionid=$coo" , - target = > "_blank" , - type = > 'application/octet-stream' , - style = > 'text-decoration:underline;' } ) , "Rechnung $ctt->{ct_name}.pdf" ) , "\n" ;
}
$ db - > updater ( "contenttrans" , "c_id" , "$rel4tpl->{content_id}" , "txt20" , "$accounting_start - $accounting_end" , "" , "" , "" , "" , "no_time" ) if ( ! $ int05 && $ accounting_start && $ accounting_end ) ;
2022-10-18 20:15:11 +02:00
2022-10-14 08:28:51 +02:00
return "$line_count2" ;
}
1 ;