398 lines
16 KiB
PHP
398 lines
16 KiB
PHP
<?php
|
|
/**
|
|
* Umsatzsteuer-Voranmeldung (UStVA)
|
|
* Mit ELSTER/WISO Kennzahlen
|
|
*
|
|
* @package steuer
|
|
*/
|
|
|
|
// Load Dolibarr environment
|
|
$res = 0;
|
|
if (!$res && !empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) {
|
|
$res = @include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php";
|
|
}
|
|
$tmp = empty($_SERVER['SCRIPT_FILENAME']) ? '' : $_SERVER['SCRIPT_FILENAME'];
|
|
$tmp2 = realpath(__FILE__);
|
|
$i = strlen($tmp) - 1;
|
|
$j = strlen($tmp2) - 1;
|
|
while ($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i] == $tmp2[$j]) {
|
|
$i--;
|
|
$j--;
|
|
}
|
|
if (!$res && $i > 0 && file_exists(substr($tmp, 0, ($i + 1))."/main.inc.php")) {
|
|
$res = @include substr($tmp, 0, ($i + 1))."/main.inc.php";
|
|
}
|
|
if (!$res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php")) {
|
|
$res = @include dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php";
|
|
}
|
|
if (!$res && file_exists("../main.inc.php")) {
|
|
$res = @include "../main.inc.php";
|
|
}
|
|
if (!$res && file_exists("../../main.inc.php")) {
|
|
$res = @include "../../main.inc.php";
|
|
}
|
|
if (!$res && file_exists("../../../main.inc.php")) {
|
|
$res = @include "../../../main.inc.php";
|
|
}
|
|
if (!$res) {
|
|
die("Include of main fails");
|
|
}
|
|
|
|
require_once DOL_DOCUMENT_ROOT.'/core/class/html.form.class.php';
|
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
|
dol_include_once('/steuer/class/euer.class.php');
|
|
|
|
$langs->loadLangs(array("steuer@steuer", "bills", "compta"));
|
|
|
|
$jahr = GETPOSTINT('jahr');
|
|
if (empty($jahr)) {
|
|
$jahr = date('Y');
|
|
}
|
|
$ansicht = GETPOST('ansicht', 'alpha');
|
|
if (empty($ansicht)) {
|
|
$ansicht = 'monat';
|
|
}
|
|
$monat = GETPOSTINT('monat');
|
|
if (empty($monat)) {
|
|
$monat = date('n');
|
|
}
|
|
|
|
/*
|
|
* View
|
|
*/
|
|
|
|
$form = new Form($db);
|
|
$euer = new EUeR($db);
|
|
|
|
llxHeader('', $langs->trans("UStVA"), '', '', 0, 0, '', '', '', 'mod-steuer page-ustva');
|
|
|
|
print load_fiche_titre($langs->trans("UStVA")." ".$jahr, '', 'fa-percent');
|
|
|
|
// Filter
|
|
print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';
|
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
|
print '<div class="inline-block marginrightonly">';
|
|
print '<select name="jahr" class="flat">';
|
|
for ($y = date('Y'); $y >= date('Y') - 5; $y--) {
|
|
print '<option value="'.$y.'"'.($y == $jahr ? ' selected' : '').'>'.$y.'</option>';
|
|
}
|
|
print '</select>';
|
|
print ' ';
|
|
print '<select name="ansicht" class="flat">';
|
|
print '<option value="monat"'.($ansicht == 'monat' ? ' selected' : '').'>'.$langs->trans("Monthly").'</option>';
|
|
print '<option value="quartal"'.($ansicht == 'quartal' ? ' selected' : '').'>'.$langs->trans("Quarterly").'</option>';
|
|
print '</select>';
|
|
print ' ';
|
|
print '<select name="monat" class="flat">';
|
|
for ($m = 1; $m <= 12; $m++) {
|
|
print '<option value="'.$m.'"'.($m == $monat ? ' selected' : '').'>'.dol_print_date(mktime(0, 0, 0, $m, 1, 2000), '%B').'</option>';
|
|
}
|
|
print '</select>';
|
|
print ' <input type="submit" class="button" value="'.$langs->trans("Refresh").'">';
|
|
print '</div>';
|
|
print '</form>';
|
|
|
|
print '<br>';
|
|
|
|
// ============================================================================
|
|
// ELSTER FORMULAR - Für manuellen Übertrag
|
|
// ============================================================================
|
|
print '<h2>ELSTER/WISO Formular - '.dol_print_date(mktime(0, 0, 0, $monat, 1, $jahr), '%B %Y').'</h2>';
|
|
|
|
// Daten für gewählten Monat berechnen
|
|
$euer->berechneAusDolibarr($jahr, $monat, $monat);
|
|
|
|
// Berechne Werte für UStVA
|
|
$kz81 = 0; // Bemessungsgrundlage 19%
|
|
$kz81_steuer = 0; // Steuer darauf
|
|
$kz86 = 0; // Bemessungsgrundlage 7%
|
|
$kz86_steuer = 0; // Steuer darauf
|
|
$kz66 = $euer->vst_summe; // Vorsteuer
|
|
|
|
// Einnahmen nach USt-Satz aufteilen
|
|
foreach ($euer->einnahmen as $einnahme) {
|
|
$ust_satz = isset($einnahme['ust_satz']) ? $einnahme['ust_satz'] : 19;
|
|
if ($ust_satz == 19) {
|
|
$kz81 += $einnahme['netto'];
|
|
$kz81_steuer += isset($einnahme['ust']) ? $einnahme['ust'] : ($einnahme['netto'] * 0.19);
|
|
} elseif ($ust_satz == 7) {
|
|
$kz86 += $einnahme['netto'];
|
|
$kz86_steuer += isset($einnahme['ust']) ? $einnahme['ust'] : ($einnahme['netto'] * 0.07);
|
|
}
|
|
}
|
|
|
|
// Zahllast berechnen
|
|
$ust_gesamt = $kz81_steuer + $kz86_steuer;
|
|
$zahllast = $ust_gesamt - $kz66;
|
|
|
|
print '<div class="div-table-responsive">';
|
|
print '<table class="noborder centpercent">';
|
|
|
|
// Header
|
|
print '<tr class="liste_titre">';
|
|
print '<th style="width:100px;">ELSTER Kz</th>';
|
|
print '<th style="width:100px;">WISO Feld</th>';
|
|
print '<th>Bezeichnung</th>';
|
|
print '<th class="right" style="width:150px;">Bemessungsgrundl.</th>';
|
|
print '<th class="right" style="width:150px;">Steuer</th>';
|
|
print '</tr>';
|
|
|
|
// Abschnitt: Lieferungen und sonstige Leistungen
|
|
print '<tr class="liste_titre"><td colspan="5"><strong>Lieferungen und sonstige Leistungen (steuerpflichtige Umsätze)</strong></td></tr>';
|
|
|
|
// Kz 81 - 19% Umsätze
|
|
print '<tr class="oddeven">';
|
|
print '<td><span class="badge badge-status4" style="font-size:14px;"><strong>Kz 81</strong></span></td>';
|
|
print '<td><span class="badge badge-status1">Zeile 28</span></td>';
|
|
print '<td>Steuerpflichtige Umsätze zum Steuersatz von <strong>19%</strong></td>';
|
|
print '<td class="right amount"><strong>'.price(round($kz81), 0, $langs, 1, 0, 0).'</strong> EUR</td>';
|
|
print '<td class="right amount">'.price($kz81_steuer, 0, $langs, 1, 2, 2).' EUR</td>';
|
|
print '</tr>';
|
|
|
|
// Kz 86 - 7% Umsätze
|
|
print '<tr class="oddeven">';
|
|
print '<td><span class="badge badge-status4" style="font-size:14px;"><strong>Kz 86</strong></span></td>';
|
|
print '<td><span class="badge badge-status1">Zeile 29</span></td>';
|
|
print '<td>Steuerpflichtige Umsätze zum Steuersatz von <strong>7%</strong></td>';
|
|
print '<td class="right amount"><strong>'.price(round($kz86), 0, $langs, 1, 0, 0).'</strong> EUR</td>';
|
|
print '<td class="right amount">'.price($kz86_steuer, 0, $langs, 1, 2, 2).' EUR</td>';
|
|
print '</tr>';
|
|
|
|
// Weitere wichtige Kennzahlen (leer, aber für Vollständigkeit)
|
|
print '<tr class="oddeven opacitymedium">';
|
|
print '<td><span class="badge badge-secondary">Kz 35</span></td>';
|
|
print '<td><span class="badge badge-secondary">Zeile 30</span></td>';
|
|
print '<td>Umsätze zu anderen Steuersätzen</td>';
|
|
print '<td class="right">0 EUR</td>';
|
|
print '<td class="right">-</td>';
|
|
print '</tr>';
|
|
|
|
// Steuerfreie Umsätze
|
|
print '<tr class="liste_titre"><td colspan="5"><strong>Steuerfreie Umsätze</strong></td></tr>';
|
|
|
|
print '<tr class="oddeven opacitymedium">';
|
|
print '<td><span class="badge badge-secondary">Kz 41</span></td>';
|
|
print '<td><span class="badge badge-secondary">Zeile 20</span></td>';
|
|
print '<td>Innergemeinschaftliche Lieferungen (§ 4 Nr. 1b UStG)</td>';
|
|
print '<td class="right">0 EUR</td>';
|
|
print '<td class="right">-</td>';
|
|
print '</tr>';
|
|
|
|
print '<tr class="oddeven opacitymedium">';
|
|
print '<td><span class="badge badge-secondary">Kz 44</span></td>';
|
|
print '<td><span class="badge badge-secondary">Zeile 21</span></td>';
|
|
print '<td>Steuerfreie Ausfuhrlieferungen (§ 4 Nr. 1a UStG)</td>';
|
|
print '<td class="right">0 EUR</td>';
|
|
print '<td class="right">-</td>';
|
|
print '</tr>';
|
|
|
|
// Abziehbare Vorsteuerbeträge
|
|
print '<tr class="liste_titre"><td colspan="5"><strong>Abziehbare Vorsteuerbeträge</strong></td></tr>';
|
|
|
|
// Kz 66 - Vorsteuer
|
|
print '<tr class="oddeven">';
|
|
print '<td><span class="badge badge-status4" style="font-size:14px;"><strong>Kz 66</strong></span></td>';
|
|
print '<td><span class="badge badge-status1">Zeile 55</span></td>';
|
|
print '<td>Vorsteuerbeträge aus Rechnungen von anderen Unternehmern</td>';
|
|
print '<td class="right">-</td>';
|
|
print '<td class="right amount"><strong>'.price($kz66, 0, $langs, 1, 2, 2).'</strong> EUR</td>';
|
|
print '</tr>';
|
|
|
|
print '<tr class="oddeven opacitymedium">';
|
|
print '<td><span class="badge badge-secondary">Kz 61</span></td>';
|
|
print '<td><span class="badge badge-secondary">Zeile 56</span></td>';
|
|
print '<td>Vorsteuerbeträge aus innergemeinschaftlichem Erwerb</td>';
|
|
print '<td class="right">-</td>';
|
|
print '<td class="right">0,00 EUR</td>';
|
|
print '</tr>';
|
|
|
|
print '<tr class="oddeven opacitymedium">';
|
|
print '<td><span class="badge badge-secondary">Kz 67</span></td>';
|
|
print '<td><span class="badge badge-secondary">Zeile 57</span></td>';
|
|
print '<td>Vorsteuerbeträge nach § 13b UStG (Reverse Charge)</td>';
|
|
print '<td class="right">-</td>';
|
|
print '<td class="right">0,00 EUR</td>';
|
|
print '</tr>';
|
|
|
|
// Berechnung
|
|
print '<tr class="liste_titre"><td colspan="5"><strong>Berechnung der Umsatzsteuer</strong></td></tr>';
|
|
|
|
print '<tr class="oddeven">';
|
|
print '<td colspan="2"></td>';
|
|
print '<td>Summe Umsatzsteuer (Kz 81 + Kz 86)</td>';
|
|
print '<td class="right">-</td>';
|
|
print '<td class="right amount">'.price($ust_gesamt, 0, $langs, 1, 2, 2).' EUR</td>';
|
|
print '</tr>';
|
|
|
|
print '<tr class="oddeven">';
|
|
print '<td colspan="2"></td>';
|
|
print '<td>./. Vorsteuer (Kz 66)</td>';
|
|
print '<td class="right">-</td>';
|
|
print '<td class="right amount">- '.price($kz66, 0, $langs, 1, 2, 2).' EUR</td>';
|
|
print '</tr>';
|
|
|
|
// Zahllast / Erstattung
|
|
print '<tr class="liste_total">';
|
|
print '<td><span class="badge badge-status'.($zahllast >= 0 ? '1' : '4').'" style="font-size:14px;"><strong>Kz 83</strong></span></td>';
|
|
print '<td><span class="badge badge-status1">Zeile 65</span></td>';
|
|
print '<td><strong>'.($zahllast >= 0 ? 'Verbleibende Umsatzsteuer-Vorauszahlung' : 'Verbleibender Überschuss (Erstattung)').'</strong></td>';
|
|
print '<td class="right">-</td>';
|
|
$color = $zahllast >= 0 ? '' : 'amountremaintopay';
|
|
print '<td class="right amount '.$color.'"><strong>'.price(abs($zahllast), 0, $langs, 1, 2, 2).' EUR</strong></td>';
|
|
print '</tr>';
|
|
|
|
print '</table>';
|
|
print '</div>';
|
|
|
|
// ============================================================================
|
|
// Jahresübersicht
|
|
// ============================================================================
|
|
print '<br><h2>Jahresübersicht '.$jahr.'</h2>';
|
|
|
|
print '<div class="div-table-responsive">';
|
|
print '<table class="noborder centpercent">';
|
|
|
|
// Header
|
|
print '<tr class="liste_titre">';
|
|
print '<th>'.$langs->trans("Period").'</th>';
|
|
print '<th class="center">Kz 81<br><small>Umsätze 19%</small></th>';
|
|
print '<th class="center">Kz 86<br><small>Umsätze 7%</small></th>';
|
|
print '<th class="center">USt<br><small>Steuer</small></th>';
|
|
print '<th class="center">Kz 66<br><small>Vorsteuer</small></th>';
|
|
print '<th class="center">Kz 83<br><small>Zahllast</small></th>';
|
|
print '</tr>';
|
|
|
|
$total_kz81 = 0;
|
|
$total_kz86 = 0;
|
|
$total_ust = 0;
|
|
$total_vst = 0;
|
|
$total_zahllast = 0;
|
|
|
|
if ($ansicht == 'quartal') {
|
|
$perioden = array(
|
|
'Q1' => array(1, 3),
|
|
'Q2' => array(4, 6),
|
|
'Q3' => array(7, 9),
|
|
'Q4' => array(10, 12)
|
|
);
|
|
} else {
|
|
$perioden = array();
|
|
for ($m = 1; $m <= 12; $m++) {
|
|
$perioden[sprintf('%02d', $m)] = array($m, $m);
|
|
}
|
|
}
|
|
|
|
foreach ($perioden as $key => $range) {
|
|
$euer->berechneAusDolibarr($jahr, $range[0], $range[1]);
|
|
|
|
$p_kz81 = 0;
|
|
$p_kz86 = 0;
|
|
$p_ust = 0;
|
|
$p_vst = $euer->vst_summe;
|
|
|
|
foreach ($euer->einnahmen as $einnahme) {
|
|
$ust_satz = isset($einnahme['ust_satz']) ? $einnahme['ust_satz'] : 19;
|
|
if ($ust_satz == 19) {
|
|
$p_kz81 += $einnahme['netto'];
|
|
$p_ust += isset($einnahme['ust']) ? $einnahme['ust'] : ($einnahme['netto'] * 0.19);
|
|
} elseif ($ust_satz == 7) {
|
|
$p_kz86 += $einnahme['netto'];
|
|
$p_ust += isset($einnahme['ust']) ? $einnahme['ust'] : ($einnahme['netto'] * 0.07);
|
|
}
|
|
}
|
|
|
|
$p_zahllast = $p_ust - $p_vst;
|
|
|
|
$total_kz81 += $p_kz81;
|
|
$total_kz86 += $p_kz86;
|
|
$total_ust += $p_ust;
|
|
$total_vst += $p_vst;
|
|
$total_zahllast += $p_zahllast;
|
|
|
|
if ($ansicht == 'quartal') {
|
|
$periode_name = $key.' '.$jahr;
|
|
} else {
|
|
$periode_name = dol_print_date(mktime(0, 0, 0, (int)$key, 1, $jahr), '%B');
|
|
}
|
|
|
|
$is_current = ($ansicht != 'quartal' && (int)$key == $monat);
|
|
$row_class = $is_current ? 'liste_titre' : 'oddeven';
|
|
|
|
print '<tr class="'.$row_class.'">';
|
|
print '<td>'.($is_current ? '<strong>' : '').$periode_name.($is_current ? ' (oben)</strong>' : '').'</td>';
|
|
print '<td class="right">'.price(round($p_kz81), 0, $langs, 1, 0, 0).'</td>';
|
|
print '<td class="right">'.price(round($p_kz86), 0, $langs, 1, 0, 0).'</td>';
|
|
print '<td class="right">'.price($p_ust, 0, $langs, 1, 2, 2).'</td>';
|
|
print '<td class="right">'.price($p_vst, 0, $langs, 1, 2, 2).'</td>';
|
|
$color = $p_zahllast >= 0 ? '' : 'amountremaintopay';
|
|
print '<td class="right amount '.$color.'"><strong>'.price($p_zahllast, 0, $langs, 1, 2, 2).'</strong></td>';
|
|
print '</tr>';
|
|
}
|
|
|
|
// Summenzeile
|
|
print '<tr class="liste_total">';
|
|
print '<td><strong>Gesamt '.$jahr.'</strong></td>';
|
|
print '<td class="right"><strong>'.price(round($total_kz81), 0, $langs, 1, 0, 0).'</strong></td>';
|
|
print '<td class="right"><strong>'.price(round($total_kz86), 0, $langs, 1, 0, 0).'</strong></td>';
|
|
print '<td class="right"><strong>'.price($total_ust, 0, $langs, 1, 2, 2).'</strong></td>';
|
|
print '<td class="right"><strong>'.price($total_vst, 0, $langs, 1, 2, 2).'</strong></td>';
|
|
$color = $total_zahllast >= 0 ? 'amountpaymentcomplete' : 'amountremaintopay';
|
|
print '<td class="right amount '.$color.'"><strong>'.price($total_zahllast, 0, $langs, 1, 2, 2).'</strong></td>';
|
|
print '</tr>';
|
|
|
|
print '</table>';
|
|
print '</div>';
|
|
|
|
// ============================================================================
|
|
// Legende
|
|
// ============================================================================
|
|
print '<br>';
|
|
print '<div class="fichecenter">';
|
|
print '<div class="fichethirdleft">';
|
|
|
|
print '<table class="noborder centpercent">';
|
|
print '<tr class="liste_titre"><th colspan="2">ELSTER Kennzahlen</th></tr>';
|
|
print '<tr class="oddeven"><td><span class="badge badge-status4">Kz 81</span></td><td>Bemessungsgrundlage für Umsätze zum Steuersatz von 19%</td></tr>';
|
|
print '<tr class="oddeven"><td><span class="badge badge-status4">Kz 86</span></td><td>Bemessungsgrundlage für Umsätze zum Steuersatz von 7%</td></tr>';
|
|
print '<tr class="oddeven"><td><span class="badge badge-status4">Kz 66</span></td><td>Vorsteuerbeträge aus Rechnungen von anderen Unternehmern</td></tr>';
|
|
print '<tr class="oddeven"><td><span class="badge badge-status4">Kz 83</span></td><td>Verbleibende Umsatzsteuer-Vorauszahlung / Überschuss</td></tr>';
|
|
print '<tr class="oddeven"><td><span class="badge badge-secondary">Kz 35</span></td><td>Umsätze zu anderen Steuersätzen (z.B. 16%, 5%)</td></tr>';
|
|
print '<tr class="oddeven"><td><span class="badge badge-secondary">Kz 41</span></td><td>Innergemeinschaftliche Lieferungen</td></tr>';
|
|
print '<tr class="oddeven"><td><span class="badge badge-secondary">Kz 44</span></td><td>Steuerfreie Ausfuhrlieferungen</td></tr>';
|
|
print '</table>';
|
|
|
|
print '</div>';
|
|
print '<div class="fichetwothirdright">';
|
|
|
|
print '<table class="noborder centpercent">';
|
|
print '<tr class="liste_titre"><th colspan="2">WISO Steuer Zuordnung</th></tr>';
|
|
print '<tr class="oddeven"><td><span class="badge badge-status1">Zeile 28</span></td><td>= ELSTER Kz 81 (19% Umsätze)</td></tr>';
|
|
print '<tr class="oddeven"><td><span class="badge badge-status1">Zeile 29</span></td><td>= ELSTER Kz 86 (7% Umsätze)</td></tr>';
|
|
print '<tr class="oddeven"><td><span class="badge badge-status1">Zeile 55</span></td><td>= ELSTER Kz 66 (Vorsteuer)</td></tr>';
|
|
print '<tr class="oddeven"><td><span class="badge badge-status1">Zeile 65</span></td><td>= ELSTER Kz 83 (Zahllast)</td></tr>';
|
|
print '<tr class="oddeven"><td colspan="2" class="opacitymedium"><small>Die WISO Zeilennummern können je nach Version abweichen. Orientieren Sie sich an den ELSTER-Kennzahlen.</small></td></tr>';
|
|
print '</table>';
|
|
|
|
print '</div>';
|
|
print '</div>';
|
|
|
|
print '<div class="clearboth"></div>';
|
|
|
|
// Hinweis
|
|
print '<br>';
|
|
print '<div class="warning">';
|
|
print '<strong>Hinweis zur Übertragung:</strong><br>';
|
|
print '1. In ELSTER/WISO tragen Sie die <strong>Bemessungsgrundlagen</strong> (Netto-Beträge) in die Felder Kz 81 und Kz 86 ein<br>';
|
|
print '2. Die Steuer wird automatisch berechnet<br>';
|
|
print '3. Die <strong>Vorsteuer</strong> (Kz 66) ist der Gesamtbetrag der abziehbaren Vorsteuer<br>';
|
|
print '4. Die Kennzahlen sind identisch für ELSTER und WISO Steuer<br>';
|
|
print '</div>';
|
|
|
|
// Zurück-Button
|
|
print '<br>';
|
|
print '<div class="tabsAction">';
|
|
print '<a class="butAction" href="'.dol_buildpath('/steuer/steuerindex.php', 1).'"><i class="fa fa-arrow-left paddingright"></i>'.$langs->trans("Back").'</a>';
|
|
print '</div>';
|
|
|
|
llxFooter();
|
|
$db->close();
|