Fehler bereinigt läuft jetzt
This commit is contained in:
parent
562c69ef46
commit
206aeacbc5
10 changed files with 524 additions and 978 deletions
116
README.md
116
README.md
|
|
@ -95,6 +95,122 @@ Das Modul liest automatisch aus:
|
||||||
- Kz 66 → Vorsteuer
|
- Kz 66 → Vorsteuer
|
||||||
- Kz 83 → Zahllast/Erstattung
|
- Kz 83 → Zahllast/Erstattung
|
||||||
|
|
||||||
|
## Zusammensetzung der Buchungskonten in der EÜR
|
||||||
|
|
||||||
|
### Datenfluss und Tabellen
|
||||||
|
|
||||||
|
Das Modul verwendet das Zufluss-/Abflussprinzip (Ist-Versteuerung). Einnahmen und Ausgaben werden erst zum Zeitpunkt der Zahlung erfasst, nicht bei Rechnungsstellung.
|
||||||
|
|
||||||
|
#### Einnahmen (Kundenrechnungen)
|
||||||
|
|
||||||
|
```
|
||||||
|
llx_paiement (Zahlungsdatum: datep)
|
||||||
|
↓
|
||||||
|
llx_paiement_facture (Verknüpfung: fk_paiement → fk_facture, Zahlungsbetrag: amount)
|
||||||
|
↓
|
||||||
|
llx_facture (Rechnung: total_ht, total_tva, total_ttc, localtax1, tva_tx)
|
||||||
|
```
|
||||||
|
|
||||||
|
- **datep** aus `llx_paiement` = tatsächliches Zahlungsdatum
|
||||||
|
- **amount** aus `llx_paiement_facture` = gezahlter Betrag (kann Teilzahlung sein)
|
||||||
|
- Netto-Anteil wird berechnet: `zahlung * (total_ht / total_ttc)`
|
||||||
|
- USt-Anteil wird berechnet: `zahlung * (total_tva / total_ttc)`
|
||||||
|
|
||||||
|
#### Ausgaben (Lieferantenrechnungen)
|
||||||
|
|
||||||
|
```
|
||||||
|
llx_paiementfourn (Zahlungsdatum: datep)
|
||||||
|
↓
|
||||||
|
llx_paiementfourn_facturefourn (Verknüpfung: fk_paiementfourn → fk_facturefourn, Zahlungsbetrag: amount)
|
||||||
|
↓
|
||||||
|
llx_facture_fourn (Rechnung: total_ht, total_tva, total_ttc, localtax1, tva_tx)
|
||||||
|
```
|
||||||
|
|
||||||
|
- **datep** aus `llx_paiementfourn` = tatsächliches Zahlungsdatum
|
||||||
|
- **amount** aus `llx_paiementfourn_facturefourn` = gezahlter Betrag
|
||||||
|
- Netto-Anteil wird berechnet: `zahlung * (total_ht / total_ttc)`
|
||||||
|
- VSt-Anteil wird berechnet: `zahlung * (total_tva / total_ttc)`
|
||||||
|
|
||||||
|
#### Manuelle Buchungen
|
||||||
|
|
||||||
|
```
|
||||||
|
llx_steuer_buchung (datum, betrag_netto, betrag_ust, kategorie, fk_konto)
|
||||||
|
↓
|
||||||
|
llx_steuer_konto (kontonummer, bezeichnung, kategorie, euer_zeile, ust_kennzeichen)
|
||||||
|
```
|
||||||
|
|
||||||
|
### SKR03 Kontenzuordnung
|
||||||
|
|
||||||
|
Alle Konten sind dem SKR03-Kontenrahmen zugeordnet:
|
||||||
|
|
||||||
|
#### Einnahmen-Konten (8xxx)
|
||||||
|
| Konto | Bezeichnung | EÜR-Zeile | USt-Kz |
|
||||||
|
|-------|-------------|-----------|--------|
|
||||||
|
| 8400 | Erlöse 19% USt | 14 | 81 |
|
||||||
|
| 8300 | Erlöse 7% USt | 14 | 86 |
|
||||||
|
| 8100 | Steuerfreie Umsätze Inland | 10 | - |
|
||||||
|
| 8120 | Steuerfreie igL | 11 | 41 |
|
||||||
|
| 8150 | Steuerfreie Ausfuhrlieferungen | 12 | 44 |
|
||||||
|
| 8910 | Private Kfz-Nutzung | 19 | 81 |
|
||||||
|
|
||||||
|
#### Ausgaben-Konten (3xxx/4xxx)
|
||||||
|
| Konto | Bezeichnung | EÜR-Zeile | USt-Kz |
|
||||||
|
|-------|-------------|-----------|--------|
|
||||||
|
| 3400 | Wareneingang 19% VSt | 26 | 66 |
|
||||||
|
| 4100 | Löhne und Gehälter | 31 | - |
|
||||||
|
| 4200 | Raumkosten/Miete | 34 | 66 |
|
||||||
|
| 4500 | Fahrzeugkosten | 51 | 66 |
|
||||||
|
| 4820 | AfA Sachanlagen | 36 | - |
|
||||||
|
| 4900 | Rechts- und Beratungskosten | 50 | 66 |
|
||||||
|
|
||||||
|
### USt-Kennzahlen für UStVA/ELSTER
|
||||||
|
|
||||||
|
| Kennzahl | Bedeutung | Konten |
|
||||||
|
|----------|-----------|--------|
|
||||||
|
| 81 | Umsätze 19% | 8400, 8500, 8600, 8900, 8910, 8920 |
|
||||||
|
| 86 | Umsätze 7% | 8300 |
|
||||||
|
| 41 | Innergemeinschaftliche Lieferungen | 8120 |
|
||||||
|
| 44 | Ausfuhrlieferungen | 8150 |
|
||||||
|
| 66 | Vorsteuer | Alle Ausgaben mit VSt |
|
||||||
|
|
||||||
|
### Berechnung in der EÜR-Klasse
|
||||||
|
|
||||||
|
Die Klasse `EUeR` (class/euer.class.php) berechnet:
|
||||||
|
|
||||||
|
1. **Einnahmen** aus bezahlten Kundenrechnungen
|
||||||
|
- Filtert nach Zahlungsdatum im gewählten Zeitraum
|
||||||
|
- Berücksichtigt Teilzahlungen anteilig
|
||||||
|
- Gutschriften werden als negative Einnahmen erfasst
|
||||||
|
|
||||||
|
2. **Ausgaben** aus bezahlten Lieferantenrechnungen
|
||||||
|
- Filtert nach Zahlungsdatum im gewählten Zeitraum
|
||||||
|
- Berücksichtigt Teilzahlungen anteilig
|
||||||
|
|
||||||
|
3. **Manuelle Buchungen** aus llx_steuer_buchung
|
||||||
|
- Werden zusätzlich zu den automatischen Buchungen erfasst
|
||||||
|
- Für Belege außerhalb von Dolibarr (z.B. Barbelege)
|
||||||
|
|
||||||
|
4. **Gewinn/Verlust**
|
||||||
|
- Gewinn = Summe Einnahmen (netto) - Summe Ausgaben (netto)
|
||||||
|
|
||||||
|
### Beispiel-SQL für Einnahmen
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SELECT
|
||||||
|
pf.amount as zahlung,
|
||||||
|
p.datep as zahlungsdatum,
|
||||||
|
f.total_ht as netto,
|
||||||
|
f.total_tva as ust,
|
||||||
|
f.total_ttc as brutto,
|
||||||
|
(pf.amount * f.total_ht / f.total_ttc) as zahlung_netto,
|
||||||
|
(pf.amount * f.total_tva / f.total_ttc) as zahlung_ust
|
||||||
|
FROM llx_paiement as p
|
||||||
|
INNER JOIN llx_paiement_facture as pf ON p.rowid = pf.fk_paiement
|
||||||
|
INNER JOIN llx_facture as f ON pf.fk_facture = f.rowid
|
||||||
|
WHERE p.datep >= '2025-01-01' AND p.datep <= '2025-12-31'
|
||||||
|
AND f.entity = 1
|
||||||
|
```
|
||||||
|
|
||||||
## Datenbanktabellen
|
## Datenbanktabellen
|
||||||
|
|
||||||
Das Modul erstellt folgende Tabellen:
|
Das Modul erstellt folgende Tabellen:
|
||||||
|
|
|
||||||
709
admin/setup.php
709
admin/setup.php
|
|
@ -1,35 +1,15 @@
|
||||||
<?php
|
<?php
|
||||||
/* Copyright (C) 2004-2017 Laurent Destailleur <eldy@users.sourceforge.net>
|
|
||||||
* Copyright (C) 2024 Frédéric France <frederic.france@free.fr>
|
|
||||||
* Copyright (C) 2026 Eduard Wisch <data@data-it-solution.de>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \file steuer/admin/setup.php
|
* EÜR Modul - Einstellungen
|
||||||
* \ingroup steuer
|
*
|
||||||
* \brief Steuer setup page.
|
* @package steuer
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Load Dolibarr environment
|
// Load Dolibarr environment
|
||||||
$res = 0;
|
$res = 0;
|
||||||
// Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined)
|
|
||||||
if (!$res && !empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) {
|
if (!$res && !empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) {
|
||||||
$res = @include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php";
|
$res = @include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php";
|
||||||
}
|
}
|
||||||
// Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME
|
|
||||||
$tmp = empty($_SERVER['SCRIPT_FILENAME']) ? '' : $_SERVER['SCRIPT_FILENAME'];
|
$tmp = empty($_SERVER['SCRIPT_FILENAME']) ? '' : $_SERVER['SCRIPT_FILENAME'];
|
||||||
$tmp2 = realpath(__FILE__);
|
$tmp2 = realpath(__FILE__);
|
||||||
$i = strlen($tmp) - 1;
|
$i = strlen($tmp) - 1;
|
||||||
|
|
@ -44,586 +24,227 @@ if (!$res && $i > 0 && file_exists(substr($tmp, 0, ($i + 1))."/main.inc.php")) {
|
||||||
if (!$res && $i > 0 && file_exists(dirname(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";
|
$res = @include dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php";
|
||||||
}
|
}
|
||||||
// Try main.inc.php using relative path
|
|
||||||
if (!$res && file_exists("../../main.inc.php")) {
|
if (!$res && file_exists("../../main.inc.php")) {
|
||||||
$res = @include "../../main.inc.php";
|
$res = @include "../../main.inc.php";
|
||||||
}
|
}
|
||||||
if (!$res && file_exists("../../../main.inc.php")) {
|
if (!$res && file_exists("../../../main.inc.php")) {
|
||||||
$res = @include "../../../main.inc.php";
|
$res = @include "../../../main.inc.php";
|
||||||
}
|
}
|
||||||
|
if (!$res && file_exists("../../../../main.inc.php")) {
|
||||||
|
$res = @include "../../../../main.inc.php";
|
||||||
|
}
|
||||||
if (!$res) {
|
if (!$res) {
|
||||||
die("Include of main fails");
|
die("Include of main fails");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Libraries
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
|
||||||
require_once DOL_DOCUMENT_ROOT."/core/lib/admin.lib.php";
|
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formadmin.class.php';
|
||||||
require_once '../lib/steuer.lib.php';
|
|
||||||
//require_once "../class/myclass.class.php";
|
|
||||||
|
|
||||||
/**
|
$langs->loadLangs(array("steuer@steuer", "admin"));
|
||||||
* @var Conf $conf
|
|
||||||
* @var DoliDB $db
|
|
||||||
* @var HookManager $hookmanager
|
|
||||||
* @var Translate $langs
|
|
||||||
* @var User $user
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Translations
|
// Security check
|
||||||
$langs->loadLangs(array("admin", "steuer@steuer"));
|
if (!$user->admin) {
|
||||||
|
accessforbidden();
|
||||||
|
}
|
||||||
|
|
||||||
// Initialize a technical object to manage hooks of page. Note that conf->hooks_modules contains an array of hook context
|
|
||||||
/** @var HookManager $hookmanager */
|
|
||||||
$hookmanager->initHooks(array('steuersetup', 'globalsetup'));
|
|
||||||
|
|
||||||
// Parameters
|
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
$backtopage = GETPOST('backtopage', 'alpha');
|
|
||||||
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
|
||||||
|
|
||||||
$value = GETPOST('value', 'alpha');
|
|
||||||
$label = GETPOST('label', 'alpha');
|
|
||||||
$scandir = GETPOST('scan_dir', 'alpha');
|
|
||||||
$type = 'myobject';
|
|
||||||
|
|
||||||
$error = 0;
|
|
||||||
$setupnotempty = 0;
|
|
||||||
|
|
||||||
// Access control
|
|
||||||
if (!$user->admin) {
|
|
||||||
accessforbidden();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Set this to 1 to use the factory to manage constants. Warning, the generated module will be compatible with version v15+ only
|
|
||||||
$useFormSetup = 1;
|
|
||||||
|
|
||||||
if (!class_exists('FormSetup')) {
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formsetup.class.php';
|
|
||||||
}
|
|
||||||
$formSetup = new FormSetup($db);
|
|
||||||
|
|
||||||
// Access control
|
|
||||||
if (!$user->admin) {
|
|
||||||
accessforbidden();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Enter here all parameters in your setup page
|
|
||||||
|
|
||||||
// Setup conf for selection of an URL
|
|
||||||
$item = $formSetup->newItem('STEUER_MYPARAM1');
|
|
||||||
$item->fieldParams['isMandatory'] = 1;
|
|
||||||
$item->fieldAttr['placeholder'] = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'];
|
|
||||||
$item->cssClass = 'minwidth500';
|
|
||||||
|
|
||||||
// Setup conf for selection of a simple string input
|
|
||||||
$item = $formSetup->newItem('STEUER_MYPARAM2');
|
|
||||||
$item->defaultFieldValue = 'default value';
|
|
||||||
$item->fieldAttr['placeholder'] = 'A placeholder here';
|
|
||||||
$item->helpText = 'Tooltip text';
|
|
||||||
|
|
||||||
// Setup conf for selection of a simple textarea input but we replace the text of field title
|
|
||||||
$item = $formSetup->newItem('STEUER_MYPARAM3');
|
|
||||||
$item->nameText = $item->getNameText().' more html text ';
|
|
||||||
|
|
||||||
// Setup conf for a selection of a Thirdparty
|
|
||||||
$item = $formSetup->newItem('STEUER_MYPARAM4');
|
|
||||||
$item->setAsThirdpartyType();
|
|
||||||
|
|
||||||
// Setup conf for a selection of a boolean
|
|
||||||
$formSetup->newItem('STEUER_MYPARAM5')->setAsYesNo();
|
|
||||||
|
|
||||||
// Setup conf for a selection of an Email template of type thirdparty
|
|
||||||
$formSetup->newItem('STEUER_MYPARAM6')->setAsEmailTemplate('thirdparty');
|
|
||||||
|
|
||||||
// Setup conf for a selection of a secured key
|
|
||||||
//$formSetup->newItem('STEUER_MYPARAM7')->setAsSecureKey();
|
|
||||||
|
|
||||||
// Setup conf for a selection of a Product
|
|
||||||
$formSetup->newItem('STEUER_MYPARAM8')->setAsProduct();
|
|
||||||
|
|
||||||
// Add a title for a new section
|
|
||||||
$formSetup->newItem('NewSection')->setAsTitle();
|
|
||||||
|
|
||||||
$TField = array(
|
|
||||||
'test01' => $langs->trans('test01'),
|
|
||||||
'test02' => $langs->trans('test02'),
|
|
||||||
'test03' => $langs->trans('test03'),
|
|
||||||
'test04' => $langs->trans('test04'),
|
|
||||||
'test05' => $langs->trans('test05'),
|
|
||||||
'test06' => $langs->trans('test06'),
|
|
||||||
);
|
|
||||||
|
|
||||||
// Setup conf for a simple combo list
|
|
||||||
$formSetup->newItem('STEUER_MYPARAM9')->setAsSelect($TField);
|
|
||||||
|
|
||||||
// Setup conf for a multiselect combo list
|
|
||||||
$item = $formSetup->newItem('STEUER_MYPARAM10');
|
|
||||||
$item->setAsMultiSelect($TField);
|
|
||||||
$item->helpText = $langs->transnoentities('STEUER_MYPARAM10');
|
|
||||||
|
|
||||||
// Setup conf for a category selection
|
|
||||||
$formSetup->newItem('STEUER_CATEGORY_ID_XXX')->setAsCategory('product');
|
|
||||||
|
|
||||||
// Setup conf STEUER_MYPARAM10
|
|
||||||
$item = $formSetup->newItem('STEUER_MYPARAM10');
|
|
||||||
$item->setAsColor();
|
|
||||||
$item->defaultFieldValue = '#FF0000';
|
|
||||||
//$item->fieldValue = '';
|
|
||||||
//$item->fieldAttr = array() ; // fields attribute only for compatible fields like input text
|
|
||||||
//$item->fieldOverride = false; // set this var to override field output will override $fieldInputOverride and $fieldOutputOverride too
|
|
||||||
//$item->fieldInputOverride = false; // set this var to override field input
|
|
||||||
//$item->fieldOutputOverride = false; // set this var to override field output
|
|
||||||
|
|
||||||
$item = $formSetup->newItem('STEUER_MYPARAM11')->setAsHtml();
|
|
||||||
$item->nameText = $item->getNameText().' more html text ';
|
|
||||||
$item->fieldInputOverride = '';
|
|
||||||
$item->helpText = $langs->transnoentities('HelpMessage');
|
|
||||||
$item->cssClass = 'minwidth500';
|
|
||||||
|
|
||||||
$item = $formSetup->newItem('STEUER_MYPARAM12');
|
|
||||||
$item->fieldOverride = "Value forced, can't be modified";
|
|
||||||
$item->cssClass = 'minwidth500';
|
|
||||||
|
|
||||||
//$item = $formSetup->newItem('STEUER_MYPARAM13')->setAsDate(); // Not yet implemented
|
|
||||||
|
|
||||||
// End of definition of parameters
|
|
||||||
|
|
||||||
|
|
||||||
$setupnotempty += count($formSetup->items);
|
|
||||||
|
|
||||||
|
|
||||||
$dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
|
|
||||||
|
|
||||||
$moduledir = 'steuer';
|
|
||||||
$myTmpObjects = array();
|
|
||||||
// TODO Scan list of objects to fill this array
|
|
||||||
$myTmpObjects['myobject'] = array('label' => 'MyObject', 'includerefgeneration' => 0, 'includedocgeneration' => 0, 'class' => 'MyObject');
|
|
||||||
|
|
||||||
$tmpobjectkey = GETPOST('object', 'aZ09');
|
|
||||||
if ($tmpobjectkey && !array_key_exists($tmpobjectkey, $myTmpObjects)) {
|
|
||||||
accessforbidden('Bad value for object. Hack attempt ?');
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Actions
|
* Actions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// For retrocompatibility Dolibarr < 15.0
|
if ($action == 'update') {
|
||||||
if (versioncompare(explode('.', DOL_VERSION), array(15)) < 0 && $action == 'update' && !empty($user->admin)) {
|
$error = 0;
|
||||||
$formSetup->saveConfFromPost();
|
|
||||||
}
|
|
||||||
|
|
||||||
include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php';
|
// Gewerbesteuer Hebesatz
|
||||||
|
$hebesatz = GETPOSTINT('STEUER_GEWERBE_HEBESATZ');
|
||||||
if ($action == 'updateMask') {
|
if ($hebesatz >= 200 && $hebesatz <= 900) {
|
||||||
$maskconst = GETPOST('maskconst', 'aZ09');
|
dolibarr_set_const($db, 'STEUER_GEWERBE_HEBESATZ', $hebesatz, 'chaine', 0, '', $conf->entity);
|
||||||
$maskvalue = GETPOST('maskvalue', 'alpha');
|
|
||||||
|
|
||||||
if ($maskconst && preg_match('/_MASK$/', $maskconst)) {
|
|
||||||
$res = dolibarr_set_const($db, $maskconst, $maskvalue, 'chaine', 0, '', $conf->entity);
|
|
||||||
if (!($res > 0)) {
|
|
||||||
$error++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Gewerbesteuer Freibetrag
|
||||||
|
$freibetrag = GETPOSTINT('STEUER_GEWERBE_FREIBETRAG');
|
||||||
|
if ($freibetrag >= 0) {
|
||||||
|
dolibarr_set_const($db, 'STEUER_GEWERBE_FREIBETRAG', $freibetrag, 'chaine', 0, '', $conf->entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Steuernummer
|
||||||
|
$steuernummer = GETPOST('STEUER_STEUERNUMMER', 'alpha');
|
||||||
|
dolibarr_set_const($db, 'STEUER_STEUERNUMMER', $steuernummer, 'chaine', 0, '', $conf->entity);
|
||||||
|
|
||||||
|
// USt-ID
|
||||||
|
$ustid = GETPOST('STEUER_UST_ID', 'alpha');
|
||||||
|
dolibarr_set_const($db, 'STEUER_UST_ID', $ustid, 'chaine', 0, '', $conf->entity);
|
||||||
|
|
||||||
|
// Finanzamt
|
||||||
|
$finanzamt = GETPOST('STEUER_FINANZAMT', 'alpha');
|
||||||
|
dolibarr_set_const($db, 'STEUER_FINANZAMT', $finanzamt, 'chaine', 0, '', $conf->entity);
|
||||||
|
|
||||||
|
// UStVA Zeitraum
|
||||||
|
$ustva_zeitraum = GETPOST('STEUER_USTVA_ZEITRAUM', 'alpha');
|
||||||
|
dolibarr_set_const($db, 'STEUER_USTVA_ZEITRAUM', $ustva_zeitraum, 'chaine', 0, '', $conf->entity);
|
||||||
|
|
||||||
|
// Ist-Versteuerung
|
||||||
|
$ist_versteuerung = GETPOSTINT('STEUER_IST_VERSTEUERUNG');
|
||||||
|
dolibarr_set_const($db, 'STEUER_IST_VERSTEUERUNG', $ist_versteuerung, 'chaine', 0, '', $conf->entity);
|
||||||
|
|
||||||
if (!$error) {
|
if (!$error) {
|
||||||
setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
|
setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
|
||||||
} else {
|
} else {
|
||||||
setEventMessages($langs->trans("Error"), null, 'errors');
|
setEventMessages($langs->trans("Error"), null, 'errors');
|
||||||
}
|
}
|
||||||
} elseif ($action == 'specimen' && $tmpobjectkey) {
|
|
||||||
$modele = GETPOST('module', 'alpha');
|
|
||||||
|
|
||||||
$className = $myTmpObjects[$tmpobjectkey]['class'];
|
|
||||||
$tmpobject = new $className($db);
|
|
||||||
'@phan-var-force MyObject $tmpobject';
|
|
||||||
$tmpobject->initAsSpecimen();
|
|
||||||
|
|
||||||
// Search template files
|
|
||||||
$file = '';
|
|
||||||
$className = '';
|
|
||||||
$dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
|
|
||||||
foreach ($dirmodels as $reldir) {
|
|
||||||
$file = dol_buildpath($reldir."core/modules/steuer/doc/pdf_".$modele."_".strtolower($tmpobjectkey).".modules.php", 0);
|
|
||||||
if (file_exists($file)) {
|
|
||||||
$className = "pdf_".$modele."_".strtolower($tmpobjectkey);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($className !== '') {
|
|
||||||
require_once $file;
|
|
||||||
|
|
||||||
$module = new $className($db);
|
|
||||||
'@phan-var-force ModelePDFMyObject $module';
|
|
||||||
|
|
||||||
'@phan-var-force ModelePDFMyObject $module';
|
|
||||||
|
|
||||||
if ($module->write_file($tmpobject, $langs) > 0) {
|
|
||||||
header("Location: ".DOL_URL_ROOT."/document.php?modulepart=steuer-".strtolower($tmpobjectkey)."&file=SPECIMEN.pdf");
|
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
setEventMessages($module->error, null, 'errors');
|
|
||||||
dol_syslog($module->error, LOG_ERR);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
setEventMessages($langs->trans("ErrorModuleNotFound"), null, 'errors');
|
|
||||||
dol_syslog($langs->trans("ErrorModuleNotFound"), LOG_ERR);
|
|
||||||
}
|
|
||||||
} elseif ($action == 'setmod') {
|
|
||||||
// TODO Check if numbering module chosen can be activated by calling method canBeActivated
|
|
||||||
if (!empty($tmpobjectkey)) {
|
|
||||||
$constforval = 'STEUER_'.strtoupper($tmpobjectkey)."_ADDON";
|
|
||||||
dolibarr_set_const($db, $constforval, $value, 'chaine', 0, '', $conf->entity);
|
|
||||||
}
|
|
||||||
} elseif ($action == 'set') {
|
|
||||||
// Activate a model
|
|
||||||
$ret = addDocumentModel($value, $type, $label, $scandir);
|
|
||||||
} elseif ($action == 'del') {
|
|
||||||
$ret = delDocumentModel($value, $type);
|
|
||||||
if ($ret > 0) {
|
|
||||||
if (!empty($tmpobjectkey)) {
|
|
||||||
$constforval = 'STEUER_'.strtoupper($tmpobjectkey).'_ADDON_PDF';
|
|
||||||
if (getDolGlobalString($constforval) == "$value") {
|
|
||||||
dolibarr_del_const($db, $constforval, $conf->entity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} elseif ($action == 'setdoc') {
|
|
||||||
// Set or unset default model
|
|
||||||
if (!empty($tmpobjectkey)) {
|
|
||||||
$constforval = 'STEUER_'.strtoupper($tmpobjectkey).'_ADDON_PDF';
|
|
||||||
if (dolibarr_set_const($db, $constforval, $value, 'chaine', 0, '', $conf->entity)) {
|
|
||||||
// The constant that was read before the new set
|
|
||||||
// We therefore requires a variable to have a coherent view
|
|
||||||
$conf->global->{$constforval} = $value;
|
|
||||||
}
|
|
||||||
|
|
||||||
// We disable/enable the document template (into llx_document_model table)
|
|
||||||
$ret = delDocumentModel($value, $type);
|
|
||||||
if ($ret > 0) {
|
|
||||||
$ret = addDocumentModel($value, $type, $label, $scandir);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} elseif ($action == 'unsetdoc') {
|
|
||||||
if (!empty($tmpobjectkey)) {
|
|
||||||
$constforval = 'STEUER_'.strtoupper($tmpobjectkey).'_ADDON_PDF';
|
|
||||||
dolibarr_del_const($db, $constforval, $conf->entity);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$action = 'edit';
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* View
|
* View
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$form = new Form($db);
|
$form = new Form($db);
|
||||||
|
|
||||||
$help_url = '';
|
$page_name = "SteuerSetup";
|
||||||
$title = "SteuerSetup";
|
llxHeader('', $langs->trans($page_name), '', '', 0, 0, '', '', '', 'mod-steuer page-admin-setup');
|
||||||
|
|
||||||
llxHeader('', $langs->trans($title), $help_url, '', 0, 0, '', '', '', 'mod-steuer page-admin');
|
$linkback = '<a href="'.DOL_URL_ROOT.'/admin/modules.php?restore_lastsearch_values=1">'.$langs->trans("BackToModuleList").'</a>';
|
||||||
|
print load_fiche_titre($langs->trans($page_name), $linkback, 'fa-calculator');
|
||||||
|
|
||||||
// Subheader
|
print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';
|
||||||
$linkback = '<a href="'.($backtopage ? $backtopage : DOL_URL_ROOT.'/admin/modules.php?restore_lastsearch_values=1').'">'.$langs->trans("BackToModuleList").'</a>';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
|
print '<input type="hidden" name="action" value="update">';
|
||||||
|
|
||||||
print load_fiche_titre($langs->trans($title), $linkback, 'title_setup');
|
// Firmendaten für Steuern
|
||||||
|
print '<div class="div-table-responsive-no-min">';
|
||||||
|
print '<table class="noborder centpercent">';
|
||||||
|
|
||||||
// Configuration header
|
print '<tr class="liste_titre">';
|
||||||
$head = steuerAdminPrepareHead();
|
print '<td colspan="2">'.$langs->trans("CompanyTaxInfo").'</td>';
|
||||||
print dol_get_fiche_head($head, 'settings', $langs->trans($title), -1, "steuer@steuer");
|
print '</tr>';
|
||||||
|
|
||||||
// Setup page goes here
|
// Steuernummer
|
||||||
echo '<span class="opacitymedium">'.$langs->trans("SteuerSetupPage").'</span><br><br>';
|
print '<tr class="oddeven">';
|
||||||
|
print '<td class="titlefield">'.$langs->trans("TaxNumber").'</td>';
|
||||||
|
print '<td>';
|
||||||
|
print '<input type="text" name="STEUER_STEUERNUMMER" value="'.getDolGlobalString('STEUER_STEUERNUMMER').'" size="30">';
|
||||||
|
print '</td>';
|
||||||
|
print '</tr>';
|
||||||
|
|
||||||
|
// USt-ID
|
||||||
|
print '<tr class="oddeven">';
|
||||||
|
print '<td>'.$langs->trans("VATIntra").'</td>';
|
||||||
|
print '<td>';
|
||||||
|
print '<input type="text" name="STEUER_UST_ID" value="'.getDolGlobalString('STEUER_UST_ID').'" size="30" placeholder="DE123456789">';
|
||||||
|
print '</td>';
|
||||||
|
print '</tr>';
|
||||||
|
|
||||||
/*if ($action == 'edit') {
|
// Finanzamt
|
||||||
print $formSetup->generateOutput(true);
|
print '<tr class="oddeven">';
|
||||||
print '<br>';
|
print '<td>'.$langs->trans("TaxOffice").'</td>';
|
||||||
} elseif (!empty($formSetup->items)) {
|
print '<td>';
|
||||||
print $formSetup->generateOutput();
|
print '<input type="text" name="STEUER_FINANZAMT" value="'.getDolGlobalString('STEUER_FINANZAMT').'" size="50">';
|
||||||
print '<div class="tabsAction">';
|
print '</td>';
|
||||||
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=edit&token='.newToken().'">'.$langs->trans("Modify").'</a>';
|
print '</tr>';
|
||||||
print '</div>';
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
if (!empty($formSetup->items)) {
|
|
||||||
print $formSetup->generateOutput(true);
|
|
||||||
print '<br>';
|
|
||||||
}
|
|
||||||
|
|
||||||
|
print '</table>';
|
||||||
|
print '</div>';
|
||||||
|
|
||||||
foreach ($myTmpObjects as $myTmpObjectKey => $myTmpObjectArray) {
|
print '<br>';
|
||||||
if (!empty($myTmpObjectArray['includerefgeneration'])) {
|
|
||||||
// Numbering models
|
|
||||||
|
|
||||||
$setupnotempty++;
|
// USt-Einstellungen
|
||||||
|
print '<div class="div-table-responsive-no-min">';
|
||||||
|
print '<table class="noborder centpercent">';
|
||||||
|
|
||||||
print load_fiche_titre($langs->trans("NumberingModules", $myTmpObjectArray['label']), '', '');
|
print '<tr class="liste_titre">';
|
||||||
|
print '<td colspan="2">'.$langs->trans("VATSettings").'</td>';
|
||||||
|
print '</tr>';
|
||||||
|
|
||||||
print '<table class="noborder centpercent">';
|
// Ist-Versteuerung
|
||||||
print '<tr class="liste_titre">';
|
print '<tr class="oddeven">';
|
||||||
print '<td>'.$langs->trans("Name").'</td>';
|
print '<td class="titlefield">'.$langs->trans("IstVersteuerung").'</td>';
|
||||||
print '<td>'.$langs->trans("Description").'</td>';
|
print '<td>';
|
||||||
print '<td class="nowrap">'.$langs->trans("Example").'</td>';
|
$ist_versteuerung = getDolGlobalInt('STEUER_IST_VERSTEUERUNG', 1);
|
||||||
print '<td class="center" width="60">'.$langs->trans("Status").'</td>';
|
print '<select name="STEUER_IST_VERSTEUERUNG" class="flat">';
|
||||||
print '<td class="center" width="16">'.$langs->trans("ShortInfo").'</td>';
|
print '<option value="1"'.($ist_versteuerung == 1 ? ' selected' : '').'>'.$langs->trans("Yes").' - Ist-Versteuerung (nach Zahlungseingang)</option>';
|
||||||
print '</tr>'."\n";
|
print '<option value="0"'.($ist_versteuerung == 0 ? ' selected' : '').'>'.$langs->trans("No").' - Soll-Versteuerung (nach Rechnungsdatum)</option>';
|
||||||
|
print '</select>';
|
||||||
|
print '</td>';
|
||||||
|
print '</tr>';
|
||||||
|
|
||||||
clearstatcache();
|
// UStVA Zeitraum
|
||||||
|
print '<tr class="oddeven">';
|
||||||
|
print '<td>'.$langs->trans("UStVAZeitraum").'</td>';
|
||||||
|
print '<td>';
|
||||||
|
$ustva_zeitraum = getDolGlobalString('STEUER_USTVA_ZEITRAUM', 'monat');
|
||||||
|
print '<select name="STEUER_USTVA_ZEITRAUM" class="flat">';
|
||||||
|
print '<option value="monat"'.($ustva_zeitraum == 'monat' ? ' selected' : '').'>'.$langs->trans("Monthly").'</option>';
|
||||||
|
print '<option value="quartal"'.($ustva_zeitraum == 'quartal' ? ' selected' : '').'>'.$langs->trans("Quarterly").'</option>';
|
||||||
|
print '</select>';
|
||||||
|
print '</td>';
|
||||||
|
print '</tr>';
|
||||||
|
|
||||||
foreach ($dirmodels as $reldir) {
|
print '</table>';
|
||||||
$dir = dol_buildpath($reldir."core/modules/".$moduledir);
|
print '</div>';
|
||||||
|
|
||||||
if (is_dir($dir)) {
|
print '<br>';
|
||||||
$handle = opendir($dir);
|
|
||||||
if (is_resource($handle)) {
|
|
||||||
while (($file = readdir($handle)) !== false) {
|
|
||||||
if (strpos($file, 'mod_'.strtolower($myTmpObjectKey).'_') === 0 && substr($file, dol_strlen($file) - 3, 3) == 'php') {
|
|
||||||
$file = substr($file, 0, dol_strlen($file) - 4);
|
|
||||||
|
|
||||||
require_once $dir.'/'.$file.'.php';
|
// Gewerbesteuer-Einstellungen
|
||||||
|
print '<div class="div-table-responsive-no-min">';
|
||||||
|
print '<table class="noborder centpercent">';
|
||||||
|
|
||||||
$module = new $file($db);
|
print '<tr class="liste_titre">';
|
||||||
'@phan-var-force ModeleNumRefMyObject $module';
|
print '<td colspan="2">'.$langs->trans("GewerbesteuerSettings").'</td>';
|
||||||
|
print '</tr>';
|
||||||
|
|
||||||
// Show modules according to features level
|
// Hebesatz
|
||||||
if ($module->version == 'development' && getDolGlobalInt('MAIN_FEATURES_LEVEL') < 2) {
|
print '<tr class="oddeven">';
|
||||||
continue;
|
print '<td class="titlefield">'.$langs->trans("Hebesatz").'</td>';
|
||||||
}
|
print '<td>';
|
||||||
if ($module->version == 'experimental' && getDolGlobalInt('MAIN_FEATURES_LEVEL') < 1) {
|
$hebesatz = getDolGlobalInt('STEUER_GEWERBE_HEBESATZ', 400);
|
||||||
continue;
|
print '<input type="number" name="STEUER_GEWERBE_HEBESATZ" value="'.$hebesatz.'" min="200" max="900" step="1" class="flat width100"> %';
|
||||||
}
|
print '<br><span class="opacitymedium small">Hebesatz Ihrer Gemeinde (z.B. 400% = 400)</span>';
|
||||||
|
print '</td>';
|
||||||
|
print '</tr>';
|
||||||
|
|
||||||
if ($module->isEnabled()) {
|
// Freibetrag
|
||||||
dol_include_once('/'.$moduledir.'/class/'.strtolower($myTmpObjectKey).'.class.php');
|
print '<tr class="oddeven">';
|
||||||
|
print '<td>'.$langs->trans("Freibetrag").'</td>';
|
||||||
|
print '<td>';
|
||||||
|
$freibetrag = getDolGlobalInt('STEUER_GEWERBE_FREIBETRAG', 24500);
|
||||||
|
print '<input type="number" name="STEUER_GEWERBE_FREIBETRAG" value="'.$freibetrag.'" min="0" step="100" class="flat width100"> EUR';
|
||||||
|
print '<br><span class="opacitymedium small">Freibetrag (24.500 EUR für natürliche Personen und Personengesellschaften)</span>';
|
||||||
|
print '</td>';
|
||||||
|
print '</tr>';
|
||||||
|
|
||||||
print '<tr class="oddeven"><td>'.$module->getName($langs)."</td><td>\n";
|
print '</table>';
|
||||||
print $module->info($langs);
|
print '</div>';
|
||||||
print '</td>';
|
|
||||||
|
|
||||||
// Show example of numbering model
|
print '<br>';
|
||||||
print '<td class="nowrap">';
|
|
||||||
$tmp = $module->getExample();
|
|
||||||
if (preg_match('/^Error/', $tmp)) {
|
|
||||||
$langs->load("errors");
|
|
||||||
print '<div class="error">'.$langs->trans($tmp).'</div>';
|
|
||||||
} elseif ($tmp == 'NotConfigured') {
|
|
||||||
print $langs->trans($tmp);
|
|
||||||
} else {
|
|
||||||
print $tmp;
|
|
||||||
}
|
|
||||||
print '</td>'."\n";
|
|
||||||
|
|
||||||
print '<td class="center">';
|
print '<div class="center">';
|
||||||
$constforvar = 'STEUER_'.strtoupper($myTmpObjectKey).'_ADDON';
|
print '<input type="submit" class="button" value="'.$langs->trans("Save").'">';
|
||||||
$defaultifnotset = 'thevaluetousebydefault';
|
print '</div>';
|
||||||
$activenumberingmodel = getDolGlobalString($constforvar, $defaultifnotset);
|
|
||||||
if ($activenumberingmodel == $file) {
|
|
||||||
print img_picto($langs->trans("Activated"), 'switch_on');
|
|
||||||
} else {
|
|
||||||
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setmod&token='.newToken().'&object='.strtolower($myTmpObjectKey).'&value='.urlencode($file).'">';
|
|
||||||
print img_picto($langs->trans("Disabled"), 'switch_off');
|
|
||||||
print '</a>';
|
|
||||||
}
|
|
||||||
print '</td>';
|
|
||||||
|
|
||||||
$className = $myTmpObjectArray['class'];
|
print '</form>';
|
||||||
$mytmpinstance = new $className($db);
|
|
||||||
'@phan-var-force MyObject $mytmpinstance';
|
|
||||||
$mytmpinstance->initAsSpecimen();
|
|
||||||
|
|
||||||
// Info
|
// Modul-Info
|
||||||
$htmltooltip = '';
|
print '<br>';
|
||||||
$htmltooltip .= ''.$langs->trans("Version").': <b>'.$module->getVersion().'</b><br>';
|
print '<div class="div-table-responsive-no-min">';
|
||||||
|
print '<table class="noborder centpercent">';
|
||||||
$nextval = $module->getNextValue($mytmpinstance);
|
print '<tr class="liste_titre">';
|
||||||
if ("$nextval" != $langs->trans("NotAvailable")) { // Keep " on nextval
|
print '<td colspan="2">'.$langs->trans("ModuleInfo").'</td>';
|
||||||
$htmltooltip .= ''.$langs->trans("NextValue").': ';
|
print '</tr>';
|
||||||
if ($nextval) {
|
print '<tr class="oddeven">';
|
||||||
if (preg_match('/^Error/', $nextval) || $nextval == 'NotConfigured') {
|
print '<td class="titlefield">'.$langs->trans("Version").'</td>';
|
||||||
$nextval = $langs->trans($nextval);
|
print '<td>1.0</td>';
|
||||||
}
|
print '</tr>';
|
||||||
$htmltooltip .= $nextval.'<br>';
|
print '<tr class="oddeven">';
|
||||||
} else {
|
print '<td>'.$langs->trans("Author").'</td>';
|
||||||
$htmltooltip .= $langs->trans($module->error).'<br>';
|
print '<td>Eduard Wisch - Data IT Solution</td>';
|
||||||
}
|
print '</tr>';
|
||||||
}
|
print '<tr class="oddeven">';
|
||||||
|
print '<td>'.$langs->trans("Description").'</td>';
|
||||||
print '<td class="center">';
|
print '<td>'.$langs->trans("ModuleSteuerDesc").'</td>';
|
||||||
print $form->textwithpicto('', $htmltooltip, 1, 'info');
|
print '</tr>';
|
||||||
print '</td>';
|
print '</table>';
|
||||||
|
print '</div>';
|
||||||
print "</tr>\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
closedir($handle);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
print "</table><br>\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty($myTmpObjectArray['includedocgeneration'])) {
|
|
||||||
/*
|
|
||||||
* Document templates generators
|
|
||||||
*/
|
|
||||||
$setupnotempty++;
|
|
||||||
$type = strtolower($myTmpObjectKey);
|
|
||||||
|
|
||||||
print load_fiche_titre($langs->trans("DocumentModules", $myTmpObjectKey), '', '');
|
|
||||||
|
|
||||||
// Load array def with activated templates
|
|
||||||
$def = array();
|
|
||||||
$sql = "SELECT nom";
|
|
||||||
$sql .= " FROM ".$db->prefix()."document_model";
|
|
||||||
$sql .= " WHERE type = '".$db->escape($type)."'";
|
|
||||||
$sql .= " AND entity = ".$conf->entity;
|
|
||||||
$resql = $db->query($sql);
|
|
||||||
if ($resql) {
|
|
||||||
$i = 0;
|
|
||||||
$num_rows = $db->num_rows($resql);
|
|
||||||
while ($i < $num_rows) {
|
|
||||||
$array = $db->fetch_array($resql);
|
|
||||||
array_push($def, $array[0]);
|
|
||||||
$i++;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
dol_print_error($db);
|
|
||||||
}
|
|
||||||
|
|
||||||
print '<table class="noborder centpercent">'."\n";
|
|
||||||
print '<tr class="liste_titre">'."\n";
|
|
||||||
print '<td>'.$langs->trans("Name").'</td>';
|
|
||||||
print '<td>'.$langs->trans("Description").'</td>';
|
|
||||||
print '<td class="center" width="60">'.$langs->trans("Status")."</td>\n";
|
|
||||||
print '<td class="center" width="60">'.$langs->trans("Default")."</td>\n";
|
|
||||||
print '<td class="center" width="38">'.$langs->trans("ShortInfo").'</td>';
|
|
||||||
print '<td class="center" width="38">'.$langs->trans("Preview").'</td>';
|
|
||||||
print "</tr>\n";
|
|
||||||
|
|
||||||
clearstatcache();
|
|
||||||
|
|
||||||
foreach ($dirmodels as $reldir) {
|
|
||||||
foreach (array('', '/doc') as $valdir) {
|
|
||||||
$realpath = $reldir."core/modules/".$moduledir.$valdir;
|
|
||||||
$dir = dol_buildpath($realpath);
|
|
||||||
|
|
||||||
if (is_dir($dir)) {
|
|
||||||
$handle = opendir($dir);
|
|
||||||
if (is_resource($handle)) {
|
|
||||||
$filelist = array();
|
|
||||||
while (($file = readdir($handle)) !== false) {
|
|
||||||
$filelist[] = $file;
|
|
||||||
}
|
|
||||||
closedir($handle);
|
|
||||||
arsort($filelist);
|
|
||||||
|
|
||||||
foreach ($filelist as $file) {
|
|
||||||
if (preg_match('/\.modules\.php$/i', $file) && preg_match('/^(pdf_|doc_)/', $file)) {
|
|
||||||
if (file_exists($dir.'/'.$file)) {
|
|
||||||
$name = substr($file, 4, dol_strlen($file) - 16);
|
|
||||||
$className = substr($file, 0, dol_strlen($file) - 12);
|
|
||||||
|
|
||||||
require_once $dir.'/'.$file;
|
|
||||||
$module = new $className($db);
|
|
||||||
'@phan-var-force ModelePDFMyObject $module';
|
|
||||||
|
|
||||||
$modulequalified = 1;
|
|
||||||
if ($module->version == 'development' && getDolGlobalInt('MAIN_FEATURES_LEVEL') < 2) {
|
|
||||||
$modulequalified = 0;
|
|
||||||
}
|
|
||||||
if ($module->version == 'experimental' && getDolGlobalInt('MAIN_FEATURES_LEVEL') < 1) {
|
|
||||||
$modulequalified = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($modulequalified) {
|
|
||||||
print '<tr class="oddeven"><td width="100">';
|
|
||||||
print(empty($module->name) ? $name : $module->name);
|
|
||||||
print "</td><td>\n";
|
|
||||||
if (method_exists($module, 'info')) {
|
|
||||||
print $module->info($langs); // @phan-suppress-current-line PhanUndeclaredMethod
|
|
||||||
} else {
|
|
||||||
print $module->description;
|
|
||||||
}
|
|
||||||
print '</td>';
|
|
||||||
|
|
||||||
// Active
|
|
||||||
if (in_array($name, $def)) {
|
|
||||||
print '<td class="center">'."\n";
|
|
||||||
print '<a href="'.$_SERVER["PHP_SELF"].'?action=del&token='.newToken().'&value='.urlencode($name).'">';
|
|
||||||
print img_picto($langs->trans("Enabled"), 'switch_on');
|
|
||||||
print '</a>';
|
|
||||||
print '</td>';
|
|
||||||
} else {
|
|
||||||
print '<td class="center">'."\n";
|
|
||||||
print '<a href="'.$_SERVER["PHP_SELF"].'?action=set&token='.newToken().'&value='.urlencode($name).'&scan_dir='.urlencode($module->scandir).'&label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"), 'switch_off').'</a>';
|
|
||||||
print "</td>";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Default
|
|
||||||
print '<td class="center">';
|
|
||||||
$constforvar = 'STEUER_'.strtoupper($myTmpObjectKey).'_ADDON_PDF';
|
|
||||||
if (getDolGlobalString($constforvar) == $name) {
|
|
||||||
//print img_picto($langs->trans("Default"), 'on');
|
|
||||||
// Even if choice is the default value, we allow to disable it. Replace this with previous line if you need to disable unset
|
|
||||||
print '<a href="'.$_SERVER["PHP_SELF"].'?action=unsetdoc&token='.newToken().'&object='.urlencode(strtolower($myTmpObjectKey)).'&value='.urlencode($name).'&scan_dir='.urlencode($module->scandir).'&label='.urlencode($module->name).'&type='.urlencode($type).'" alt="'.$langs->trans("Disable").'">'.img_picto($langs->trans("Enabled"), 'on').'</a>';
|
|
||||||
} else {
|
|
||||||
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&token='.newToken().'&object='.urlencode(strtolower($myTmpObjectKey)).'&value='.urlencode($name).'&scan_dir='.urlencode($module->scandir).'&label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"), 'off').'</a>';
|
|
||||||
}
|
|
||||||
print '</td>';
|
|
||||||
|
|
||||||
// Info
|
|
||||||
$htmltooltip = ''.$langs->trans("Name").': '.$module->name;
|
|
||||||
$htmltooltip .= '<br>'.$langs->trans("Type").': '.($module->type ? $module->type : $langs->trans("Unknown"));
|
|
||||||
if ($module->type == 'pdf') {
|
|
||||||
$htmltooltip .= '<br>'.$langs->trans("Width").'/'.$langs->trans("Height").': '.$module->page_largeur.'/'.$module->page_hauteur;
|
|
||||||
}
|
|
||||||
$htmltooltip .= '<br>'.$langs->trans("Path").': '.preg_replace('/^\//', '', $realpath).'/'.$file;
|
|
||||||
|
|
||||||
$htmltooltip .= '<br><br><u>'.$langs->trans("FeaturesSupported").':</u>';
|
|
||||||
$htmltooltip .= '<br>'.$langs->trans("Logo").': '.yn($module->option_logo, 1, 1);
|
|
||||||
$htmltooltip .= '<br>'.$langs->trans("MultiLanguage").': '.yn($module->option_multilang, 1, 1);
|
|
||||||
|
|
||||||
print '<td class="center">';
|
|
||||||
print $form->textwithpicto('', $htmltooltip, 1, 'info');
|
|
||||||
print '</td>';
|
|
||||||
|
|
||||||
// Preview
|
|
||||||
print '<td class="center">';
|
|
||||||
if ($module->type == 'pdf') {
|
|
||||||
$newname = preg_replace('/_'.preg_quote(strtolower($myTmpObjectKey), '/').'/', '', $name);
|
|
||||||
print '<a href="'.$_SERVER["PHP_SELF"].'?action=specimen&module='.urlencode($newname).'&object='.urlencode($myTmpObjectKey).'">'.img_object($langs->trans("Preview"), 'pdf').'</a>';
|
|
||||||
} else {
|
|
||||||
print img_object($langs->transnoentitiesnoconv("PreviewNotAvailable"), 'generic');
|
|
||||||
}
|
|
||||||
print '</td>';
|
|
||||||
|
|
||||||
print "</tr>\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
print '</table>';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (empty($setupnotempty)) {
|
|
||||||
print '<br>'.$langs->trans("NothingToSetup");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Page end
|
|
||||||
print dol_get_fiche_end();
|
|
||||||
|
|
||||||
llxFooter();
|
llxFooter();
|
||||||
$db->close();
|
$db->close();
|
||||||
|
|
|
||||||
|
|
@ -118,47 +118,51 @@ if ($search_beschreibung) {
|
||||||
$sql .= " AND b.beschreibung LIKE '%".$db->escape($search_beschreibung)."%'";
|
$sql .= " AND b.beschreibung LIKE '%".$db->escape($search_beschreibung)."%'";
|
||||||
}
|
}
|
||||||
|
|
||||||
// UNION mit Rechnungen (Einnahmen)
|
// UNION mit Kundenzahlungen (Einnahmen) - Ist-Versteuerung/Zufluss-Prinzip
|
||||||
$sql .= " UNION ALL ";
|
// Zahlungsdatum liegt in llx_paiement, nicht in llx_paiement_facture!
|
||||||
$sql .= "SELECT f.rowid, f.ref, COALESCE(pf.datep, f.datef) as datum, f.ref as belegnummer,";
|
if ($typ != 'ausgabe') {
|
||||||
$sql .= " CONCAT('Rechnung: ', s.nom) as beschreibung,";
|
$sql .= " UNION ALL ";
|
||||||
$sql .= " f.total_ht as betrag_netto, f.total_tva as betrag_ust, f.total_ttc as betrag_brutto,";
|
$sql .= "SELECT f.rowid, f.ref, p.datep as datum,";
|
||||||
$sql .= " 'einnahme' as typ, '' as kontonummer, '' as konto_bezeichnung,";
|
$sql .= " f.ref as belegnummer,";
|
||||||
$sql .= " 'facture' as quelle";
|
$sql .= " CONCAT('Zahlung: ', s.nom) as beschreibung,";
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX."facture as f";
|
$sql .= " (pf.amount * f.total_ht / f.total_ttc) as betrag_netto,";
|
||||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON f.fk_soc = s.rowid";
|
$sql .= " (pf.amount * f.total_tva / f.total_ttc) as betrag_ust,";
|
||||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."paiement_facture as pf ON pf.fk_facture = f.rowid";
|
$sql .= " pf.amount as betrag_brutto,";
|
||||||
$sql .= " WHERE f.entity = ".((int) $conf->entity);
|
$sql .= " 'einnahme' as typ, '' as kontonummer, '' as konto_bezeichnung,";
|
||||||
$sql .= " AND f.fk_statut IN (2, 3)";
|
$sql .= " 'facture' as quelle";
|
||||||
$sql .= " AND COALESCE(pf.datep, f.datef) BETWEEN '".$db->escape($datum_von)."' AND '".$db->escape($datum_bis)."'";
|
$sql .= " FROM ".MAIN_DB_PREFIX."paiement as p";
|
||||||
if ($typ == 'ausgabe') {
|
$sql .= " INNER JOIN ".MAIN_DB_PREFIX."paiement_facture as pf ON p.rowid = pf.fk_paiement";
|
||||||
$sql .= " AND 1=0"; // Keine Einnahmen bei Ausgaben-Filter
|
$sql .= " INNER JOIN ".MAIN_DB_PREFIX."facture as f ON pf.fk_facture = f.rowid";
|
||||||
|
$sql .= " INNER JOIN ".MAIN_DB_PREFIX."societe as s ON f.fk_soc = s.rowid";
|
||||||
|
$sql .= " WHERE f.entity = ".((int) $conf->entity);
|
||||||
|
$sql .= " AND p.datep BETWEEN '".$db->escape($datum_von)."' AND '".$db->escape($datum_bis)."'";
|
||||||
|
if ($search_beschreibung) {
|
||||||
|
$sql .= " AND s.nom LIKE '%".$db->escape($search_beschreibung)."%'";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ($search_beschreibung) {
|
|
||||||
$sql .= " AND s.nom LIKE '%".$db->escape($search_beschreibung)."%'";
|
|
||||||
}
|
|
||||||
$sql .= " GROUP BY f.rowid";
|
|
||||||
|
|
||||||
// UNION mit Lieferantenrechnungen (Ausgaben)
|
// UNION mit Lieferantenzahlungen (Ausgaben) - Ist-Versteuerung/Abfluss-Prinzip
|
||||||
$sql .= " UNION ALL ";
|
// Zahlungsdatum liegt in llx_paiementfourn, nicht in llx_paiementfourn_facturefourn!
|
||||||
$sql .= "SELECT f.rowid, f.ref, COALESCE(pf.datep, f.datef) as datum, COALESCE(f.ref_supplier, f.ref) as belegnummer,";
|
if ($typ != 'einnahme') {
|
||||||
$sql .= " CONCAT('Lieferant: ', s.nom) as beschreibung,";
|
$sql .= " UNION ALL ";
|
||||||
$sql .= " f.total_ht as betrag_netto, f.total_tva as betrag_ust, f.total_ttc as betrag_brutto,";
|
$sql .= "SELECT f.rowid, f.ref, p.datep as datum,";
|
||||||
$sql .= " 'ausgabe' as typ, '' as kontonummer, '' as konto_bezeichnung,";
|
$sql .= " COALESCE(f.ref_supplier, f.ref) as belegnummer,";
|
||||||
$sql .= " 'facture_fourn' as quelle";
|
$sql .= " CONCAT('Zahlung: ', s.nom) as beschreibung,";
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX."facture_fourn as f";
|
$sql .= " (pf.amount * f.total_ht / f.total_ttc) as betrag_netto,";
|
||||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON f.fk_soc = s.rowid";
|
$sql .= " (pf.amount * f.total_tva / f.total_ttc) as betrag_ust,";
|
||||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."paiementfourn_facturefourn as pf ON pf.fk_facturefourn = f.rowid";
|
$sql .= " pf.amount as betrag_brutto,";
|
||||||
$sql .= " WHERE f.entity = ".((int) $conf->entity);
|
$sql .= " 'ausgabe' as typ, '' as kontonummer, '' as konto_bezeichnung,";
|
||||||
$sql .= " AND f.fk_statut IN (2)";
|
$sql .= " 'facture_fourn' as quelle";
|
||||||
$sql .= " AND COALESCE(pf.datep, f.datef) BETWEEN '".$db->escape($datum_von)."' AND '".$db->escape($datum_bis)."'";
|
$sql .= " FROM ".MAIN_DB_PREFIX."paiementfourn as p";
|
||||||
if ($typ == 'einnahme') {
|
$sql .= " INNER JOIN ".MAIN_DB_PREFIX."paiementfourn_facturefourn as pf ON p.rowid = pf.fk_paiementfourn";
|
||||||
$sql .= " AND 1=0"; // Keine Ausgaben bei Einnahmen-Filter
|
$sql .= " INNER JOIN ".MAIN_DB_PREFIX."facture_fourn as f ON pf.fk_facturefourn = f.rowid";
|
||||||
|
$sql .= " INNER JOIN ".MAIN_DB_PREFIX."societe as s ON f.fk_soc = s.rowid";
|
||||||
|
$sql .= " WHERE f.entity = ".((int) $conf->entity);
|
||||||
|
$sql .= " AND p.datep BETWEEN '".$db->escape($datum_von)."' AND '".$db->escape($datum_bis)."'";
|
||||||
|
if ($search_beschreibung) {
|
||||||
|
$sql .= " AND s.nom LIKE '%".$db->escape($search_beschreibung)."%'";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ($search_beschreibung) {
|
|
||||||
$sql .= " AND s.nom LIKE '%".$db->escape($search_beschreibung)."%'";
|
|
||||||
}
|
|
||||||
$sql .= " GROUP BY f.rowid";
|
|
||||||
|
|
||||||
// Sortierung und Limit
|
// Sortierung und Limit
|
||||||
$sql_count = "SELECT COUNT(*) as total FROM (".$sql.") as combined";
|
$sql_count = "SELECT COUNT(*) as total FROM (".$sql.") as combined";
|
||||||
|
|
|
||||||
|
|
@ -93,174 +93,109 @@ class EUeR extends CommonObject
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Einnahmen aus bezahlten Kundenrechnungen
|
* Einnahmen aus Kundenzahlungen (Ist-Versteuerung / Zufluss-Prinzip)
|
||||||
*/
|
*/
|
||||||
private function berechneEinnahmenAusRechnungen($datum_von, $datum_bis)
|
private function berechneEinnahmenAusRechnungen($datum_von, $datum_bis)
|
||||||
{
|
{
|
||||||
global $conf;
|
global $conf;
|
||||||
|
|
||||||
// Bezahlte Rechnungen nach Zahlungsdatum (Zufluss-Prinzip!)
|
// Zahlungsdatum liegt in llx_paiement, nicht in llx_paiement_facture!
|
||||||
$sql = "SELECT f.rowid, f.ref, f.datef as rechnungsdatum,";
|
$sql = "SELECT pf.amount as zahlung, p.datep as zahlungsdatum,";
|
||||||
$sql .= " pf.datep as zahlungsdatum, pf.amount as zahlung,";
|
$sql .= " f.total_ht as netto, f.total_tva as ust, f.total_ttc as brutto";
|
||||||
$sql .= " f.total_ht as netto, f.total_tva as ust, f.total_ttc as brutto,";
|
$sql .= " FROM ".MAIN_DB_PREFIX."paiement as p";
|
||||||
$sql .= " s.nom as kunde,";
|
$sql .= " INNER JOIN ".MAIN_DB_PREFIX."paiement_facture as pf ON p.rowid = pf.fk_paiement";
|
||||||
$sql .= " fd.tva_tx as ust_satz, fd.total_ht as zeile_netto, fd.total_tva as zeile_ust";
|
$sql .= " INNER JOIN ".MAIN_DB_PREFIX."facture as f ON pf.fk_facture = f.rowid";
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX."facture as f";
|
|
||||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON f.fk_soc = s.rowid";
|
|
||||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."paiement_facture as pf ON pf.fk_facture = f.rowid";
|
|
||||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."facturedet as fd ON fd.fk_facture = f.rowid";
|
|
||||||
$sql .= " WHERE f.entity = ".((int) $conf->entity);
|
$sql .= " WHERE f.entity = ".((int) $conf->entity);
|
||||||
$sql .= " AND f.fk_statut IN (2, 3)"; // Bezahlt oder teilbezahlt
|
$sql .= " AND p.datep BETWEEN '".$this->db->escape($datum_von)."' AND '".$this->db->escape($datum_bis)."'";
|
||||||
$sql .= " AND pf.datep BETWEEN '".$this->db->escape($datum_von)."' AND '".$this->db->escape($datum_bis)."'";
|
|
||||||
$sql .= " ORDER BY pf.datep";
|
|
||||||
|
|
||||||
$resql = $this->db->query($sql);
|
$resql = $this->db->query($sql);
|
||||||
if ($resql) {
|
if ($resql) {
|
||||||
$einnahmen_details = array();
|
$summe_brutto = 0;
|
||||||
|
$summe_netto = 0;
|
||||||
|
$summe_ust = 0;
|
||||||
|
$anzahl = 0;
|
||||||
|
|
||||||
while ($obj = $this->db->fetch_object($resql)) {
|
while ($obj = $this->db->fetch_object($resql)) {
|
||||||
$key = 'ust_'.(int)$obj->ust_satz;
|
// USt-Anteil aus der Rechnung berechnen (netto/brutto Verhältnis)
|
||||||
if (!isset($einnahmen_details[$key])) {
|
if ($obj->brutto != 0) {
|
||||||
$einnahmen_details[$key] = array(
|
$zahlung_netto = $obj->zahlung * ($obj->netto / $obj->brutto);
|
||||||
'bezeichnung' => 'Erlöse '.(int)$obj->ust_satz.'% USt',
|
$zahlung_ust = $obj->zahlung * ($obj->ust / $obj->brutto);
|
||||||
'netto' => 0,
|
} else {
|
||||||
'ust' => 0,
|
$zahlung_netto = $obj->zahlung / 1.19;
|
||||||
'brutto' => 0,
|
$zahlung_ust = $obj->zahlung - $zahlung_netto;
|
||||||
'ust_satz' => (int)$obj->ust_satz,
|
|
||||||
'anzahl' => 0
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
$einnahmen_details[$key]['netto'] += $obj->zahlung / (1 + $obj->ust_satz/100);
|
|
||||||
$einnahmen_details[$key]['ust'] += $obj->zahlung - ($obj->zahlung / (1 + $obj->ust_satz/100));
|
$summe_brutto += $obj->zahlung;
|
||||||
$einnahmen_details[$key]['brutto'] += $obj->zahlung;
|
$summe_netto += $zahlung_netto;
|
||||||
$einnahmen_details[$key]['anzahl']++;
|
$summe_ust += $zahlung_ust;
|
||||||
|
$anzahl++;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($einnahmen_details as $key => $detail) {
|
if ($anzahl > 0) {
|
||||||
$this->einnahmen[$key] = $detail;
|
$this->einnahmen['zahlungseingaenge'] = array(
|
||||||
$this->summe_einnahmen += $detail['netto'];
|
'bezeichnung' => 'Betriebseinnahmen (Zahlungseingang)',
|
||||||
$this->ust_summe += $detail['ust'];
|
'netto' => $summe_netto,
|
||||||
}
|
'ust' => $summe_ust,
|
||||||
}
|
'brutto' => $summe_brutto,
|
||||||
|
'ust_satz' => 19,
|
||||||
// Alternative: Wenn keine Zahlungen verknüpft, nimm Rechnungsdatum
|
'anzahl' => $anzahl
|
||||||
$sql2 = "SELECT f.rowid, f.ref, f.datef as datum,";
|
);
|
||||||
$sql2 .= " f.total_ht as netto, f.total_tva as ust, f.total_ttc as brutto,";
|
$this->summe_einnahmen += $summe_netto;
|
||||||
$sql2 .= " s.nom as kunde";
|
$this->ust_summe += $summe_ust;
|
||||||
$sql2 .= " FROM ".MAIN_DB_PREFIX."facture as f";
|
|
||||||
$sql2 .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON f.fk_soc = s.rowid";
|
|
||||||
$sql2 .= " LEFT JOIN ".MAIN_DB_PREFIX."paiement_facture as pf ON pf.fk_facture = f.rowid";
|
|
||||||
$sql2 .= " WHERE f.entity = ".((int) $conf->entity);
|
|
||||||
$sql2 .= " AND f.fk_statut IN (2, 3)";
|
|
||||||
$sql2 .= " AND f.datef BETWEEN '".$this->db->escape($datum_von)."' AND '".$this->db->escape($datum_bis)."'";
|
|
||||||
$sql2 .= " AND pf.rowid IS NULL"; // Keine Zahlungsverknüpfung
|
|
||||||
$sql2 .= " ORDER BY f.datef";
|
|
||||||
|
|
||||||
$resql2 = $this->db->query($sql2);
|
|
||||||
if ($resql2) {
|
|
||||||
while ($obj = $this->db->fetch_object($resql2)) {
|
|
||||||
$key = 'einnahmen_ohne_zahlung';
|
|
||||||
if (!isset($this->einnahmen[$key])) {
|
|
||||||
$this->einnahmen[$key] = array(
|
|
||||||
'bezeichnung' => 'Erlöse (Rechnungsdatum)',
|
|
||||||
'netto' => 0,
|
|
||||||
'ust' => 0,
|
|
||||||
'brutto' => 0,
|
|
||||||
'anzahl' => 0
|
|
||||||
);
|
|
||||||
}
|
|
||||||
$this->einnahmen[$key]['netto'] += $obj->netto;
|
|
||||||
$this->einnahmen[$key]['ust'] += $obj->ust;
|
|
||||||
$this->einnahmen[$key]['brutto'] += $obj->brutto;
|
|
||||||
$this->einnahmen[$key]['anzahl']++;
|
|
||||||
$this->summe_einnahmen += $obj->netto;
|
|
||||||
$this->ust_summe += $obj->ust;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ausgaben aus bezahlten Lieferantenrechnungen
|
* Ausgaben aus Lieferantenzahlungen (Ist-Versteuerung / Abfluss-Prinzip)
|
||||||
*/
|
*/
|
||||||
private function berechneAusgabenAusLieferantenrechnungen($datum_von, $datum_bis)
|
private function berechneAusgabenAusLieferantenrechnungen($datum_von, $datum_bis)
|
||||||
{
|
{
|
||||||
global $conf;
|
global $conf;
|
||||||
|
|
||||||
// Bezahlte Lieferantenrechnungen nach Zahlungsdatum (Abfluss-Prinzip!)
|
// Zahlungsdatum liegt in llx_paiementfourn, nicht in llx_paiementfourn_facturefourn!
|
||||||
$sql = "SELECT f.rowid, f.ref, f.ref_supplier, f.datef as rechnungsdatum,";
|
$sql = "SELECT pf.amount as zahlung, p.datep as zahlungsdatum,";
|
||||||
$sql .= " pf.datep as zahlungsdatum, pf.amount as zahlung,";
|
$sql .= " f.total_ht as netto, f.total_tva as vst, f.total_ttc as brutto";
|
||||||
$sql .= " f.total_ht as netto, f.total_tva as vst, f.total_ttc as brutto,";
|
$sql .= " FROM ".MAIN_DB_PREFIX."paiementfourn as p";
|
||||||
$sql .= " s.nom as lieferant,";
|
$sql .= " INNER JOIN ".MAIN_DB_PREFIX."paiementfourn_facturefourn as pf ON p.rowid = pf.fk_paiementfourn";
|
||||||
$sql .= " fd.tva_tx as vst_satz";
|
$sql .= " INNER JOIN ".MAIN_DB_PREFIX."facture_fourn as f ON pf.fk_facturefourn = f.rowid";
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX."facture_fourn as f";
|
|
||||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON f.fk_soc = s.rowid";
|
|
||||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."paiementfourn_facturefourn as pf ON pf.fk_facturefourn = f.rowid";
|
|
||||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."facture_fourn_det as fd ON fd.fk_facture_fourn = f.rowid";
|
|
||||||
$sql .= " WHERE f.entity = ".((int) $conf->entity);
|
$sql .= " WHERE f.entity = ".((int) $conf->entity);
|
||||||
$sql .= " AND f.fk_statut IN (2)"; // Bezahlt
|
$sql .= " AND p.datep BETWEEN '".$this->db->escape($datum_von)."' AND '".$this->db->escape($datum_bis)."'";
|
||||||
$sql .= " AND pf.datep BETWEEN '".$this->db->escape($datum_von)."' AND '".$this->db->escape($datum_bis)."'";
|
|
||||||
$sql .= " ORDER BY pf.datep";
|
|
||||||
|
|
||||||
$resql = $this->db->query($sql);
|
$resql = $this->db->query($sql);
|
||||||
if ($resql) {
|
if ($resql) {
|
||||||
$ausgaben_details = array();
|
$summe_brutto = 0;
|
||||||
|
$summe_netto = 0;
|
||||||
|
$summe_vst = 0;
|
||||||
|
$anzahl = 0;
|
||||||
|
|
||||||
while ($obj = $this->db->fetch_object($resql)) {
|
while ($obj = $this->db->fetch_object($resql)) {
|
||||||
$vst_satz = isset($obj->vst_satz) ? (int)$obj->vst_satz : 19;
|
// VSt-Anteil aus der Rechnung berechnen (netto/brutto Verhältnis)
|
||||||
$key = 'vst_'.$vst_satz;
|
if ($obj->brutto != 0) {
|
||||||
if (!isset($ausgaben_details[$key])) {
|
$zahlung_netto = $obj->zahlung * ($obj->netto / $obj->brutto);
|
||||||
$ausgaben_details[$key] = array(
|
$zahlung_vst = $obj->zahlung * ($obj->vst / $obj->brutto);
|
||||||
'bezeichnung' => 'Betriebsausgaben '.$vst_satz.'% VSt',
|
} else {
|
||||||
'netto' => 0,
|
$zahlung_netto = $obj->zahlung / 1.19;
|
||||||
'vst' => 0,
|
$zahlung_vst = $obj->zahlung - $zahlung_netto;
|
||||||
'brutto' => 0,
|
|
||||||
'vst_satz' => $vst_satz,
|
|
||||||
'anzahl' => 0
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
$ausgaben_details[$key]['brutto'] += $obj->zahlung;
|
|
||||||
$ausgaben_details[$key]['netto'] += $obj->zahlung / (1 + $vst_satz/100);
|
$summe_brutto += $obj->zahlung;
|
||||||
$ausgaben_details[$key]['vst'] += $obj->zahlung - ($obj->zahlung / (1 + $vst_satz/100));
|
$summe_netto += $zahlung_netto;
|
||||||
$ausgaben_details[$key]['anzahl']++;
|
$summe_vst += $zahlung_vst;
|
||||||
|
$anzahl++;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($ausgaben_details as $key => $detail) {
|
if ($anzahl > 0) {
|
||||||
$this->ausgaben[$key] = $detail;
|
$this->ausgaben['zahlungsausgaenge'] = array(
|
||||||
$this->summe_ausgaben += $detail['netto'];
|
'bezeichnung' => 'Betriebsausgaben (Zahlungsausgang)',
|
||||||
$this->vst_summe += $detail['vst'];
|
'netto' => $summe_netto,
|
||||||
}
|
'vst' => $summe_vst,
|
||||||
}
|
'brutto' => $summe_brutto,
|
||||||
|
'vst_satz' => 19,
|
||||||
// Alternative: Ohne Zahlungsverknüpfung
|
'anzahl' => $anzahl
|
||||||
$sql2 = "SELECT f.rowid, f.ref, f.datef as datum,";
|
);
|
||||||
$sql2 .= " f.total_ht as netto, f.total_tva as vst, f.total_ttc as brutto,";
|
$this->summe_ausgaben += $summe_netto;
|
||||||
$sql2 .= " s.nom as lieferant";
|
$this->vst_summe += $summe_vst;
|
||||||
$sql2 .= " FROM ".MAIN_DB_PREFIX."facture_fourn as f";
|
|
||||||
$sql2 .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON f.fk_soc = s.rowid";
|
|
||||||
$sql2 .= " LEFT JOIN ".MAIN_DB_PREFIX."paiementfourn_facturefourn as pf ON pf.fk_facturefourn = f.rowid";
|
|
||||||
$sql2 .= " WHERE f.entity = ".((int) $conf->entity);
|
|
||||||
$sql2 .= " AND f.fk_statut IN (2)";
|
|
||||||
$sql2 .= " AND f.datef BETWEEN '".$this->db->escape($datum_von)."' AND '".$this->db->escape($datum_bis)."'";
|
|
||||||
$sql2 .= " AND pf.rowid IS NULL";
|
|
||||||
$sql2 .= " ORDER BY f.datef";
|
|
||||||
|
|
||||||
$resql2 = $this->db->query($sql2);
|
|
||||||
if ($resql2) {
|
|
||||||
while ($obj = $this->db->fetch_object($resql2)) {
|
|
||||||
$key = 'ausgaben_ohne_zahlung';
|
|
||||||
if (!isset($this->ausgaben[$key])) {
|
|
||||||
$this->ausgaben[$key] = array(
|
|
||||||
'bezeichnung' => 'Betriebsausgaben (Rechnungsdatum)',
|
|
||||||
'netto' => 0,
|
|
||||||
'vst' => 0,
|
|
||||||
'brutto' => 0,
|
|
||||||
'anzahl' => 0
|
|
||||||
);
|
|
||||||
}
|
|
||||||
$this->ausgaben[$key]['netto'] += $obj->netto;
|
|
||||||
$this->ausgaben[$key]['vst'] += $obj->vst;
|
|
||||||
$this->ausgaben[$key]['brutto'] += $obj->brutto;
|
|
||||||
$this->ausgaben[$key]['anzahl']++;
|
|
||||||
$this->summe_ausgaben += $obj->netto;
|
|
||||||
$this->vst_summe += $obj->vst;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -339,21 +274,23 @@ class EUeR extends CommonObject
|
||||||
global $conf;
|
global $conf;
|
||||||
$buchungen = array();
|
$buchungen = array();
|
||||||
|
|
||||||
// Kundenrechnungen (Einnahmen)
|
// Kundenrechnungen (Einnahmen) - nach Zahlungsdatum
|
||||||
|
// Zahlungsdatum liegt in llx_paiement!
|
||||||
if ($typ == 'alle' || $typ == 'einnahme') {
|
if ($typ == 'alle' || $typ == 'einnahme') {
|
||||||
$sql = "SELECT 'einnahme' as buchungstyp, f.rowid, f.ref,";
|
$sql = "SELECT 'einnahme' as buchungstyp, f.rowid, f.ref,";
|
||||||
$sql .= " COALESCE(pf.datep, f.datef) as datum,";
|
$sql .= " p.datep as datum,";
|
||||||
$sql .= " CONCAT('Rechnung ', f.ref, ' - ', s.nom) as beschreibung,";
|
$sql .= " CONCAT('Rechnung ', f.ref, ' - ', s.nom) as beschreibung,";
|
||||||
$sql .= " f.total_ht as netto, f.total_tva as steuer, f.total_ttc as brutto,";
|
$sql .= " pf.amount as brutto,";
|
||||||
|
$sql .= " (pf.amount * f.total_ht / f.total_ttc) as netto,";
|
||||||
|
$sql .= " (pf.amount * f.total_tva / f.total_ttc) as steuer,";
|
||||||
$sql .= " s.nom as partner, 'facture' as quelle";
|
$sql .= " s.nom as partner, 'facture' as quelle";
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX."facture as f";
|
$sql .= " FROM ".MAIN_DB_PREFIX."paiement as p";
|
||||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON f.fk_soc = s.rowid";
|
$sql .= " INNER JOIN ".MAIN_DB_PREFIX."paiement_facture as pf ON p.rowid = pf.fk_paiement";
|
||||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."paiement_facture as pf ON pf.fk_facture = f.rowid";
|
$sql .= " INNER JOIN ".MAIN_DB_PREFIX."facture as f ON pf.fk_facture = f.rowid";
|
||||||
|
$sql .= " INNER JOIN ".MAIN_DB_PREFIX."societe as s ON f.fk_soc = s.rowid";
|
||||||
$sql .= " WHERE f.entity = ".((int) $conf->entity);
|
$sql .= " WHERE f.entity = ".((int) $conf->entity);
|
||||||
$sql .= " AND f.fk_statut IN (2, 3)";
|
$sql .= " AND p.datep BETWEEN '".$this->db->escape($datum_von)."' AND '".$this->db->escape($datum_bis)."'";
|
||||||
$sql .= " AND COALESCE(pf.datep, f.datef) BETWEEN '".$this->db->escape($datum_von)."' AND '".$this->db->escape($datum_bis)."'";
|
$sql .= " ORDER BY p.datep";
|
||||||
$sql .= " GROUP BY f.rowid";
|
|
||||||
$sql .= " ORDER BY datum";
|
|
||||||
|
|
||||||
$resql = $this->db->query($sql);
|
$resql = $this->db->query($sql);
|
||||||
if ($resql) {
|
if ($resql) {
|
||||||
|
|
@ -363,21 +300,23 @@ class EUeR extends CommonObject
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Lieferantenrechnungen (Ausgaben)
|
// Lieferantenrechnungen (Ausgaben) - nach Zahlungsdatum
|
||||||
|
// Zahlungsdatum liegt in llx_paiementfourn!
|
||||||
if ($typ == 'alle' || $typ == 'ausgabe') {
|
if ($typ == 'alle' || $typ == 'ausgabe') {
|
||||||
$sql = "SELECT 'ausgabe' as buchungstyp, f.rowid, f.ref,";
|
$sql = "SELECT 'ausgabe' as buchungstyp, f.rowid, f.ref,";
|
||||||
$sql .= " COALESCE(pf.datep, f.datef) as datum,";
|
$sql .= " p.datep as datum,";
|
||||||
$sql .= " CONCAT('Lieferantenrechnung ', COALESCE(f.ref_supplier, f.ref), ' - ', s.nom) as beschreibung,";
|
$sql .= " CONCAT('Lieferantenrechnung ', COALESCE(f.ref_supplier, f.ref), ' - ', s.nom) as beschreibung,";
|
||||||
$sql .= " f.total_ht as netto, f.total_tva as steuer, f.total_ttc as brutto,";
|
$sql .= " pf.amount as brutto,";
|
||||||
|
$sql .= " (pf.amount * f.total_ht / f.total_ttc) as netto,";
|
||||||
|
$sql .= " (pf.amount * f.total_tva / f.total_ttc) as steuer,";
|
||||||
$sql .= " s.nom as partner, 'facture_fourn' as quelle";
|
$sql .= " s.nom as partner, 'facture_fourn' as quelle";
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX."facture_fourn as f";
|
$sql .= " FROM ".MAIN_DB_PREFIX."paiementfourn as p";
|
||||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON f.fk_soc = s.rowid";
|
$sql .= " INNER JOIN ".MAIN_DB_PREFIX."paiementfourn_facturefourn as pf ON p.rowid = pf.fk_paiementfourn";
|
||||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."paiementfourn_facturefourn as pf ON pf.fk_facturefourn = f.rowid";
|
$sql .= " INNER JOIN ".MAIN_DB_PREFIX."facture_fourn as f ON pf.fk_facturefourn = f.rowid";
|
||||||
|
$sql .= " INNER JOIN ".MAIN_DB_PREFIX."societe as s ON f.fk_soc = s.rowid";
|
||||||
$sql .= " WHERE f.entity = ".((int) $conf->entity);
|
$sql .= " WHERE f.entity = ".((int) $conf->entity);
|
||||||
$sql .= " AND f.fk_statut IN (2)";
|
$sql .= " AND p.datep BETWEEN '".$this->db->escape($datum_von)."' AND '".$this->db->escape($datum_bis)."'";
|
||||||
$sql .= " AND COALESCE(pf.datep, f.datef) BETWEEN '".$this->db->escape($datum_von)."' AND '".$this->db->escape($datum_bis)."'";
|
$sql .= " ORDER BY p.datep";
|
||||||
$sql .= " GROUP BY f.rowid";
|
|
||||||
$sql .= " ORDER BY datum";
|
|
||||||
|
|
||||||
$resql = $this->db->query($sql);
|
$resql = $this->db->query($sql);
|
||||||
if ($resql) {
|
if ($resql) {
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@ class modSteuer extends DolibarrModules
|
||||||
$this->editor_squarred_logo = ''; // Must be image filename into the module/img directory followed with @modulename. Example: 'myimage.png@steuer'
|
$this->editor_squarred_logo = ''; // Must be image filename into the module/img directory followed with @modulename. Example: 'myimage.png@steuer'
|
||||||
|
|
||||||
// Possible values for version are: 'development', 'experimental', 'dolibarr', 'dolibarr_deprecated', 'experimental_deprecated' or a version string like 'x.y.z'
|
// Possible values for version are: 'development', 'experimental', 'dolibarr', 'dolibarr_deprecated', 'experimental_deprecated' or a version string like 'x.y.z'
|
||||||
$this->version = '1.0';
|
$this->version = '1.1';
|
||||||
// Url to the file with your last numberversion of this module
|
// Url to the file with your last numberversion of this module
|
||||||
//$this->url_last_version = 'http://www.example.com/versionmodule.txt';
|
//$this->url_last_version = 'http://www.example.com/versionmodule.txt';
|
||||||
|
|
||||||
|
|
@ -158,7 +158,7 @@ class modSteuer extends DolibarrModules
|
||||||
// Prerequisites
|
// Prerequisites
|
||||||
$this->phpmin = array(7, 1); // Minimum version of PHP required by module
|
$this->phpmin = array(7, 1); // Minimum version of PHP required by module
|
||||||
// $this->phpmax = array(8, 0); // Maximum version of PHP required by module
|
// $this->phpmax = array(8, 0); // Maximum version of PHP required by module
|
||||||
$this->need_dolibarr_version = array(19, -3); // Minimum version of Dolibarr required by module
|
$this->need_dolibarr_version = array(14, 0); // Minimum version of Dolibarr required by module
|
||||||
// $this->max_dolibarr_version = array(19, -3); // Maximum version of Dolibarr required by module
|
// $this->max_dolibarr_version = array(19, -3); // Maximum version of Dolibarr required by module
|
||||||
$this->need_javascript_ajax = 0;
|
$this->need_javascript_ajax = 0;
|
||||||
|
|
||||||
|
|
@ -318,37 +318,21 @@ class modSteuer extends DolibarrModules
|
||||||
// Main menu entries to add
|
// Main menu entries to add
|
||||||
$this->menu = array();
|
$this->menu = array();
|
||||||
$r = 0;
|
$r = 0;
|
||||||
// Add here entries to declare new menus
|
|
||||||
/* BEGIN MODULEBUILDER TOPMENU */
|
|
||||||
$this->menu[$r++] = array(
|
|
||||||
'fk_menu' => '', // Will be stored into mainmenu + leftmenu. Use '' if this is a top menu. For left menu, use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode
|
|
||||||
'type' => 'top', // This is a Top menu entry
|
|
||||||
'titre' => 'ModuleSteuerName',
|
|
||||||
'prefix' => img_picto('', $this->picto, 'class="pictofixedwidth valignmiddle"'),
|
|
||||||
'mainmenu' => 'steuer',
|
|
||||||
'leftmenu' => '',
|
|
||||||
'url' => '/steuer/steuerindex.php',
|
|
||||||
'langs' => 'steuer@steuer', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
|
|
||||||
'position' => 1000 + $r,
|
|
||||||
'enabled' => 'isModEnabled("steuer")', // Define condition to show or hide menu entry. Use 'isModEnabled("steuer")' if entry must be visible if module is enabled.
|
|
||||||
'perms' => '1', // Use 'perms'=>'$user->hasRight("steuer", "myobject", "read")' if you want your menu with a permission rules
|
|
||||||
'target' => '',
|
|
||||||
'user' => 2, // 0=Menu for internal users, 1=external users, 2=both
|
|
||||||
);
|
|
||||||
/* END MODULEBUILDER TOPMENU */
|
|
||||||
|
|
||||||
|
// Kein Top-Menü - stattdessen Eintrag unter Buchhaltung (accountancy)
|
||||||
/* BEGIN MODULEBUILDER LEFTMENU */
|
/* BEGIN MODULEBUILDER LEFTMENU */
|
||||||
// EÜR Übersicht
|
|
||||||
|
// Haupteintrag unter Buchhaltung
|
||||||
$this->menu[$r++] = array(
|
$this->menu[$r++] = array(
|
||||||
'fk_menu' => 'fk_mainmenu=steuer',
|
'fk_menu' => 'fk_mainmenu=accountancy',
|
||||||
'type' => 'left',
|
'type' => 'left',
|
||||||
'titre' => 'EUeRUebersicht',
|
'titre' => 'EUeR',
|
||||||
'prefix' => img_picto('', 'fa-chart-pie', 'class="pictofixedwidth"'),
|
'prefix' => img_picto('', 'fa-calculator', 'class="pictofixedwidth"'),
|
||||||
'mainmenu' => 'steuer',
|
'mainmenu' => 'accountancy',
|
||||||
'leftmenu' => 'euer_uebersicht',
|
'leftmenu' => 'steuer_euer',
|
||||||
'url' => '/steuer/steuerindex.php',
|
'url' => '/steuer/steuerindex.php',
|
||||||
'langs' => 'steuer@steuer',
|
'langs' => 'steuer@steuer',
|
||||||
'position' => 1000 + $r,
|
'position' => 2000 + $r,
|
||||||
'enabled' => 'isModEnabled("steuer")',
|
'enabled' => 'isModEnabled("steuer")',
|
||||||
'perms' => '1',
|
'perms' => '1',
|
||||||
'target' => '',
|
'target' => '',
|
||||||
|
|
@ -356,30 +340,14 @@ class modSteuer extends DolibarrModules
|
||||||
);
|
);
|
||||||
// Buchungen
|
// Buchungen
|
||||||
$this->menu[$r++] = array(
|
$this->menu[$r++] = array(
|
||||||
'fk_menu' => 'fk_mainmenu=steuer',
|
'fk_menu' => 'fk_mainmenu=accountancy,fk_leftmenu=steuer_euer',
|
||||||
'type' => 'left',
|
'type' => 'left',
|
||||||
'titre' => 'Buchungen',
|
'titre' => 'Buchungen',
|
||||||
'prefix' => img_picto('', 'fa-list', 'class="pictofixedwidth"'),
|
'mainmenu' => 'accountancy',
|
||||||
'mainmenu' => 'steuer',
|
'leftmenu' => 'steuer_buchungen',
|
||||||
'leftmenu' => 'buchungen',
|
|
||||||
'url' => '/steuer/buchung_list.php',
|
'url' => '/steuer/buchung_list.php',
|
||||||
'langs' => 'steuer@steuer',
|
'langs' => 'steuer@steuer',
|
||||||
'position' => 1000 + $r,
|
'position' => 2000 + $r,
|
||||||
'enabled' => 'isModEnabled("steuer")',
|
|
||||||
'perms' => '1',
|
|
||||||
'target' => '',
|
|
||||||
'user' => 2,
|
|
||||||
);
|
|
||||||
// Neue Buchung
|
|
||||||
$this->menu[$r++] = array(
|
|
||||||
'fk_menu' => 'fk_mainmenu=steuer,fk_leftmenu=buchungen',
|
|
||||||
'type' => 'left',
|
|
||||||
'titre' => 'NeueBuchung',
|
|
||||||
'mainmenu' => 'steuer',
|
|
||||||
'leftmenu' => 'neue_buchung',
|
|
||||||
'url' => '/steuer/buchung_card.php?action=create',
|
|
||||||
'langs' => 'steuer@steuer',
|
|
||||||
'position' => 1000 + $r,
|
|
||||||
'enabled' => 'isModEnabled("steuer")',
|
'enabled' => 'isModEnabled("steuer")',
|
||||||
'perms' => '1',
|
'perms' => '1',
|
||||||
'target' => '',
|
'target' => '',
|
||||||
|
|
@ -387,15 +355,14 @@ class modSteuer extends DolibarrModules
|
||||||
);
|
);
|
||||||
// Anlage EÜR
|
// Anlage EÜR
|
||||||
$this->menu[$r++] = array(
|
$this->menu[$r++] = array(
|
||||||
'fk_menu' => 'fk_mainmenu=steuer',
|
'fk_menu' => 'fk_mainmenu=accountancy,fk_leftmenu=steuer_euer',
|
||||||
'type' => 'left',
|
'type' => 'left',
|
||||||
'titre' => 'AnlageEUeR',
|
'titre' => 'AnlageEUeR',
|
||||||
'prefix' => img_picto('', 'fa-file-alt', 'class="pictofixedwidth"'),
|
'mainmenu' => 'accountancy',
|
||||||
'mainmenu' => 'steuer',
|
'leftmenu' => 'steuer_anlage',
|
||||||
'leftmenu' => 'anlage_euer',
|
|
||||||
'url' => '/steuer/euer_bericht.php',
|
'url' => '/steuer/euer_bericht.php',
|
||||||
'langs' => 'steuer@steuer',
|
'langs' => 'steuer@steuer',
|
||||||
'position' => 1000 + $r,
|
'position' => 2000 + $r,
|
||||||
'enabled' => 'isModEnabled("steuer")',
|
'enabled' => 'isModEnabled("steuer")',
|
||||||
'perms' => '1',
|
'perms' => '1',
|
||||||
'target' => '',
|
'target' => '',
|
||||||
|
|
@ -403,15 +370,14 @@ class modSteuer extends DolibarrModules
|
||||||
);
|
);
|
||||||
// UStVA
|
// UStVA
|
||||||
$this->menu[$r++] = array(
|
$this->menu[$r++] = array(
|
||||||
'fk_menu' => 'fk_mainmenu=steuer',
|
'fk_menu' => 'fk_mainmenu=accountancy,fk_leftmenu=steuer_euer',
|
||||||
'type' => 'left',
|
'type' => 'left',
|
||||||
'titre' => 'UStVA',
|
'titre' => 'UStVA',
|
||||||
'prefix' => img_picto('', 'fa-percent', 'class="pictofixedwidth"'),
|
'mainmenu' => 'accountancy',
|
||||||
'mainmenu' => 'steuer',
|
'leftmenu' => 'steuer_ustva',
|
||||||
'leftmenu' => 'ustva',
|
|
||||||
'url' => '/steuer/ustva.php',
|
'url' => '/steuer/ustva.php',
|
||||||
'langs' => 'steuer@steuer',
|
'langs' => 'steuer@steuer',
|
||||||
'position' => 1000 + $r,
|
'position' => 2000 + $r,
|
||||||
'enabled' => 'isModEnabled("steuer")',
|
'enabled' => 'isModEnabled("steuer")',
|
||||||
'perms' => '1',
|
'perms' => '1',
|
||||||
'target' => '',
|
'target' => '',
|
||||||
|
|
@ -419,15 +385,14 @@ class modSteuer extends DolibarrModules
|
||||||
);
|
);
|
||||||
// Gewerbesteuer
|
// Gewerbesteuer
|
||||||
$this->menu[$r++] = array(
|
$this->menu[$r++] = array(
|
||||||
'fk_menu' => 'fk_mainmenu=steuer',
|
'fk_menu' => 'fk_mainmenu=accountancy,fk_leftmenu=steuer_euer',
|
||||||
'type' => 'left',
|
'type' => 'left',
|
||||||
'titre' => 'Gewerbesteuer',
|
'titre' => 'Gewerbesteuer',
|
||||||
'prefix' => img_picto('', 'fa-building', 'class="pictofixedwidth"'),
|
'mainmenu' => 'accountancy',
|
||||||
'mainmenu' => 'steuer',
|
'leftmenu' => 'steuer_gewerbe',
|
||||||
'leftmenu' => 'gewerbesteuer',
|
|
||||||
'url' => '/steuer/gewerbesteuer.php',
|
'url' => '/steuer/gewerbesteuer.php',
|
||||||
'langs' => 'steuer@steuer',
|
'langs' => 'steuer@steuer',
|
||||||
'position' => 1000 + $r,
|
'position' => 2000 + $r,
|
||||||
'enabled' => 'isModEnabled("steuer")',
|
'enabled' => 'isModEnabled("steuer")',
|
||||||
'perms' => '1',
|
'perms' => '1',
|
||||||
'target' => '',
|
'target' => '',
|
||||||
|
|
@ -435,15 +400,14 @@ class modSteuer extends DolibarrModules
|
||||||
);
|
);
|
||||||
// WISO Export
|
// WISO Export
|
||||||
$this->menu[$r++] = array(
|
$this->menu[$r++] = array(
|
||||||
'fk_menu' => 'fk_mainmenu=steuer',
|
'fk_menu' => 'fk_mainmenu=accountancy,fk_leftmenu=steuer_euer',
|
||||||
'type' => 'left',
|
'type' => 'left',
|
||||||
'titre' => 'WISOExport',
|
'titre' => 'WISOExport',
|
||||||
'prefix' => img_picto('', 'fa-download', 'class="pictofixedwidth"'),
|
'mainmenu' => 'accountancy',
|
||||||
'mainmenu' => 'steuer',
|
'leftmenu' => 'steuer_wiso',
|
||||||
'leftmenu' => 'wiso_export',
|
|
||||||
'url' => '/steuer/export_wiso.php',
|
'url' => '/steuer/export_wiso.php',
|
||||||
'langs' => 'steuer@steuer',
|
'langs' => 'steuer@steuer',
|
||||||
'position' => 1000 + $r,
|
'position' => 2000 + $r,
|
||||||
'enabled' => 'isModEnabled("steuer")',
|
'enabled' => 'isModEnabled("steuer")',
|
||||||
'perms' => '1',
|
'perms' => '1',
|
||||||
'target' => '',
|
'target' => '',
|
||||||
|
|
@ -451,15 +415,14 @@ class modSteuer extends DolibarrModules
|
||||||
);
|
);
|
||||||
// Kontenplan
|
// Kontenplan
|
||||||
$this->menu[$r++] = array(
|
$this->menu[$r++] = array(
|
||||||
'fk_menu' => 'fk_mainmenu=steuer',
|
'fk_menu' => 'fk_mainmenu=accountancy,fk_leftmenu=steuer_euer',
|
||||||
'type' => 'left',
|
'type' => 'left',
|
||||||
'titre' => 'Kontenplan',
|
'titre' => 'Kontenplan',
|
||||||
'prefix' => img_picto('', 'fa-sitemap', 'class="pictofixedwidth"'),
|
'mainmenu' => 'accountancy',
|
||||||
'mainmenu' => 'steuer',
|
'leftmenu' => 'steuer_konten',
|
||||||
'leftmenu' => 'kontenplan',
|
|
||||||
'url' => '/steuer/konten.php',
|
'url' => '/steuer/konten.php',
|
||||||
'langs' => 'steuer@steuer',
|
'langs' => 'steuer@steuer',
|
||||||
'position' => 1000 + $r,
|
'position' => 2000 + $r,
|
||||||
'enabled' => 'isModEnabled("steuer")',
|
'enabled' => 'isModEnabled("steuer")',
|
||||||
'perms' => '1',
|
'perms' => '1',
|
||||||
'target' => '',
|
'target' => '',
|
||||||
|
|
|
||||||
|
|
@ -10,9 +10,9 @@ CREATE TABLE IF NOT EXISTS llx_steuer_konto (
|
||||||
rowid INTEGER AUTO_INCREMENT PRIMARY KEY,
|
rowid INTEGER AUTO_INCREMENT PRIMARY KEY,
|
||||||
kontonummer VARCHAR(10) NOT NULL,
|
kontonummer VARCHAR(10) NOT NULL,
|
||||||
bezeichnung VARCHAR(255) NOT NULL,
|
bezeichnung VARCHAR(255) NOT NULL,
|
||||||
kategorie VARCHAR(50) NOT NULL, -- 'einnahme', 'ausgabe', 'ust', 'vorsteuer'
|
kategorie VARCHAR(50) NOT NULL,
|
||||||
euer_zeile INTEGER DEFAULT NULL, -- Zeile in Anlage EÜR
|
euer_zeile INTEGER DEFAULT NULL,
|
||||||
ust_kennzeichen VARCHAR(10) DEFAULT NULL, -- USt-Kennzeichen für UStVA
|
ust_kennzeichen VARCHAR(10) DEFAULT NULL,
|
||||||
aktiv TINYINT(1) DEFAULT 1,
|
aktiv TINYINT(1) DEFAULT 1,
|
||||||
entity INTEGER DEFAULT 1,
|
entity INTEGER DEFAULT 1,
|
||||||
UNIQUE KEY uk_konto_nummer (kontonummer, entity)
|
UNIQUE KEY uk_konto_nummer (kontonummer, entity)
|
||||||
|
|
@ -23,26 +23,26 @@ CREATE TABLE IF NOT EXISTS llx_steuer_konto (
|
||||||
-- ============================================================================
|
-- ============================================================================
|
||||||
CREATE TABLE IF NOT EXISTS llx_steuer_buchung (
|
CREATE TABLE IF NOT EXISTS llx_steuer_buchung (
|
||||||
rowid INTEGER AUTO_INCREMENT PRIMARY KEY,
|
rowid INTEGER AUTO_INCREMENT PRIMARY KEY,
|
||||||
ref VARCHAR(30) NOT NULL, -- Buchungsnummer
|
ref VARCHAR(30) NOT NULL,
|
||||||
datum DATE NOT NULL, -- Belegdatum
|
datum DATE NOT NULL,
|
||||||
belegnummer VARCHAR(50) DEFAULT NULL, -- Externe Belegnummer
|
belegnummer VARCHAR(50) DEFAULT NULL,
|
||||||
beschreibung VARCHAR(255) NOT NULL,
|
beschreibung VARCHAR(255) NOT NULL,
|
||||||
fk_konto INTEGER NOT NULL, -- Verweis auf llx_steuer_konto
|
fk_konto INTEGER NOT NULL,
|
||||||
betrag_netto DOUBLE(24,8) DEFAULT 0,
|
betrag_netto DECIMAL(24,8) DEFAULT 0,
|
||||||
betrag_ust DOUBLE(24,8) DEFAULT 0, -- USt/VSt Betrag
|
betrag_ust DECIMAL(24,8) DEFAULT 0,
|
||||||
betrag_brutto DOUBLE(24,8) DEFAULT 0,
|
betrag_brutto DECIMAL(24,8) DEFAULT 0,
|
||||||
ust_satz DOUBLE(5,2) DEFAULT 0, -- 0, 7, 19
|
ust_satz DECIMAL(5,2) DEFAULT 0,
|
||||||
typ VARCHAR(20) NOT NULL, -- 'einnahme', 'ausgabe'
|
typ VARCHAR(20) NOT NULL,
|
||||||
zahlungsart VARCHAR(30) DEFAULT NULL, -- 'bar', 'bank', 'paypal', etc.
|
zahlungsart VARCHAR(30) DEFAULT NULL,
|
||||||
fk_soc INTEGER DEFAULT NULL, -- Verknüpfung zu Kunde/Lieferant
|
fk_soc INTEGER DEFAULT NULL,
|
||||||
fk_facture INTEGER DEFAULT NULL, -- Verknüpfung zu Rechnung
|
fk_facture INTEGER DEFAULT NULL,
|
||||||
fk_facture_fourn INTEGER DEFAULT NULL, -- Verknüpfung zu Lieferantenrechnung
|
fk_facture_fourn INTEGER DEFAULT NULL,
|
||||||
note_private TEXT,
|
note_private TEXT,
|
||||||
date_creation DATETIME,
|
date_creation DATETIME,
|
||||||
tms TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
tms TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
fk_user_creat INTEGER,
|
fk_user_creat INTEGER,
|
||||||
fk_user_modif INTEGER,
|
fk_user_modif INTEGER,
|
||||||
status TINYINT(4) DEFAULT 1, -- 0=Entwurf, 1=Gebucht
|
status TINYINT(4) DEFAULT 1,
|
||||||
entity INTEGER DEFAULT 1,
|
entity INTEGER DEFAULT 1,
|
||||||
INDEX idx_buchung_datum (datum),
|
INDEX idx_buchung_datum (datum),
|
||||||
INDEX idx_buchung_konto (fk_konto),
|
INDEX idx_buchung_konto (fk_konto),
|
||||||
|
|
@ -56,30 +56,21 @@ CREATE TABLE IF NOT EXISTS llx_steuer_buchung (
|
||||||
CREATE TABLE IF NOT EXISTS llx_steuer_ustva (
|
CREATE TABLE IF NOT EXISTS llx_steuer_ustva (
|
||||||
rowid INTEGER AUTO_INCREMENT PRIMARY KEY,
|
rowid INTEGER AUTO_INCREMENT PRIMARY KEY,
|
||||||
jahr INTEGER NOT NULL,
|
jahr INTEGER NOT NULL,
|
||||||
periode VARCHAR(10) NOT NULL, -- '01'-'12' für Monat, 'Q1'-'Q4' für Quartal
|
periode VARCHAR(10) NOT NULL,
|
||||||
periode_typ VARCHAR(10) NOT NULL, -- 'monat' oder 'quartal'
|
periode_typ VARCHAR(10) NOT NULL,
|
||||||
|
kz81 DECIMAL(24,8) DEFAULT 0,
|
||||||
-- Lieferungen und Leistungen
|
kz86 DECIMAL(24,8) DEFAULT 0,
|
||||||
kz81 DOUBLE(24,8) DEFAULT 0, -- Steuerpfl. Umsätze 19%
|
kz35 DECIMAL(24,8) DEFAULT 0,
|
||||||
kz86 DOUBLE(24,8) DEFAULT 0, -- Steuerpfl. Umsätze 7%
|
kz36 DECIMAL(24,8) DEFAULT 0,
|
||||||
kz35 DOUBLE(24,8) DEFAULT 0, -- Steuerpfl. Umsätze andere Sätze
|
kz41 DECIMAL(24,8) DEFAULT 0,
|
||||||
kz36 DOUBLE(24,8) DEFAULT 0, -- USt auf Kz35
|
kz44 DECIMAL(24,8) DEFAULT 0,
|
||||||
|
kz66 DECIMAL(24,8) DEFAULT 0,
|
||||||
-- Steuerfreie Umsätze
|
kz61 DECIMAL(24,8) DEFAULT 0,
|
||||||
kz41 DOUBLE(24,8) DEFAULT 0, -- Innergemeinschaftl. Lieferungen
|
kz67 DECIMAL(24,8) DEFAULT 0,
|
||||||
kz44 DOUBLE(24,8) DEFAULT 0, -- Steuerfreie Ausfuhrlieferungen
|
ust_summe DECIMAL(24,8) DEFAULT 0,
|
||||||
|
vst_summe DECIMAL(24,8) DEFAULT 0,
|
||||||
-- Vorsteuer
|
zahllast DECIMAL(24,8) DEFAULT 0,
|
||||||
kz66 DOUBLE(24,8) DEFAULT 0, -- Vorsteuer aus Rechnungen
|
status TINYINT(4) DEFAULT 0,
|
||||||
kz61 DOUBLE(24,8) DEFAULT 0, -- Vorsteuer aus igE
|
|
||||||
kz67 DOUBLE(24,8) DEFAULT 0, -- Vorsteuer nach § 13b
|
|
||||||
|
|
||||||
-- Berechnung
|
|
||||||
ust_summe DOUBLE(24,8) DEFAULT 0, -- Summe USt
|
|
||||||
vst_summe DOUBLE(24,8) DEFAULT 0, -- Summe VSt
|
|
||||||
zahllast DOUBLE(24,8) DEFAULT 0, -- USt - VSt (positiv = Zahllast)
|
|
||||||
|
|
||||||
status TINYINT(4) DEFAULT 0, -- 0=Entwurf, 1=Berechnet, 2=Übermittelt
|
|
||||||
uebermittelt_am DATE DEFAULT NULL,
|
uebermittelt_am DATE DEFAULT NULL,
|
||||||
note_private TEXT,
|
note_private TEXT,
|
||||||
date_creation DATETIME,
|
date_creation DATETIME,
|
||||||
|
|
@ -95,15 +86,15 @@ CREATE TABLE IF NOT EXISTS llx_steuer_ustva (
|
||||||
CREATE TABLE IF NOT EXISTS llx_steuer_gewerbe (
|
CREATE TABLE IF NOT EXISTS llx_steuer_gewerbe (
|
||||||
rowid INTEGER AUTO_INCREMENT PRIMARY KEY,
|
rowid INTEGER AUTO_INCREMENT PRIMARY KEY,
|
||||||
jahr INTEGER NOT NULL,
|
jahr INTEGER NOT NULL,
|
||||||
gewinn_euer DOUBLE(24,8) DEFAULT 0, -- Gewinn aus EÜR
|
gewinn_euer DECIMAL(24,8) DEFAULT 0,
|
||||||
hinzurechnungen DOUBLE(24,8) DEFAULT 0, -- § 8 GewStG
|
hinzurechnungen DECIMAL(24,8) DEFAULT 0,
|
||||||
kuerzungen DOUBLE(24,8) DEFAULT 0, -- § 9 GewStG
|
kuerzungen DECIMAL(24,8) DEFAULT 0,
|
||||||
gewerbeertrag DOUBLE(24,8) DEFAULT 0, -- Nach Freibetrag
|
gewerbeertrag DECIMAL(24,8) DEFAULT 0,
|
||||||
freibetrag DOUBLE(24,8) DEFAULT 24500, -- Freibetrag Einzelunternehmen
|
freibetrag DECIMAL(24,8) DEFAULT 24500,
|
||||||
hebesatz DOUBLE(5,2) DEFAULT 400, -- Gemeinde-Hebesatz in %
|
hebesatz DECIMAL(5,2) DEFAULT 400,
|
||||||
steuermessbetrag DOUBLE(24,8) DEFAULT 0,
|
steuermessbetrag DECIMAL(24,8) DEFAULT 0,
|
||||||
gewerbesteuer DOUBLE(24,8) DEFAULT 0,
|
gewerbesteuer DECIMAL(24,8) DEFAULT 0,
|
||||||
anrechnung_est DOUBLE(24,8) DEFAULT 0, -- Anrechnung auf ESt
|
anrechnung_est DECIMAL(24,8) DEFAULT 0,
|
||||||
status TINYINT(4) DEFAULT 0,
|
status TINYINT(4) DEFAULT 0,
|
||||||
note_private TEXT,
|
note_private TEXT,
|
||||||
date_creation DATETIME,
|
date_creation DATETIME,
|
||||||
|
|
@ -112,91 +103,3 @@ CREATE TABLE IF NOT EXISTS llx_steuer_gewerbe (
|
||||||
entity INTEGER DEFAULT 1,
|
entity INTEGER DEFAULT 1,
|
||||||
UNIQUE KEY uk_jahr (jahr, entity)
|
UNIQUE KEY uk_jahr (jahr, entity)
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB;
|
||||||
|
|
||||||
-- ============================================================================
|
|
||||||
-- Standard EÜR-Konten nach SKR03 einfügen
|
|
||||||
-- ============================================================================
|
|
||||||
|
|
||||||
-- EINNAHMEN
|
|
||||||
INSERT IGNORE INTO llx_steuer_konto (kontonummer, bezeichnung, kategorie, euer_zeile, ust_kennzeichen) VALUES
|
|
||||||
('8400', 'Erlöse 19% USt', 'einnahme', 14, '81'),
|
|
||||||
('8300', 'Erlöse 7% USt', 'einnahme', 14, '86'),
|
|
||||||
('8100', 'Steuerfreie Umsätze Inland', 'einnahme', 10, NULL),
|
|
||||||
('8120', 'Steuerfreie igL', 'einnahme', 11, '41'),
|
|
||||||
('8150', 'Steuerfreie Ausfuhrlieferungen', 'einnahme', 12, '44'),
|
|
||||||
('8200', 'Erlöse ohne USt §19', 'einnahme', 14, NULL),
|
|
||||||
('8500', 'Provisionserlöse', 'einnahme', 14, '81'),
|
|
||||||
('8600', 'Sonstige Erlöse', 'einnahme', 16, '81'),
|
|
||||||
('8700', 'Erlöse aus VuV', 'einnahme', 17, NULL),
|
|
||||||
('8800', 'Zinserträge', 'einnahme', 18, NULL),
|
|
||||||
('8900', 'Privatentnahmen Sachen', 'einnahme', 19, '81'),
|
|
||||||
('8910', 'Private Kfz-Nutzung', 'einnahme', 19, '81'),
|
|
||||||
('8920', 'Private Telefonnutzung', 'einnahme', 19, '81');
|
|
||||||
|
|
||||||
-- AUSGABEN - Wareneinkauf
|
|
||||||
INSERT IGNORE INTO llx_steuer_konto (kontonummer, bezeichnung, kategorie, euer_zeile, ust_kennzeichen) VALUES
|
|
||||||
('3400', 'Wareneingang 19% VSt', 'ausgabe', 26, '66'),
|
|
||||||
('3300', 'Wareneingang 7% VSt', 'ausgabe', 26, '66'),
|
|
||||||
('3100', 'Wareneingang steuerfrei', 'ausgabe', 26, NULL);
|
|
||||||
|
|
||||||
-- AUSGABEN - Personal
|
|
||||||
INSERT IGNORE INTO llx_steuer_konto (kontonummer, bezeichnung, kategorie, euer_zeile, ust_kennzeichen) VALUES
|
|
||||||
('4100', 'Löhne und Gehälter', 'ausgabe', 31, NULL),
|
|
||||||
('4130', 'Gesetzliche Sozialaufwendungen', 'ausgabe', 32, NULL),
|
|
||||||
('4140', 'Freiwillige Sozialaufwendungen', 'ausgabe', 33, NULL);
|
|
||||||
|
|
||||||
-- AUSGABEN - Raumkosten
|
|
||||||
INSERT IGNORE INTO llx_steuer_konto (kontonummer, bezeichnung, kategorie, euer_zeile, ust_kennzeichen) VALUES
|
|
||||||
('4200', 'Raumkosten/Miete', 'ausgabe', 34, '66'),
|
|
||||||
('4210', 'Miete Geschäftsräume', 'ausgabe', 34, '66'),
|
|
||||||
('4230', 'Heizung', 'ausgabe', 34, '66'),
|
|
||||||
('4240', 'Gas, Strom, Wasser', 'ausgabe', 34, '66'),
|
|
||||||
('4250', 'Reinigung', 'ausgabe', 34, '66'),
|
|
||||||
('4260', 'Instandhaltung Räume', 'ausgabe', 34, '66');
|
|
||||||
|
|
||||||
-- AUSGABEN - Sonstige Betriebsausgaben
|
|
||||||
INSERT IGNORE INTO llx_steuer_konto (kontonummer, bezeichnung, kategorie, euer_zeile, ust_kennzeichen) VALUES
|
|
||||||
('4500', 'Fahrzeugkosten', 'ausgabe', 51, '66'),
|
|
||||||
('4510', 'Kfz-Steuer', 'ausgabe', 51, NULL),
|
|
||||||
('4520', 'Kfz-Versicherung', 'ausgabe', 51, NULL),
|
|
||||||
('4530', 'Kraftstoff', 'ausgabe', 51, '66'),
|
|
||||||
('4540', 'Kfz-Reparaturen', 'ausgabe', 51, '66'),
|
|
||||||
('4580', 'Sonstige Kfz-Kosten', 'ausgabe', 51, '66'),
|
|
||||||
|
|
||||||
('4600', 'Werbekosten', 'ausgabe', 53, '66'),
|
|
||||||
('4610', 'Geschenke abzugsfähig', 'ausgabe', 54, '66'),
|
|
||||||
('4630', 'Geschenke nicht abzugsfähig', 'ausgabe', 55, '66'),
|
|
||||||
('4650', 'Bewirtungskosten 70%', 'ausgabe', 56, '66'),
|
|
||||||
('4660', 'Reisekosten Unternehmer', 'ausgabe', 57, NULL),
|
|
||||||
('4670', 'Reisekosten Arbeitnehmer', 'ausgabe', 58, '66'),
|
|
||||||
|
|
||||||
('4700', 'Porto', 'ausgabe', 49, '66'),
|
|
||||||
('4710', 'Telefon', 'ausgabe', 49, '66'),
|
|
||||||
('4750', 'Bürobedarf', 'ausgabe', 49, '66'),
|
|
||||||
('4780', 'Fremdleistungen', 'ausgabe', 49, '66'),
|
|
||||||
('4790', 'Sonstige Betriebsausgaben', 'ausgabe', 49, '66'),
|
|
||||||
|
|
||||||
('4800', 'Reparatur/Instandhaltung', 'ausgabe', 39, '66'),
|
|
||||||
('4830', 'Versicherungen', 'ausgabe', 46, NULL),
|
|
||||||
('4840', 'Beiträge IHK/Verbände', 'ausgabe', 47, NULL),
|
|
||||||
('4850', 'Fortbildungskosten', 'ausgabe', 48, '66'),
|
|
||||||
('4900', 'Rechts- und Beratungskosten', 'ausgabe', 50, '66'),
|
|
||||||
('4910', 'Buchführungskosten', 'ausgabe', 50, '66'),
|
|
||||||
('4920', 'Jahresabschlusskosten', 'ausgabe', 50, '66'),
|
|
||||||
('4940', 'Bankgebühren', 'ausgabe', 48, NULL),
|
|
||||||
('4950', 'Nebenkosten Geldverkehr', 'ausgabe', 48, NULL),
|
|
||||||
('4960', 'Miete für Einrichtungen', 'ausgabe', 38, '66'),
|
|
||||||
('4970', 'Leasing', 'ausgabe', 38, '66'),
|
|
||||||
('4980', 'Software/Lizenzen', 'ausgabe', 39, '66');
|
|
||||||
|
|
||||||
-- AUSGABEN - AfA
|
|
||||||
INSERT IGNORE INTO llx_steuer_konto (kontonummer, bezeichnung, kategorie, euer_zeile, ust_kennzeichen) VALUES
|
|
||||||
('4820', 'AfA Sachanlagen', 'ausgabe', 36, NULL),
|
|
||||||
('4822', 'AfA immaterielle WG', 'ausgabe', 37, NULL),
|
|
||||||
('4824', 'AfA GWG', 'ausgabe', 38, NULL),
|
|
||||||
('4826', 'Sonderabschreibungen', 'ausgabe', 38, NULL);
|
|
||||||
|
|
||||||
-- AUSGABEN - Zinsen
|
|
||||||
INSERT IGNORE INTO llx_steuer_konto (kontonummer, bezeichnung, kategorie, euer_zeile, ust_kennzeichen) VALUES
|
|
||||||
('2100', 'Zinsaufwendungen', 'ausgabe', 45, NULL),
|
|
||||||
('2110', 'Zinsen langfristige Darlehen', 'ausgabe', 45, NULL);
|
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,17 @@
|
||||||
-- Copyright (C) 2026 Eduard Wisch
|
-- Copyright (C) 2026 Eduard Wisch
|
||||||
-- Table for EÜR Buchungen
|
-- Table for EÜR Buchungen
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS llx_steuer_buchung (
|
CREATE TABLE llx_steuer_buchung (
|
||||||
rowid INTEGER AUTO_INCREMENT PRIMARY KEY,
|
rowid INTEGER AUTO_INCREMENT PRIMARY KEY,
|
||||||
ref VARCHAR(30) NOT NULL,
|
ref VARCHAR(30) NOT NULL,
|
||||||
datum DATE NOT NULL,
|
datum DATE NOT NULL,
|
||||||
belegnummer VARCHAR(50) DEFAULT NULL,
|
belegnummer VARCHAR(50) DEFAULT NULL,
|
||||||
beschreibung VARCHAR(255) NOT NULL,
|
beschreibung VARCHAR(255) NOT NULL,
|
||||||
fk_konto INTEGER NOT NULL,
|
fk_konto INTEGER NOT NULL,
|
||||||
betrag_netto DOUBLE(24,8) DEFAULT 0,
|
betrag_netto DECIMAL(24,8) DEFAULT 0,
|
||||||
betrag_ust DOUBLE(24,8) DEFAULT 0,
|
betrag_ust DECIMAL(24,8) DEFAULT 0,
|
||||||
betrag_brutto DOUBLE(24,8) DEFAULT 0,
|
betrag_brutto DECIMAL(24,8) DEFAULT 0,
|
||||||
ust_satz DOUBLE(5,2) DEFAULT 0,
|
ust_satz DECIMAL(5,2) DEFAULT 0,
|
||||||
typ VARCHAR(20) NOT NULL,
|
typ VARCHAR(20) NOT NULL,
|
||||||
zahlungsart VARCHAR(30) DEFAULT NULL,
|
zahlungsart VARCHAR(30) DEFAULT NULL,
|
||||||
fk_soc INTEGER DEFAULT NULL,
|
fk_soc INTEGER DEFAULT NULL,
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
-- Copyright (C) 2026 Eduard Wisch
|
-- Copyright (C) 2026 Eduard Wisch
|
||||||
-- Table for Gewerbesteuer
|
-- Table for Gewerbesteuer
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS llx_steuer_gewerbe (
|
CREATE TABLE llx_steuer_gewerbe (
|
||||||
rowid INTEGER AUTO_INCREMENT PRIMARY KEY,
|
rowid INTEGER AUTO_INCREMENT PRIMARY KEY,
|
||||||
jahr INTEGER NOT NULL,
|
jahr INTEGER NOT NULL,
|
||||||
gewinn_euer DOUBLE(24,8) DEFAULT 0,
|
gewinn_euer DECIMAL(24,8) DEFAULT 0,
|
||||||
hinzurechnungen DOUBLE(24,8) DEFAULT 0,
|
hinzurechnungen DECIMAL(24,8) DEFAULT 0,
|
||||||
kuerzungen DOUBLE(24,8) DEFAULT 0,
|
kuerzungen DECIMAL(24,8) DEFAULT 0,
|
||||||
gewerbeertrag DOUBLE(24,8) DEFAULT 0,
|
gewerbeertrag DECIMAL(24,8) DEFAULT 0,
|
||||||
freibetrag DOUBLE(24,8) DEFAULT 24500,
|
freibetrag DECIMAL(24,8) DEFAULT 24500,
|
||||||
hebesatz DOUBLE(5,2) DEFAULT 400,
|
hebesatz DECIMAL(5,2) DEFAULT 400,
|
||||||
steuermessbetrag DOUBLE(24,8) DEFAULT 0,
|
steuermessbetrag DECIMAL(24,8) DEFAULT 0,
|
||||||
gewerbesteuer DOUBLE(24,8) DEFAULT 0,
|
gewerbesteuer DECIMAL(24,8) DEFAULT 0,
|
||||||
anrechnung_est DOUBLE(24,8) DEFAULT 0,
|
anrechnung_est DECIMAL(24,8) DEFAULT 0,
|
||||||
status TINYINT(4) DEFAULT 0,
|
status TINYINT(4) DEFAULT 0,
|
||||||
note_private TEXT,
|
note_private TEXT,
|
||||||
date_creation DATETIME,
|
date_creation DATETIME,
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
-- Copyright (C) 2026 Eduard Wisch
|
-- Copyright (C) 2026 Eduard Wisch
|
||||||
-- Table for EÜR Kontenrahmen (SKR03)
|
-- Table for EÜR Kontenrahmen (SKR03)
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS llx_steuer_konto (
|
CREATE TABLE llx_steuer_konto (
|
||||||
rowid INTEGER AUTO_INCREMENT PRIMARY KEY,
|
rowid INTEGER AUTO_INCREMENT PRIMARY KEY,
|
||||||
kontonummer VARCHAR(10) NOT NULL,
|
kontonummer VARCHAR(10) NOT NULL,
|
||||||
bezeichnung VARCHAR(255) NOT NULL,
|
bezeichnung VARCHAR(255) NOT NULL,
|
||||||
|
|
|
||||||
|
|
@ -1,23 +1,23 @@
|
||||||
-- Copyright (C) 2026 Eduard Wisch
|
-- Copyright (C) 2026 Eduard Wisch
|
||||||
-- Table for USt-Voranmeldung Perioden
|
-- Table for USt-Voranmeldung Perioden
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS llx_steuer_ustva (
|
CREATE TABLE llx_steuer_ustva (
|
||||||
rowid INTEGER AUTO_INCREMENT PRIMARY KEY,
|
rowid INTEGER AUTO_INCREMENT PRIMARY KEY,
|
||||||
jahr INTEGER NOT NULL,
|
jahr INTEGER NOT NULL,
|
||||||
periode VARCHAR(10) NOT NULL,
|
periode VARCHAR(10) NOT NULL,
|
||||||
periode_typ VARCHAR(10) NOT NULL,
|
periode_typ VARCHAR(10) NOT NULL,
|
||||||
kz81 DOUBLE(24,8) DEFAULT 0,
|
kz81 DECIMAL(24,8) DEFAULT 0,
|
||||||
kz86 DOUBLE(24,8) DEFAULT 0,
|
kz86 DECIMAL(24,8) DEFAULT 0,
|
||||||
kz35 DOUBLE(24,8) DEFAULT 0,
|
kz35 DECIMAL(24,8) DEFAULT 0,
|
||||||
kz36 DOUBLE(24,8) DEFAULT 0,
|
kz36 DECIMAL(24,8) DEFAULT 0,
|
||||||
kz41 DOUBLE(24,8) DEFAULT 0,
|
kz41 DECIMAL(24,8) DEFAULT 0,
|
||||||
kz44 DOUBLE(24,8) DEFAULT 0,
|
kz44 DECIMAL(24,8) DEFAULT 0,
|
||||||
kz66 DOUBLE(24,8) DEFAULT 0,
|
kz66 DECIMAL(24,8) DEFAULT 0,
|
||||||
kz61 DOUBLE(24,8) DEFAULT 0,
|
kz61 DECIMAL(24,8) DEFAULT 0,
|
||||||
kz67 DOUBLE(24,8) DEFAULT 0,
|
kz67 DECIMAL(24,8) DEFAULT 0,
|
||||||
ust_summe DOUBLE(24,8) DEFAULT 0,
|
ust_summe DECIMAL(24,8) DEFAULT 0,
|
||||||
vst_summe DOUBLE(24,8) DEFAULT 0,
|
vst_summe DECIMAL(24,8) DEFAULT 0,
|
||||||
zahllast DOUBLE(24,8) DEFAULT 0,
|
zahllast DECIMAL(24,8) DEFAULT 0,
|
||||||
status TINYINT(4) DEFAULT 0,
|
status TINYINT(4) DEFAULT 0,
|
||||||
uebermittelt_am DATE DEFAULT NULL,
|
uebermittelt_am DATE DEFAULT NULL,
|
||||||
note_private TEXT,
|
note_private TEXT,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue