Invoice optival change & Voicenumber billing fix

This commit is contained in:
Frank Schubert
2024-07-07 14:57:41 +02:00
parent 564d5c53b5
commit 02d50ab835
6 changed files with 141 additions and 120 deletions

View File

@@ -18,7 +18,7 @@ $this->setReturnValue(['filename' => $invoice->invoice_number . ".pdf"]);
<html>
<head>
<title>Rechnung</title>
<meta charset="utf-8"/>
<meta charset="utf-8" />
<!-- <link href="-->
<?php //= self::getResourcePath() ?><!--assets/css/bootstrap.min.css" rel="stylesheet" type="text/css" />-->
@@ -26,7 +26,7 @@ $this->setReturnValue(['filename' => $invoice->invoice_number . ".pdf"]);
body {
margin-top: 0;
/*padding-top: 20pt;*/
font-family: sans-serif, Verdana;
font-family: "Open Sans", sans-serif, Verdana;
font-size: 12px;
}
@@ -35,7 +35,7 @@ $this->setReturnValue(['filename' => $invoice->invoice_number . ".pdf"]);
}
.uneven {
background-color: #e1e1e1;
background-color: #ebebeb;
}
@@ -66,6 +66,15 @@ $this->setReturnValue(['filename' => $invoice->invoice_number . ".pdf"]);
font-size: 11px;
}
tr.position td {
vertical-align: top;
}
tr.position td:first-child {
vertical-align: middle !important;
padding-left: 2pt;
}
#invoiceTable tr td:first-child {
max-width: 200pt;
}
@@ -77,21 +86,22 @@ $this->setReturnValue(['filename' => $invoice->invoice_number . ".pdf"]);
<body>
<div>
<h2 style="text-align: center;color: #005384">Ihre Xinon Rechnung vom <?=date("d.m.Y",$invoice->invoice_date)?></h2>
<h2 style="text-align: center;color: #005384">Ihre Xinon <?=($is_credit) ? "Gutschrift" : "Rechnung"?> vom <?=date("d.m.Y",$invoice->invoice_date)?></h2>
<table style="border-collapse: collapse; width: 100%;" id="invoiceTable">
<tr style="font-weight: bold; border-bottom: 1px solid black;" class="uneven">
<th style="text-align: center">Dienstleistung</th>
<th style="text-align: center">Zeitraum</th>
<th style="text-align: center">Preis</th>
<th style="text-align: right">Preis</th>
<th style="text-align: center;">Menge</th>
<th style="text-align: center">Netto €</th>
<th style="text-align: center">Ust. %</th>
<th style="text-align: center;">Brutto €</th>
<th style="text-align: right">Netto €</th>
<th style="text-align: right">Ust. %</th>
<th style="text-align: right; padding-right: 4pt">Brutto €</th>
</tr>
<?php
$i = 0;
foreach($invoice->positions as $p):
$timerange_month_only = $p->getOption('timerange_month_only');
$start_date = new DateTime($p->start_date);
$end_date = new DateTime($p->end_date);
$amount = (float) number_format($p->amount, 3, ",", ".");
@@ -102,140 +112,117 @@ $this->setReturnValue(['filename' => $invoice->invoice_number . ".pdf"]);
?>
<tr class="<?=($i%2 == 0) ? "even" : "uneven" ?>">
<td><?=$p->product_name?></td>
<tr class="position <?=($i%2 == 0) ? "even" : "uneven" ?>">
<td>
<?=$p->product_name?>
<?php if($p->matchcode): ?>
<div style="padding-left: 12pt"><?=$p->matchcode?></div>
<?php endif; ?>
</td>
<td style="text-align: center;">
<?= $p->billing_period > 1 ?
$start_date->format("m.Y") . " - " . $end_date->format("m.Y") :
$start_date->format("d.m.Y") . " - " . $end_date->format("d.m.Y")
?>
<?php if($timerange_month_only): ?>
<?=$start_date->format("m.Y")?>
<?php elseif($p->billing_period > 1): ?>
<?=$start_date->format("m.Y")?> - <?=$end_date->format("m.Y") ?>
<?php else: ?>
<?php if($start_date->format("d.m.Y") == $end_date->format("d.m.Y")): ?>
<?=$start_date->format("d.m.Y")?>
<?php else: ?>
<?=$start_date->format("d.m.Y")?> - <?=$end_date->format("d.m.Y") ?>
<?php endif; ?>
<?php endif; ?>
</td>
<td><?=$price?> €</td>
<td style="text-align: center"><?=$amount?></td>
<td><?=$price_total?> €</td>
<td style="text-align: right;"><?=$vatrate?>%</td>
<td><?=$price_gross?> €</td>
<td style="padding-right: 2pt;"><?=$price_gross?> €</td>
</tr>
<?php if($p->matchcode): ?>
<tr class="additionalRow <?=($i%2 == 0) ? "even" : "uneven" ?>">
<!--tr class="additionalRow <?=($i%2 == 0) ? "even" : "uneven" ?>">
<td colspan="7"><?=$p->matchcode?></td>
</tr>
</tr-->
<?php endif;
$i++;
endforeach;
?>
<tr style="font-weight: bold; background-color: #e1e1e1; border-bottom: 1px solid black;border-top: 1px solid black">
<tr style="font-weight: bold; background-color: #ebebeb; border-bottom: 1px solid black;border-top: 1px solid black">
<td colspan="5">Gesamt Netto:</td>
<td colspan="2" style="text-align: right;"><?=number_format($net_total, 2, ",","."). " €"?></td>
<td colspan="2" style="text-align: right; padding-right: 2pt;"><?=number_format($net_total, 2, ",","."). " €"?></td>
</tr>
<?php foreach ($vat as $rate => $vat_total): ?>
<?php if($vat_total > 0): ?>
<?php if($rate > 0): ?>
<tr style="font-size: 11px;border-bottom: 1px solid black;">
<td colspan="5">USt. <?=$rate?>%:</td>
<td colspan="2" style="text-align: right"><?=number_format($vat_total, 2, ",","."). " €"?></td>
<td colspan="2" style="text-align: right; padding-right: 2pt;"><?=number_format($vat_total, 2, ",","."). " €"?></td>
</tr>
<?php endif; ?>
<?php endforeach; ?>
<!-- double underline border on bottom -->
<tr style="font-weight: bold; border-bottom: 3px double black; background-color: #e1e1e1;">
<tr style="font-weight: bold; border-bottom: 3px double black; background-color: #ebebeb;">
<td colspan="5">Gesamt Brutto:</td>
<td colspan="2" style="text-align: right"><?=number_format($gross_total, 2, ",","."). " €"?></td>
<td colspan="2" style="text-align: right; padding-right: 2pt;"><?=number_format($gross_total, 2, ",","."). " €"?></td>
</tr>
</table>
<!-- TODO: ADD CALL DETAIL SECTION-->
<!--
<div style="margin-top: 20pt;">
<h3 style="color: #005384;margin-bottom: 0">Zusammenfassung für 0800 / 498748</h3>
<div style="margin-bottom: 16px">(01.01.2021 - 31.01.2021)</div>
<table style="border-collapse: collapse; width: 100%;">
<tr style="text-align: left;" class="uneven">
<th>Ziel</th>
<th>Preis pro Minute</th>
<th>Dauer</th>
<th style="text-align: right">Netto €</th>
<th style="text-align: right">Brutto €</th>
</tr>
<tr>
<td>Österreich Festnetz</td>
<td>0,05 €</td>
<td>01:40:00</td>
<td style="text-align: right">5,00 €</td>
<td>6,00 €</td>
</tr>
<tr class="uneven">
<td>Österreich Festnetz</td>
<td>0,05 €</td>
<td>01:40:00</td>
<td style="text-align: right">5,00 €</td>
<td>6,00 €</td>
</tr>
<tr>
<td>Österreich Festnetz</td>
<td>0,05 €</td>
<td>01:40:00</td>
<td style="text-align: right">5,00 €</td>
<td>6,00 €</td>
</tr>
<tr class="uneven">
<td>Österreich Festnetz</td>
<td>0,05 €</td>
<td>01:40:00</td>
<td style="text-align: right">5,00 €</td>
<td>6,00 €</td>
</tr>
</table>
</div>
<div style="margin-top: 20pt;">
<h3 style="color: #005384;margin-bottom: 0">Zusammenfassung für 0800 / 498748</h3>
<div style="margin-bottom: 16px">(01.01.2021 - 31.01.2021)</div>
<table style="border-collapse: collapse; width: 100%;">
<tr style="text-align: left;" class="uneven">
<th>Ziel</th>
<th>Preis pro Minute</th>
<th>Dauer</th>
<th style="text-align: right">Netto €</th>
<th style="text-align: right">Brutto €</th>
</tr>
<tr>
<td>Österreich Festnetz</td>
<td>0,05 €</td>
<td>01:40:00</td>
<td style="text-align: right">5,00 €</td>
<td>6,00 €</td>
</tr>
<tr class="uneven">
<td>Österreich Festnetz</td>
<td>0,05 €</td>
<td>01:40:00</td>
<td style="text-align: right">5,00 €</td>
<td>6,00 €</td>
</tr>
<tr>
<td>Österreich Festnetz</td>
<td>0,05 €</td>
<td>01:40:00</td>
<td style="text-align: right">5,00 €</td>
<td>6,00 €</td>
</tr>
<tr class="uneven">
<td>Österreich Festnetz</td>
<td>0,05 €</td>
<td>01:40:00</td>
<td style="text-align: right">5,00 €</td>
<td>6,00 €</td>
</tr>
</table>
<?php if($invoice->tax_text): ?>
<p style="font-weight: bold;"><?=$invoice->tax_text?></p>
<?php endif; ?>
<?php if($is_credit): ?>
<p style="color: #FF0000; font-weight: bold">Gutschrift! Bitte nicht überweisen.</p>
<?php elseif($invoice->billing_type == "sepa"): ?>
<p style="color: #FF0000; font-weight: bold">BITTE NICHT EINZAHLEN, DER BETRAG WIRD AUTOMATISCH VON IHREM KONTO ABGEBUCHT !</p>
<?php else: ?>
Bitte <b>überweisen</b> Sie den Rechnungsbetrag bis zum <b><?=(new DateTime("@".$invoice->invoice_date))->modify("+14 days")->format("d.m.Y")?></b> auf folgendes Konto:<br />
<b style="padding-left: 4pt;">IBAN: <?=$bank_iban?></b><br />
<b style="padding-left: 4pt;">BIC: <?=$bank_bic?></b><br /><br />
Bitte geben Sie als Verwendungszweck unbedingt die Rechnungsnummer an, nur so können wir Ihre Zahlung eindeutig zuordnen
<?php endif; ?>
</div>
-->
<?php if(count($invoice->voicenumbers)): ?>
<?php foreach($invoice->voicenumbers as $voicenumber): ?>
<?php $start_date = new DateTime($voicenumber->start_date); ?>
<div style="margin-top: 20pt;">
<h3 style="color: #005384;margin-bottom: 0">Gesprächsgebühren für <?=preg_replace('/^43/','0', $voicenumber->voicenumber)?></h3>
<div style="margin-bottom: 16px">(<?=$start_date->format("m.Y")?>)</div>
<table style="border-collapse: collapse; width: 100%;">
<tr style="text-align: left;" class="uneven">
<th>Ziel</th>
<th style="text-align: right">Preis pro Minute</th>
<th style="text-align: right; padding-right: 8pt;">Anzahl</th>
<th style="text-align: right;">Dauer</th>
<th style="text-align: right">Netto €</th>
<th style="text-align: right">Brutto €</th>
</tr>
<?php $v = 0; ?>
<?php foreach($voicenumber->zones as $zone): ?>
<?php if($zone->price_total < 0.000000001) continue; ?>
<tr class="<?=($v%2 == 0) ? "even" : "uneven" ?>">
<td><?=$zone->zone?></td>
<td style="text-align: right"><?=number_format($zone->price * 60, 4, ",",".")?> €</td>
<td style="text-align: right; padding-right: 8pt;"><?=number_format($zone->call_count, 0, ",",".")?></td>
<td style="text-align: right"><?=self::getHumanReadableInterval($zone->duration)?></td>
<td style="text-align: right"><?=number_format($zone->price_total, 4, ",",".")?> €</td>
<td style="text-align: right"><?=$zone->price_total_gross?> €</td>
</tr>
<?php $v++; ?>
<?php endforeach; ?>
</table>
</div>
<?php endforeach; ?>
<?php endif; ?>
</body>
</html>