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 $ctt = 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');
my $dbh = "";
my $line_count2 = 0;
my $tc=0;
my $vibuchen_mtime = $lb->time4de($ctt->{mtime},1);
my $txt20 = $R::txt20 || $ctt->{txt20} || "";#Leistungsdatum
my $int05 = $R::int05 || $ctt->{int05} || "";#manuell
my $rows = 0;
my @tpl_order = ();
my $cttpos = { c_id => 0 };
my $ctf = { c_id => 0 };
my $pref_cu = {
table => "contentuser",
fetch => "one",
c_id => $dbt->{shareedms_conf}->{parent_id},
};
$ctf = $dbt->fetch_tablerecord($dbh,$pref_cu);
my $ctf_operator = { c_id => 0 };
my $pref_cuop = {
table => "contentuser",
fetch => "one",
c_id => 2,
};
$ctf_operator = $dbt->fetch_tablerecord($dbh,$pref_cuop);
#take original operator accounting c_id to collect related invoices
if($ctt->{template_id} != 208){#not equal Abrechnung
my $pref = {
table => "contenttrans",
fetch => "one",
barcode => $ctt->{barcode},
txt00 => "Abrechnung",
};
my $ctt_accounting = $dbt->fetch_record($dbh,$pref);
($cttpos,$rows) = $dbt->collect_contenttrans($dbh,$ctt_accounting->{content_id});
#int9x are not in db
@tpl_order = ("c_id=ID","int01=Summe Einzug","state=Zahlungsart","int93=TeilRad Gebühren","int98=TeilRad Gebühren 19%","int100=Summe");
if($varenv{dbname} eq "sharee_sx"){
@tpl_order = ("c_id=ID","int01=Summe Einzug","state=Zahlungsart","int93=TeilRad Gebühren","int98=TeilRad Gebühren 19%","int94=TeilRad Disagio","int99=TeilRad Disagio 19%","int100=Summe");
}
}
#default to Abrechnung
else{
($cttpos,$rows) = $dbt->collect_contenttrans($dbh,$ctt->{content_id});
#int9x are not in db
@tpl_order = ("c_id=ID","int01=Summe Einzug","state=Zahlungsart","int93=TeilRad Gebühren","int98=TeilRad Gebühren 19%","int94=payone Disagio","int95=payone Transaktion","int96=payone Zahlungsmeldung","int97=payone Kreditkarte Zuordnung","int02=Summe Gutschrift");
if($varenv{dbname} eq "sharee_sx"){
@tpl_order = ("c_id=ID","int01=Summe Einzug","state=Zahlungsart","int93=TeilRad Gebühren","int98=TeilRad Gebühren 19%","int94=TeilRad Disagio","int99=TeilRad Disagio 19%","int02=Summe Gutschrift");
}
}
my $tplf = $dbt->get_tpl($dbh,201);#Kunden-Faktura, ex Firma
my @tplf_order = split /,/,$tplf->{tpl_order};
print $q->start_table({-class=>'list', -border=>'0', -width=>'100%',-align=>'left', -cellpadding=>'3', -cellspacing=>'0'}),"\n";
print $q->hidden(-name=>'offset', -override=>'1', -value=>"$R::offset"),"\n" if($R::offset);
print $q->hidden(-name=>'limit', -override=>'1', -value=>"$R::limit"),"\n" if($R::limit);
print $q->hidden(-name=>'c_id4trans', -override=>'1', -value=>"$ctt->{content_id}"),"\n";
print $q->hidden(-name=>'tpl_id4trans', -override=>'1', -value=>"$ctt->{template_id}"),"\n";
$line_count2++;
print $q->Tr(),"\n";
#print $q->th("Pos."),"\n";
foreach (@tpl_order){
my ($key,$val) = split /=/,$_;
$tc++ if($val);
$val .= " ($key)" if($users_dms->{u_id} eq $varenv{superu_id});
print $q->th("$val"),"\n";
}
print $q->start_form(-name=>'transposform'),"\n";
my $sum_operatorcredit=0;
my $sum_payonecapture=0;
my $sum_parts19=0;
my $diff19 = 100 + 19;
my $sum_umst19=0;
my $i=0;
my $accounting_start = "";
my $accounting_end = "";
foreach my $id (sort { $cttpos->{$b}->{c_id} <=> $cttpos->{$a}->{c_id} } keys(%$cttpos)){
my $oac = $pri->operator_accounting2calc(\%varenv,$cttpos->{$id},$ctf_operator);
$sum_operatorcredit += $oac->{int02};#Abrechnung Gutschrift
$sum_parts19 += $oac->{int100};#Operator Rechnung (TeilRad Gebühren + Disagio incl. 19%)
$oac->{int01} = sprintf('%.2f', $oac->{int01});
if(1==1){
$i++;
$line_count2++;
#FIXME
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 "$cttpos->{$id}->{pay_time} xxxx $accounting_start - $accounting_end
";
print $q->Tr(),"\n";
#print $q->td({-class=>'tdint'},"$i"),"\n";
foreach (@tpl_order){
my ($key,$val) = split /=/,$_;
$cttpos->{$id}->{$key} = $q->unescapeHTML($cttpos->{$id}->{$key});
my $txtstyle = "text-align:left;min-width:100px;";
if($key =~ /int\d+/){
$txtstyle = "text-align:right;min-width:50px;";
}
if(1==1){
if($key =~ /ct_name/){
#print $q->td({-class=>'tdtxt'},"\# $cttpos->{$id}->{$key} $cttpos->{$id}->{txt01}"),"\n";
print $q->td({-class=>'tdtxt'},"\# $cttpos->{$id}->{$key}"),"\n";
}
elsif($key =~ /c_id/){
print $q->td({-class=>'tdint'},"$cttpos->{$id}->{$key}"),"\n";
}
elsif($key =~ /int/){
$oac->{$key} =~ s/\./,/;
print $q->td({-class=>'tdint',-nowrap=>1},"$oac->{$key} €"),"\n";
}
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";
}
}
}
}
}#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);
$sum_paid = sprintf('%.2f', $sum_paid);
$sum_paid =~ s/\./,/;
$sum_parts19 = sprintf('%.2f', $sum_parts19);
$sum_umst19 = sprintf('%.2f', $sum_umst19);
$sum_umst19 =~ s/\./,/;
$sum_operatorcredit = $pri->round($sum_operatorcredit);
$sum_operatorcredit = sprintf('%.2f', $sum_operatorcredit);
$sum_operatorcredit =~ 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 $cs = $tc - 3;
print "