mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2024-11-14 20:17:14 +01:00
Compare commits
11 Commits
0745cc19c2
...
91a39ea22b
Author | SHA1 | Date | |
---|---|---|---|
|
91a39ea22b | ||
|
3178f12821 | ||
|
05d7a394b4 | ||
|
d92105316e | ||
|
69ef3d4ed6 | ||
|
943bac22a3 | ||
|
bf242623c4 | ||
|
1f7b1af1f1 | ||
|
29040e71b5 | ||
|
a3255065e9 | ||
|
e3488040ec |
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2022 Andreas Palm
|
* SPDX-FileCopyrightText: 2022-2024 Andreas Palm
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
*/
|
*/
|
||||||
@ -14,6 +14,7 @@ use Xentral\Carrier\SendCloud\Data\ParcelCreation;
|
|||||||
use Xentral\Carrier\SendCloud\Data\ParcelResponse;
|
use Xentral\Carrier\SendCloud\Data\ParcelResponse;
|
||||||
use Xentral\Carrier\SendCloud\Data\SenderAddress;
|
use Xentral\Carrier\SendCloud\Data\SenderAddress;
|
||||||
use Xentral\Carrier\SendCloud\Data\ShippingProduct;
|
use Xentral\Carrier\SendCloud\Data\ShippingProduct;
|
||||||
|
use Xentral\Modules\ShippingMethod\Model\ShipmentStatus;
|
||||||
|
|
||||||
class SendCloudApi
|
class SendCloudApi
|
||||||
{
|
{
|
||||||
@ -118,6 +119,31 @@ class SendCloudApi
|
|||||||
return $output;
|
return $output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws SendcloudApiException
|
||||||
|
*/
|
||||||
|
public function GetTrackingStatus(string $trackingNumber): ShipmentStatus|null
|
||||||
|
{
|
||||||
|
$uri = self::PROD_BASE_URI . '/tracking/' . $trackingNumber;
|
||||||
|
$response = $this->sendRequest($uri);
|
||||||
|
$highest = null;
|
||||||
|
foreach ($response['body']->statuses as $status) {
|
||||||
|
switch ($status->parent_status) {
|
||||||
|
case 'announcing':
|
||||||
|
case 'ready-to-send':
|
||||||
|
if ($highest === null) $highest = ShipmentStatus::Announced;
|
||||||
|
break;
|
||||||
|
case 'to-sorting':
|
||||||
|
case 'at-sorting-centre':
|
||||||
|
case 'shipment-on-route':
|
||||||
|
case 'driver-on-route':
|
||||||
|
$highest = ShipmentStatus::EnRoute;
|
||||||
|
case 'delivered': return ShipmentStatus::Delivered;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $highest;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @throws SendcloudApiException
|
* @throws SendcloudApiException
|
||||||
*/
|
*/
|
||||||
|
14
classes/Modules/ShippingMethod/Model/ShipmentStatus.php
Normal file
14
classes/Modules/ShippingMethod/Model/ShipmentStatus.php
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// SPDX-FileCopyrightText: 2024 Andreas Palm
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
namespace Xentral\Modules\ShippingMethod\Model;
|
||||||
|
|
||||||
|
enum ShipmentStatus
|
||||||
|
{
|
||||||
|
case Announced;
|
||||||
|
case EnRoute;
|
||||||
|
case Delivered;
|
||||||
|
}
|
43
cronjobs/shipment_tracking.php
Normal file
43
cronjobs/shipment_tracking.php
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// SPDX-FileCopyrightText: 2024 Andreas Palm
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: LicenseRef-EGPL-3.1
|
||||||
|
|
||||||
|
use Xentral\Components\Database\Database;
|
||||||
|
use Xentral\Modules\ShippingMethod\Model\ShipmentStatus;
|
||||||
|
|
||||||
|
error_reporting(E_ERROR);
|
||||||
|
|
||||||
|
include_once dirname(__DIR__) . '/xentral_autoloader.php';
|
||||||
|
|
||||||
|
if(empty($app) || !($app instanceof ApplicationCore)){
|
||||||
|
$app = new ApplicationCore();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** @var Database $db */
|
||||||
|
$db = $app->Container->get('Database');
|
||||||
|
|
||||||
|
$shipments_sql = "SELECT CONCAT(va.id, ';', va.modul) module, vp.id, vp.tracking, vp.status
|
||||||
|
FROM versandpakete vp
|
||||||
|
JOIN versandarten va ON vp.versandart = va.type
|
||||||
|
WHERE status IN ('neu', 'versendet')";
|
||||||
|
$shipments = $db->fetchGroup($shipments_sql);
|
||||||
|
|
||||||
|
foreach ($shipments as $module => $vps) {
|
||||||
|
list($moduleId, $moduleName) = explode(';', $module,2);
|
||||||
|
$module = $app->erp->LoadVersandModul($moduleName, $moduleName);
|
||||||
|
|
||||||
|
foreach ($vps as $vp) {
|
||||||
|
$status = match ($module->GetShipmentStatus($vp['tracking'])) {
|
||||||
|
ShipmentStatus::Announced => 'neu',
|
||||||
|
ShipmentStatus::EnRoute => 'versendet',
|
||||||
|
ShipmentStatus::Delivered => 'abgeschlossen',
|
||||||
|
default => null,
|
||||||
|
};
|
||||||
|
if ($status === null || $status === $vp['status']) continue;
|
||||||
|
$db->perform('UPDATE versandpakete SET status = :status WHERE id = :id',
|
||||||
|
[':status' => $status, ':id' => $vp['id']]);
|
||||||
|
}
|
||||||
|
}
|
@ -194,6 +194,11 @@ class HTMLInput
|
|||||||
name=\"{$this->name}\" value=\"{$this->value}\" size=\"{$this->size}\"
|
name=\"{$this->name}\" value=\"{$this->value}\" size=\"{$this->size}\"
|
||||||
maxlength=\"{$this->maxlength}\" {$this->readonly} {$this->disabled}>";
|
maxlength=\"{$this->maxlength}\" {$this->readonly} {$this->disabled}>";
|
||||||
break;
|
break;
|
||||||
|
case "money":
|
||||||
|
$html = "<input type=\"number\" step=\"any\" id=\"{$this->id}\" class=\"{$this->class}\" tabindex=\"{$this->tabindex}\"
|
||||||
|
name=\"{$this->name}\" value=\"".preg_replace("/\"/",""",$this->value)."\" size=\"{$this->size}\" placeholder=\"{$this->placeholder}\"
|
||||||
|
maxlength=\"{$this->maxlength}\" {$this->readonly} {$this->disabled} [COMMONREADONLYINPUT]>";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $html;
|
return $html;
|
||||||
|
@ -13811,6 +13811,20 @@ function SendPaypalFromAuftrag($auftrag, $test = false)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function ReplaceKonto($db,$value,$fromform = null) {
|
||||||
|
$value = $this->app->DB->real_escape_string($value);
|
||||||
|
|
||||||
|
if ($db) {
|
||||||
|
$konto = explode(' ',$value)[0];
|
||||||
|
$kontoid = $this->app->DB->Select("SELECT id FROM konten WHERE kurzbezeichnung = '$konto' LIMIT 1");
|
||||||
|
return($kontoid);
|
||||||
|
} else {
|
||||||
|
$konto = $this->app->DB->Select("SELECT CONCAT(kurzbezeichnung,' ',bezeichnung) FROM konten WHERE id = '$value' LIMIT 1");
|
||||||
|
return($konto);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// @refactor FormHelper Komponente
|
// @refactor FormHelper Komponente
|
||||||
function ReplaceLieferant($db,$value,$fromform)
|
function ReplaceLieferant($db,$value,$fromform)
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2022 Andreas Palm
|
* SPDX-FileCopyrightText: 2022-2024 Andreas Palm
|
||||||
* SPDX-FileCopyrightText: 2019 Xentral (c) Xentral ERP Software GmbH, Fuggerstrasse 11, D-86150 Augsburg, Germany
|
* SPDX-FileCopyrightText: 2019 Xentral (c) Xentral ERP Software GmbH, Fuggerstrasse 11, D-86150 Augsburg, Germany
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: LicenseRef-EGPL-3.1
|
* SPDX-License-Identifier: LicenseRef-EGPL-3.1
|
||||||
@ -9,6 +9,7 @@
|
|||||||
use Xentral\Modules\ShippingMethod\Model\CreateShipmentResult;
|
use Xentral\Modules\ShippingMethod\Model\CreateShipmentResult;
|
||||||
use Xentral\Modules\ShippingMethod\Model\CustomsInfo;
|
use Xentral\Modules\ShippingMethod\Model\CustomsInfo;
|
||||||
use Xentral\Modules\ShippingMethod\Model\Product;
|
use Xentral\Modules\ShippingMethod\Model\Product;
|
||||||
|
use Xentral\Modules\ShippingMethod\Model\ShipmentStatus;
|
||||||
|
|
||||||
abstract class Versanddienstleister
|
abstract class Versanddienstleister
|
||||||
{
|
{
|
||||||
@ -504,4 +505,6 @@ abstract class Versanddienstleister
|
|||||||
* @return Product[]
|
* @return Product[]
|
||||||
*/
|
*/
|
||||||
public abstract function GetShippingProducts(): array;
|
public abstract function GetShippingProducts(): array;
|
||||||
|
|
||||||
|
public abstract function GetShipmentStatus(string $tracking): ShipmentStatus|null;
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2022 Andreas Palm
|
* SPDX-FileCopyrightText: 2022-2024 Andreas Palm
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: LicenseRef-EGPL-3.1
|
* SPDX-License-Identifier: LicenseRef-EGPL-3.1
|
||||||
*/
|
*/
|
||||||
@ -17,6 +17,7 @@ use Xentral\Carrier\Dhl\Data\ShipmentItem;
|
|||||||
use Xentral\Carrier\Dhl\DhlApi;
|
use Xentral\Carrier\Dhl\DhlApi;
|
||||||
use Xentral\Modules\ShippingMethod\Model\CreateShipmentResult;
|
use Xentral\Modules\ShippingMethod\Model\CreateShipmentResult;
|
||||||
use Xentral\Modules\ShippingMethod\Model\Product;
|
use Xentral\Modules\ShippingMethod\Model\Product;
|
||||||
|
use Xentral\Modules\ShippingMethod\Model\ShipmentStatus;
|
||||||
|
|
||||||
require_once(dirname(__DIR__).'/class.versanddienstleister.php');
|
require_once(dirname(__DIR__).'/class.versanddienstleister.php');
|
||||||
class Versandart_dhl extends Versanddienstleister{
|
class Versandart_dhl extends Versanddienstleister{
|
||||||
@ -245,4 +246,11 @@ class Versandart_dhl extends Versanddienstleister{
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function GetShipmentStatus(string $tracking): ShipmentStatus|null
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2022 Andreas Palm
|
* SPDX-FileCopyrightText: 2022-2024 Andreas Palm
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: LicenseRef-EGPL-3.1
|
* SPDX-License-Identifier: LicenseRef-EGPL-3.1
|
||||||
*/
|
*/
|
||||||
@ -17,6 +17,7 @@ use Xentral\Carrier\SendCloud\Data\ShippingMethod;
|
|||||||
use Xentral\Carrier\SendCloud\SendcloudApiException;
|
use Xentral\Carrier\SendCloud\SendcloudApiException;
|
||||||
use Xentral\Modules\ShippingMethod\Model\CreateShipmentResult;
|
use Xentral\Modules\ShippingMethod\Model\CreateShipmentResult;
|
||||||
use Xentral\Modules\ShippingMethod\Model\Product;
|
use Xentral\Modules\ShippingMethod\Model\Product;
|
||||||
|
use Xentral\Modules\ShippingMethod\Model\ShipmentStatus;
|
||||||
|
|
||||||
require_once dirname(__DIR__) . '/class.versanddienstleister.php';
|
require_once dirname(__DIR__) . '/class.versanddienstleister.php';
|
||||||
|
|
||||||
@ -190,5 +191,14 @@ class Versandart_sendcloud extends Versanddienstleister
|
|||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function GetShipmentStatus(string $tracking): ShipmentStatus|null
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
return $this->api->GetTrackingStatus($tracking);
|
||||||
|
} catch (SendcloudApiException) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -4014,6 +4014,17 @@ select a.kundennummer, (SELECT name FROM adresse a2 WHERE a2.kundennummer = a.ku
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
break;
|
break;
|
||||||
|
case "konto":
|
||||||
|
$cmd = $this->app->Secure->GetGET("cmd");
|
||||||
|
|
||||||
|
$arr = $this->app->DB->SelectArr("
|
||||||
|
SELECT CONCAT(kurzbezeichnung,' ',bezeichnung) as name FROM konten
|
||||||
|
WHERE (kurzbezeichnung LIKE '%$term%' OR bezeichnung LIKE '%$term%') ORDER by kurzbezeichnung");
|
||||||
|
|
||||||
|
$carr = !empty($arr)?count($arr):0;
|
||||||
|
for($i = 0; $i < $carr; $i++)
|
||||||
|
$newarr[] = $arr[$i]['name'];
|
||||||
|
break;
|
||||||
case "datevkonto":
|
case "datevkonto":
|
||||||
$arr = $this->app->DB->SelectArr("SELECT DISTINCT t.gegenkonto FROM
|
$arr = $this->app->DB->SelectArr("SELECT DISTINCT t.gegenkonto FROM
|
||||||
( (SELECT concat(datevkonto, ' ',bezeichnung) as gegenkonto FROM konten WHERE datevkonto <> 0 AND datevkonto <> '' AND aktiv = 1)
|
( (SELECT concat(datevkonto, ' ',bezeichnung) as gegenkonto FROM konten WHERE datevkonto <> 0 AND datevkonto <> '' AND aktiv = 1)
|
||||||
|
@ -6689,12 +6689,14 @@ Die Gesamtsumme stimmt nicht mehr mit ursprünglich festgelegten Betrag '.
|
|||||||
public function AuftragList()
|
public function AuftragList()
|
||||||
{
|
{
|
||||||
|
|
||||||
// refresh all open items
|
// refresh all open items if no cronjob is set
|
||||||
$openids = $this->app->DB->SelectArr("SELECT id from auftrag WHERE status <> 'abgeschlossen'");
|
if (!$this->app->DB->Select("SELECT id FROM prozessstarter WHERE parameter = 'autoversand_berechnung' AND aktiv = 1 LIMIT 1")) {
|
||||||
foreach ($openids as $openid) {
|
$openids = $this->app->DB->SelectArr("SELECT id from auftrag WHERE status <>'abgeschlossen' and status <>'storniert' and status <>'angelegt'");
|
||||||
$this->app->erp->AuftragAutoversandBerechnen($openid['id']);
|
foreach ($openids as $openid) {
|
||||||
}
|
$this->app->erp->AuftragAutoversandBerechnen($openid['id']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if($this->app->Secure->GetPOST('ausfuehren') && $this->app->erp->RechteVorhanden('auftrag', 'edit'))
|
if($this->app->Secure->GetPOST('ausfuehren') && $this->app->erp->RechteVorhanden('auftrag', 'edit'))
|
||||||
{
|
{
|
||||||
$drucker = $this->app->Secure->GetPOST('seldrucker');
|
$drucker = $this->app->Secure->GetPOST('seldrucker');
|
||||||
|
@ -1112,13 +1112,19 @@
|
|||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>{|Finanzbuchhaltung Einstellungen|}</legend>
|
<legend>{|Finanzbuchhaltung Einstellungen|}</legend>
|
||||||
<table width="100%">
|
<table width="100%">
|
||||||
<tr>
|
|
||||||
<td width="300">Buchungen erzeugen ab Datum:</td><td colspan="3"><input type="text" id= "fibu_buchungen_startdatum" name="fibu_buchungen_startdatum" size="10" value="[FIBU_BUCHUNGEN_STARTDATUM]"><i>Für die Nutzung mit dem Modul Buchhaltung-Buchungen (Zahlungseingang, Zahlungsstatus, Mahnwesen)</i></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
<tr>
|
||||||
<td width="300">Konto für Rechnung-Skontobuchungen:</td><td colspan="3"><input type="text" id= "rechnung_skonto_kontorahmen" name="rechnung_skonto_kontorahmen" size="10" value="[RECHNUNG_SKONTO_KONTORAHMEN]"><i>Auf dieses Sachkonto werden Skontobuchungen mithilfe der Funktion "Zahlungsstatus berechnen" im Rechnungsmodul gebucht</i></td>
|
<td width="300">Buchungen erzeugen ab Datum:</td>
|
||||||
</tr>
|
<td colspan="3"><input type="text" id="fibu_buchungen_startdatum" name="fibu_buchungen_startdatum" size="10" value="[FIBU_BUCHUNGEN_STARTDATUM]"><i>Für die Nutzung mit dem Modul Buchhaltung-Buchungen (Zahlungseingang, Zahlungsstatus, Mahnwesen)</i></td>
|
||||||
</table>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="300">Sachkonto für Rechnung-Skontobuchungen:</td>
|
||||||
|
<td colspan="3"><input type="text" id="rechnung_skonto_kontorahmen" name="rechnung_skonto_kontorahmen" size="20" value="[RECHNUNG_SKONTO_KONTORAHMEN]"><i>Auf dieses Sachkonto werden Skontobuchungen mithilfe der Funktion "Zahlungsstatus berechnen" im Rechnungsmodul gebucht</i></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="300">Geschäftskonto für Schnelleingabe:</td>
|
||||||
|
<td colspan="3"><input type="text" id="rechnung_schnelleingabe_konto" name="rechnung_schnelleingabe_konto" size="20" value="[RECHNUNG_SCHNELLEINGABE_KONTO]"><i>Auf dieses Geschäftskonto werden Zahlungen mithilfe der Funktion "Schnelleingabe" im Rechnungsmodul gebucht</i></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
</ul>
|
</ul>
|
||||||
<div id="tabs-1">
|
<div id="tabs-1">
|
||||||
<form method="post" action="#">
|
<form method="post" action="#">
|
||||||
<div class="filter-box filter-usersave">
|
<div class="filter-box filter-usersave" [ZU_MAHNEN_HIDDEN]>
|
||||||
<div class="filter-block filter-inline">
|
<div class="filter-block filter-inline">
|
||||||
<div class="filter-title">{|Filter|}</div>
|
<div class="filter-title">{|Filter|}</div>
|
||||||
<ul class="filter-list">
|
<ul class="filter-list">
|
||||||
|
@ -1044,7 +1044,7 @@ class Firmendaten {
|
|||||||
'arbeitsnachweis_header','arbeitsnachweis_footer','provisionsgutschrift_header','provisionsgutschrift_footer','proformarechnung_header','proformarechnung_footer','eu_lieferung_vermerk','export_lieferung_vermerk'
|
'arbeitsnachweis_header','arbeitsnachweis_footer','provisionsgutschrift_header','provisionsgutschrift_footer','proformarechnung_header','proformarechnung_footer','eu_lieferung_vermerk','export_lieferung_vermerk'
|
||||||
,'wareneingang_kamera_waage','layout_iconbar','passwort','host','port','mailssl','signatur','email','absendername','bcc1','bcc2','bcc3'
|
,'wareneingang_kamera_waage','layout_iconbar','passwort','host','port','mailssl','signatur','email','absendername','bcc1','bcc2','bcc3'
|
||||||
,'firmenfarbe','name','strasse','plz','ort','steuernummer','projekt','steuer_positionen_export','tabsnavigationfarbe','tabsnavigationfarbeschrift'
|
,'firmenfarbe','name','strasse','plz','ort','steuernummer','projekt','steuer_positionen_export','tabsnavigationfarbe','tabsnavigationfarbeschrift'
|
||||||
,"buchhaltung_berater","buchhaltung_mandant","buchhaltung_wj_beginn","buchhaltung_sachkontenlaenge", "fibu_buchungen_startdatum", "rechnung_skonto_kontorahmen"
|
,"buchhaltung_berater","buchhaltung_mandant","buchhaltung_wj_beginn","buchhaltung_sachkontenlaenge", "fibu_buchungen_startdatum", "rechnung_skonto_kontorahmen", "rechnung_schnelleingabe_konto"
|
||||||
);
|
);
|
||||||
|
|
||||||
if(isset($sql2a)){
|
if(isset($sql2a)){
|
||||||
@ -1384,6 +1384,7 @@ class Firmendaten {
|
|||||||
$this->app->YUI->DatePicker('fibu_buchungen_startdatum');
|
$this->app->YUI->DatePicker('fibu_buchungen_startdatum');
|
||||||
|
|
||||||
$this->app->YUI->AutoComplete('rechnung_skonto_kontorahmen', 'sachkonto');
|
$this->app->YUI->AutoComplete('rechnung_skonto_kontorahmen', 'sachkonto');
|
||||||
|
$this->app->YUI->AutoComplete('rechnung_schnelleingabe_konto', 'konto');
|
||||||
|
|
||||||
$this->app->Tpl->Parse('PAGE','firmendaten.tpl');
|
$this->app->Tpl->Parse('PAGE','firmendaten.tpl');
|
||||||
}
|
}
|
||||||
@ -1853,8 +1854,7 @@ class Firmendaten {
|
|||||||
// Fibu
|
// Fibu
|
||||||
$this->app->Tpl->Set('FIBU_BUCHUNGEN_STARTDATUM', $this->app->erp->ReplaceDatum(false,$data[0]['fibu_buchungen_startdatum'],false));
|
$this->app->Tpl->Set('FIBU_BUCHUNGEN_STARTDATUM', $this->app->erp->ReplaceDatum(false,$data[0]['fibu_buchungen_startdatum'],false));
|
||||||
$this->app->Tpl->Set('RECHNUNG_SKONTO_KONTORAHMEN', $this->app->erp->ReplaceKontorahmen(false,$data[0]['rechnung_skonto_kontorahmen']));
|
$this->app->Tpl->Set('RECHNUNG_SKONTO_KONTORAHMEN', $this->app->erp->ReplaceKontorahmen(false,$data[0]['rechnung_skonto_kontorahmen']));
|
||||||
|
$this->app->Tpl->Set('RECHNUNG_SCHNELLEINGABE_KONTO', $this->app->erp->ReplaceKonto(false,$data[0]['rechnung_schnelleingabe_konto']));
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2299,6 +2299,7 @@ class Firmendaten {
|
|||||||
|
|
||||||
$data['fibu_buchungen_startdatum'] = $this->app->erp->ReplaceDatum(true,$this->app->Secure->POST["fibu_buchungen_startdatum"],false);
|
$data['fibu_buchungen_startdatum'] = $this->app->erp->ReplaceDatum(true,$this->app->Secure->POST["fibu_buchungen_startdatum"],false);
|
||||||
$data['rechnung_skonto_kontorahmen'] = $this->app->erp->ReplaceKontorahmen(true,$this->app->Secure->POST["rechnung_skonto_kontorahmen"]);
|
$data['rechnung_skonto_kontorahmen'] = $this->app->erp->ReplaceKontorahmen(true,$this->app->Secure->POST["rechnung_skonto_kontorahmen"]);
|
||||||
|
$data['rechnung_schnelleingabe_konto'] = $this->app->erp->ReplaceKonto(true,$this->app->Secure->POST["rechnung_schnelleingabe_konto"]);
|
||||||
|
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,8 @@ class Mahnwesen {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
$this->app->ActionHandlerInit($this);
|
$this->app->ActionHandlerInit($this);
|
||||||
$this->app->ActionHandler("list", "mahnwesen_list");
|
$this->app->ActionHandler("list", "mahnwesen_list");
|
||||||
|
$this->app->ActionHandler("stufe_list", "mahnwesen_stufe_list");
|
||||||
$this->app->ActionHandler("create", "mahnwesen_edit"); // This automatically adds a "New" button
|
$this->app->ActionHandler("create", "mahnwesen_edit"); // This automatically adds a "New" button
|
||||||
$this->app->ActionHandler("edit", "mahnwesen_edit");
|
$this->app->ActionHandler("edit", "mahnwesen_edit");
|
||||||
$this->app->ActionHandler("einstellungen", "mahnwesen_einstellungen");
|
$this->app->ActionHandler("einstellungen", "mahnwesen_einstellungen");
|
||||||
@ -40,6 +41,8 @@ class Mahnwesen {
|
|||||||
// columns that are aligned right (numbers etc)
|
// columns that are aligned right (numbers etc)
|
||||||
// $alignright = array(4,5,6,7,8);
|
// $alignright = array(4,5,6,7,8);
|
||||||
|
|
||||||
|
$mahnwesen_stufe_filter = $this->app->DB->real_escape_string($this->app->User->GetParameter('mahnwesen_stufe_filter'));
|
||||||
|
|
||||||
$faellig_datum = "DATE_ADD(r.datum, INTERVAL r.zahlungszieltage DAY)";
|
$faellig_datum = "DATE_ADD(r.datum, INTERVAL r.zahlungszieltage DAY)";
|
||||||
$faellig_tage = "DATEDIFF(CURRENT_DATE,DATE_ADD(r.datum, INTERVAL r.zahlungszieltage DAY))";
|
$faellig_tage = "DATEDIFF(CURRENT_DATE,DATE_ADD(r.datum, INTERVAL r.zahlungszieltage DAY))";
|
||||||
$mahn_druck = "if(m.druck,'Ja','')";
|
$mahn_druck = "if(m.druck,'Ja','')";
|
||||||
@ -56,6 +59,8 @@ class Mahnwesen {
|
|||||||
|
|
||||||
$menu = "<table cellpadding=0 cellspacing=0><tr><td nowrap>" . "<a href=\"index.php?module=rechnung&action=edit&id=%value%\"><img src=\"./themes/{$app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a>" . "</td></tr></table>";
|
$menu = "<table cellpadding=0 cellspacing=0><tr><td nowrap>" . "<a href=\"index.php?module=rechnung&action=edit&id=%value%\"><img src=\"./themes/{$app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a>" . "</td></tr></table>";
|
||||||
|
|
||||||
|
$sql_tables = "rechnung r LEFT JOIN projekt p ON p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id LEFT JOIN auftrag au ON au.id = r.auftragid LEFT JOIN mahnwesen m ON r.mahnwesen = m.id";
|
||||||
|
|
||||||
$sql = "SELECT SQL_CALC_FOUND_ROWS
|
$sql = "SELECT SQL_CALC_FOUND_ROWS
|
||||||
r.id,
|
r.id,
|
||||||
$dropnbox,
|
$dropnbox,
|
||||||
@ -81,9 +86,13 @@ class Mahnwesen {
|
|||||||
if(r.mahnwesen_gesperrt,'Ja',''),
|
if(r.mahnwesen_gesperrt,'Ja',''),
|
||||||
REPLACE(r.mahnwesen_internebemerkung,'\r\n','<br> '),
|
REPLACE(r.mahnwesen_internebemerkung,'\r\n','<br> '),
|
||||||
r.id
|
r.id
|
||||||
FROM rechnung r LEFT JOIN projekt p ON p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id LEFT JOIN auftrag au ON au.id = r.auftragid LEFT JOIN mahnwesen m ON r.mahnwesen = m.id";
|
FROM ".$sql_tables;
|
||||||
|
|
||||||
$where = " r.belegnr <> ''";
|
$where = " r.belegnr <> '' AND r.status <> 'storniert'";
|
||||||
|
|
||||||
|
if (!empty($mahnwesen_stufe_filter)) {
|
||||||
|
$where .= " AND m.id = '".$mahnwesen_stufe_filter."' AND r.versendet_mahnwesen ";
|
||||||
|
}
|
||||||
|
|
||||||
// Toggle filters
|
// Toggle filters
|
||||||
$this->app->Tpl->Add('JQUERYREADY', "$('#zu_mahnen').click( function() { fnFilterColumn1( 0 ); } );");
|
$this->app->Tpl->Add('JQUERYREADY', "$('#zu_mahnen').click( function() { fnFilterColumn1( 0 ); } );");
|
||||||
@ -108,7 +117,7 @@ class Mahnwesen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$more_data1 = $app->Secure->GetGET("more_data1");
|
$more_data1 = $app->Secure->GetGET("more_data1");
|
||||||
if ($more_data1 == 1) {
|
if ($more_data1 == 1 && empty($mahnwesen_stufe_filter)) {
|
||||||
$where .= " AND NOT r.versendet_mahnwesen AND r.mahnwesen <> ''";
|
$where .= " AND NOT r.versendet_mahnwesen AND r.mahnwesen <> ''";
|
||||||
} else {
|
} else {
|
||||||
}
|
}
|
||||||
@ -126,8 +135,7 @@ class Mahnwesen {
|
|||||||
}
|
}
|
||||||
// END Toggle filters
|
// END Toggle filters
|
||||||
|
|
||||||
|
$count = "SELECT count(DISTINCT r.id) FROM ".$sql_tables." WHERE $where";
|
||||||
$count = "SELECT count(DISTINCT id) FROM rechnung r WHERE $where";
|
|
||||||
// $groupby = "";
|
// $groupby = "";
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@ -175,69 +183,14 @@ class Mahnwesen {
|
|||||||
}
|
}
|
||||||
return $erg;
|
return $erg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// For Tab-highlighting
|
||||||
|
function mahnwesen_stufe_list() {
|
||||||
|
$this->mahnwesen_list();
|
||||||
|
}
|
||||||
|
|
||||||
function mahnwesen_list() {
|
function mahnwesen_list() {
|
||||||
$this->app->erp->MenuEintrag("index.php?module=mahnwesen&action=list", "Übersicht");
|
$this->app->erp->MenuEintrag("index.php?module=mahnwesen&action=list", "Übersicht");
|
||||||
// $this->app->erp->MenuEintrag("index.php?module=mahnwesen&action=create", "Neu anlegen");
|
|
||||||
// $this->app->erp->MenuEintrag("index.php?module=mahnwesen&action=einstellungen", "Einstellungen");
|
|
||||||
|
|
||||||
if($this->app->Secure->GetPOST('mahnstufe_berechnen') && $this->app->erp->RechteVorhanden('rechnung', 'edit')) {
|
|
||||||
$this->app->erp->rechnung_zahlstatus_berechnen();
|
|
||||||
|
|
||||||
$sql = "
|
|
||||||
SELECT
|
|
||||||
r.id, r.mahnwesen, rid_mid.mahnwesen_neu
|
|
||||||
FROM
|
|
||||||
rechnung r
|
|
||||||
INNER JOIN
|
|
||||||
(
|
|
||||||
SELECT
|
|
||||||
id_tage.id,
|
|
||||||
m.id AS mahnwesen_neu
|
|
||||||
FROM
|
|
||||||
mahnwesen m
|
|
||||||
INNER JOIN(
|
|
||||||
SELECT
|
|
||||||
id,
|
|
||||||
MAX(tage) AS tage
|
|
||||||
FROM
|
|
||||||
(
|
|
||||||
SELECT
|
|
||||||
r.id,
|
|
||||||
m.tage
|
|
||||||
FROM
|
|
||||||
rechnung r
|
|
||||||
INNER JOIN mahnwesen m ON
|
|
||||||
DATEDIFF(
|
|
||||||
CURRENT_DATE,
|
|
||||||
DATE_ADD(
|
|
||||||
r.datum,
|
|
||||||
INTERVAL r.zahlungszieltage DAY
|
|
||||||
)
|
|
||||||
) > m.tage
|
|
||||||
WHERE
|
|
||||||
r.zahlungsstatus = 'offen'
|
|
||||||
ORDER BY
|
|
||||||
`r`.`id` ASC
|
|
||||||
) temp
|
|
||||||
GROUP BY
|
|
||||||
id
|
|
||||||
) id_tage
|
|
||||||
ON
|
|
||||||
m.tage = id_tage.tage
|
|
||||||
) rid_mid
|
|
||||||
ON r.id = rid_mid.id
|
|
||||||
";
|
|
||||||
$offene_rechnungen = $this->app->DB->SelectArr($sql);
|
|
||||||
|
|
||||||
foreach ($offene_rechnungen as $offene_rechnung) {
|
|
||||||
if ($offene_rechnung['mahnwesen'] != $offene_rechnung['mahnwesen_neu']) {
|
|
||||||
$sql = "UPDATE rechnung set mahnwesen = ".$offene_rechnung['mahnwesen_neu'].", versendet_mahnwesen = 0 WHERE id = ".$offene_rechnung['id'];
|
|
||||||
$this->app->DB->Update($sql);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if($this->app->Secure->GetPOST('sel_aktion') && $this->app->erp->RechteVorhanden('rechnung', 'edit'))
|
if($this->app->Secure->GetPOST('sel_aktion') && $this->app->erp->RechteVorhanden('rechnung', 'edit'))
|
||||||
{
|
{
|
||||||
@ -354,6 +307,101 @@ class Mahnwesen {
|
|||||||
}
|
}
|
||||||
} // ende ausfuehren
|
} // ende ausfuehren
|
||||||
|
|
||||||
|
// Refresh status
|
||||||
|
if($this->app->Secure->GetPOST('mahnstufe_berechnen') && $this->app->erp->RechteVorhanden('rechnung', 'edit')) {
|
||||||
|
$this->app->erp->rechnung_zahlstatus_berechnen();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create tabs
|
||||||
|
$sql = "
|
||||||
|
SELECT
|
||||||
|
r.id,
|
||||||
|
r.mahnwesen,
|
||||||
|
r.versendet_mahnwesen,
|
||||||
|
rid_mid.mahnwesen_neu,
|
||||||
|
rid_mid.name
|
||||||
|
FROM
|
||||||
|
rechnung r
|
||||||
|
INNER JOIN
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
id_tage.id,
|
||||||
|
m.id AS mahnwesen_neu,
|
||||||
|
m.name,
|
||||||
|
m.tage
|
||||||
|
FROM
|
||||||
|
mahnwesen m
|
||||||
|
INNER JOIN(
|
||||||
|
SELECT
|
||||||
|
id,
|
||||||
|
MAX(tage) AS tage
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
r.id,
|
||||||
|
m.tage
|
||||||
|
FROM
|
||||||
|
rechnung r
|
||||||
|
INNER JOIN mahnwesen m ON
|
||||||
|
DATEDIFF(
|
||||||
|
CURRENT_DATE,
|
||||||
|
DATE_ADD(
|
||||||
|
r.datum,
|
||||||
|
INTERVAL r.zahlungszieltage DAY
|
||||||
|
)
|
||||||
|
) > m.tage
|
||||||
|
WHERE
|
||||||
|
r.zahlungsstatus = 'offen'
|
||||||
|
ORDER BY
|
||||||
|
`r`.`id` ASC
|
||||||
|
) temp
|
||||||
|
GROUP BY
|
||||||
|
id
|
||||||
|
) id_tage
|
||||||
|
ON
|
||||||
|
m.tage = id_tage.tage
|
||||||
|
) rid_mid
|
||||||
|
ON r.id = rid_mid.id
|
||||||
|
ORDER BY rid_mid.tage
|
||||||
|
";
|
||||||
|
$offene_rechnungen = $this->app->DB->SelectArr($sql);
|
||||||
|
|
||||||
|
foreach ($offene_rechnungen as $offene_rechnung) {
|
||||||
|
if ($offene_rechnung['mahnwesen'] != $offene_rechnung['mahnwesen_neu']) {
|
||||||
|
$sql = "UPDATE rechnung set mahnwesen = ".$offene_rechnung['mahnwesen_neu'].", versendet_mahnwesen = 0 WHERE id = ".$offene_rechnung['id'];
|
||||||
|
$this->app->DB->Update($sql);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$menus = $this->app->DB->SelectArr("
|
||||||
|
SELECT
|
||||||
|
m.id mahnung,
|
||||||
|
m.name,
|
||||||
|
SUM(if(r.versendet_mahnwesen = 1,1,0)) anzahl
|
||||||
|
FROM
|
||||||
|
mahnwesen m
|
||||||
|
LEFT JOIN rechnung r ON
|
||||||
|
m.id = r.mahnwesen
|
||||||
|
WHERE
|
||||||
|
r.id IS NULL OR
|
||||||
|
(
|
||||||
|
r.zahlungsstatus <> 'bezahlt' AND
|
||||||
|
r.mahnwesen_gesperrt <> 1
|
||||||
|
)
|
||||||
|
GROUP BY
|
||||||
|
m.id
|
||||||
|
ORDER BY
|
||||||
|
m.tage ASC
|
||||||
|
");
|
||||||
|
|
||||||
|
foreach ($menus as $menu) {
|
||||||
|
$suffix = "";
|
||||||
|
if ($menu['anzahl']) {
|
||||||
|
$suffix = " (".$menu['anzahl'].")";
|
||||||
|
}
|
||||||
|
$this->app->erp->MenuEintrag("index.php?module=mahnwesen&action=stufe_list&stufe=".$menu['mahnung'], $this->app->DB->real_escape_string($menu['name']).$suffix);
|
||||||
|
}
|
||||||
|
|
||||||
if (!empty($msg)) {
|
if (!empty($msg)) {
|
||||||
$this->app->Tpl->Set('MESSAGE', $msg);
|
$this->app->Tpl->Set('MESSAGE', $msg);
|
||||||
}
|
}
|
||||||
@ -364,6 +412,13 @@ class Mahnwesen {
|
|||||||
|
|
||||||
$this->app->Tpl->Set('SELDRUCKER', $this->app->erp->GetSelectDrucker($this->app->User->GetParameter('rechnung_list_drucker')));
|
$this->app->Tpl->Set('SELDRUCKER', $this->app->erp->GetSelectDrucker($this->app->User->GetParameter('rechnung_list_drucker')));
|
||||||
|
|
||||||
|
$mahnwesen_stufe_filter = $this->app->Secure->GetGET('stufe');
|
||||||
|
$this->app->User->SetParameter('mahnwesen_stufe_filter', $mahnwesen_stufe_filter);
|
||||||
|
if (!empty($mahnwesen_stufe_filter)) {
|
||||||
|
$this->app->Tpl->Set('KURZUEBERSCHRIFT2',"Stufe: ".$this->app->DB->Select("SELECT name FROM mahnwesen WHERE id = ".$mahnwesen_stufe_filter." LIMIT 1"));
|
||||||
|
$this->app->Tpl->Set('ZU_MAHNEN_HIDDEN', 'hidden');
|
||||||
|
}
|
||||||
|
|
||||||
$this->app->YUI->TableSearch('TAB1', 'mahnwesen_list', "show", "", "", basename(__FILE__), __CLASS__);
|
$this->app->YUI->TableSearch('TAB1', 'mahnwesen_list', "show", "", "", basename(__FILE__), __CLASS__);
|
||||||
$this->app->Tpl->Parse('PAGE', "mahnwesen_list.tpl");
|
$this->app->Tpl->Parse('PAGE', "mahnwesen_list.tpl");
|
||||||
}
|
}
|
||||||
|
@ -1081,6 +1081,7 @@ class Rechnung extends GenRechnung
|
|||||||
$intern = true;
|
$intern = true;
|
||||||
$freigabe=$intern;
|
$freigabe=$intern;
|
||||||
}
|
}
|
||||||
|
|
||||||
$allowedFrm = true;
|
$allowedFrm = true;
|
||||||
$showDefault = true;
|
$showDefault = true;
|
||||||
$this->app->erp->CheckVertrieb($id,'rechnung');
|
$this->app->erp->CheckVertrieb($id,'rechnung');
|
||||||
@ -1096,6 +1097,7 @@ class Rechnung extends GenRechnung
|
|||||||
if($belegnr=='')
|
if($belegnr=='')
|
||||||
{
|
{
|
||||||
$this->app->erp->BelegFreigabe('rechnung',$id);
|
$this->app->erp->BelegFreigabe('rechnung',$id);
|
||||||
|
$this->rechnung_zahlstatus_berechnen($id);
|
||||||
if($intern) {
|
if($intern) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -1119,7 +1121,7 @@ class Rechnung extends GenRechnung
|
|||||||
jetzt freigegeben werden? <input type=\"button\" class=\"btnImportantLarge\" value=\"Jetzt freigeben\" onclick=\"window.location.href='index.php?module=rechnung&action=freigabe&id=$id&freigabe=$id'\">
|
jetzt freigegeben werden? <input type=\"button\" class=\"btnImportantLarge\" value=\"Jetzt freigeben\" onclick=\"window.location.href='index.php?module=rechnung&action=freigabe&id=$id&freigabe=$id'\">
|
||||||
</div>");
|
</div>");
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->RechnungMenu();
|
$this->RechnungMenu();
|
||||||
$this->app->Tpl->Parse('PAGE','tabview.tpl');
|
$this->app->Tpl->Parse('PAGE','tabview.tpl');
|
||||||
}
|
}
|
||||||
@ -1613,18 +1615,18 @@ class Rechnung extends GenRechnung
|
|||||||
|
|
||||||
$invoiceArr = $this->app->DB->SelectRow(
|
$invoiceArr = $this->app->DB->SelectRow(
|
||||||
sprintf(
|
sprintf(
|
||||||
'SELECT zahlungsweise,zahlungszieltage,dta_datei,status,schreibschutz FROM rechnung WHERE id= %d LIMIT 1',
|
'SELECT zahlungsweise,zahlungszieltage,dta_datei,status,zahlungsstatus,schreibschutz FROM rechnung WHERE id= %d LIMIT 1',
|
||||||
(int)$id
|
(int)$id
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
$zahlungsweise= $invoiceArr['zahlungsweise'];
|
$zahlungsweise= $invoiceArr['zahlungsweise'];
|
||||||
$zahlungszieltage= $invoiceArr['zahlungszieltage'];
|
$zahlungszieltage= $invoiceArr['zahlungszieltage'];
|
||||||
|
$zahlungsstatus= $invoiceArr['zahlungsstatus'];
|
||||||
if($zahlungsweise==='rechnung' && $zahlungszieltage<1)
|
if($zahlungsweise==='rechnung' && $zahlungszieltage<1)
|
||||||
{
|
{
|
||||||
$this->app->Tpl->Add('MESSAGE',"<div class=\"info\">Hinweis: Fälligkeit auf \"sofort\", da Zahlungsziel in Tagen auf 0 Tage gesetzt ist!</div>");
|
$this->app->Tpl->Add('MESSAGE',"<div class=\"info\">Hinweis: Fälligkeit auf \"sofort\", da Zahlungsziel in Tagen auf 0 Tage gesetzt ist!</div>");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$status= $invoiceArr['status'];
|
$status= $invoiceArr['status'];
|
||||||
$schreibschutz= $invoiceArr['schreibschutz'];
|
$schreibschutz= $invoiceArr['schreibschutz'];
|
||||||
if($status !== 'angelegt' && $status !== 'angelegta' && $status !== 'a')
|
if($status !== 'angelegt' && $status !== 'angelegta' && $status !== 'a')
|
||||||
@ -1661,12 +1663,15 @@ class Rechnung extends GenRechnung
|
|||||||
$bonuspunkte = $rechnungarr['bonuspunkte'];//$this->app->DB->Select("SELECT bonuspunkte FROM rechnung WHERE id='$id' LIMIT 1");
|
$bonuspunkte = $rechnungarr['bonuspunkte'];//$this->app->DB->Select("SELECT bonuspunkte FROM rechnung WHERE id='$id' LIMIT 1");
|
||||||
$soll = $rechnungarr['soll'];//$this->app->DB->Select("SELECT soll FROM rechnung WHERE id='$id' LIMIT 1");
|
$soll = $rechnungarr['soll'];//$this->app->DB->Select("SELECT soll FROM rechnung WHERE id='$id' LIMIT 1");
|
||||||
$projekt = $rechnungarr['projekt'];
|
$projekt = $rechnungarr['projekt'];
|
||||||
|
|
||||||
|
$skontosoll = $this->app->DB->Select("SELECT TRUNCATE(soll*(1-(zahlungszielskonto/100)),2) as skontosoll FROM rechnung where id = '".$id."' LIMIT 1");
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->app->Tpl->Set('PUNKTE',"<input type=\"text\" name=\"punkte\" value=\"$punkte\" size=\"10\" readonly>");
|
$this->app->Tpl->Set('PUNKTE',"<input type=\"text\" name=\"punkte\" value=\"$punkte\" size=\"10\" readonly>");
|
||||||
$this->app->Tpl->Set('BONUSPUNKTE',"<input type=\"text\" name=\"punkte\" value=\"$bonuspunkte\" size=\"10\" readonly>");
|
$this->app->Tpl->Set('BONUSPUNKTE',"<input type=\"text\" name=\"punkte\" value=\"$bonuspunkte\" size=\"10\" readonly>");
|
||||||
|
|
||||||
$this->app->Tpl->Set('SOLL',"$soll"."<input type=\"hidden\" id=\"soll_tmp\" value=\"$soll\">");
|
$this->app->Tpl->Set('SOLL',"$soll"."<input type=\"hidden\" id=\"soll_tmp\" value=\"$soll\">");
|
||||||
|
$this->app->Tpl->Set('SKONTOSOLL',$skontosoll);
|
||||||
|
|
||||||
if($schreibschutz!='1')// && $this->app->erp->RechteVorhanden("rechnung","schreibschutz"))
|
if($schreibschutz!='1')// && $this->app->erp->RechteVorhanden("rechnung","schreibschutz"))
|
||||||
{
|
{
|
||||||
@ -1743,10 +1748,7 @@ class Rechnung extends GenRechnung
|
|||||||
if($zahlungsweise==='vorkasse' || $zahlungsweise==='kreditkarte' || $zahlungsweise==='paypal' || $zahlungsweise==='bar') {
|
if($zahlungsweise==='vorkasse' || $zahlungsweise==='kreditkarte' || $zahlungsweise==='paypal' || $zahlungsweise==='bar') {
|
||||||
$this->app->Tpl->Set('VORKASSE','');
|
$this->app->Tpl->Set('VORKASSE','');
|
||||||
}
|
}
|
||||||
|
|
||||||
$ist = $this->app->erp->EUR($this->app->erp->GetSaldoDokument($id,'rechnung')['betrag']);
|
|
||||||
$this->app->Tpl->Set('ISTDB',$ist);
|
|
||||||
|
|
||||||
if($schreibschutz=="1" && $this->app->erp->RechteVorhanden('rechnung','schreibschutz'))
|
if($schreibschutz=="1" && $this->app->erp->RechteVorhanden('rechnung','schreibschutz'))
|
||||||
{
|
{
|
||||||
$this->app->Tpl->Set('MESSAGE',"<div class=\"warning\">Diese Rechnung ist schreibgeschützt und darf daher nicht mehr bearbeitet werden! <input type=\"button\" value=\"Schreibschutz entfernen\" onclick=\"if(!confirm('Soll der Schreibschutz für diese Rechnung wirklich entfernt werden? Die gespeicherte Rechnung wird überschrieben!')) return false;else window.location.href='index.php?module=rechnung&action=schreibschutz&id=$id';\"></div>");
|
$this->app->Tpl->Set('MESSAGE',"<div class=\"warning\">Diese Rechnung ist schreibgeschützt und darf daher nicht mehr bearbeitet werden! <input type=\"button\" value=\"Schreibschutz entfernen\" onclick=\"if(!confirm('Soll der Schreibschutz für diese Rechnung wirklich entfernt werden? Die gespeicherte Rechnung wird überschrieben!')) return false;else window.location.href='index.php?module=rechnung&action=schreibschutz&id=$id';\"></div>");
|
||||||
@ -1756,15 +1758,20 @@ class Rechnung extends GenRechnung
|
|||||||
$this->app->erp->CommonReadonly();
|
$this->app->erp->CommonReadonly();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if($schreibschutz=='1' && $this->app->erp->RechteVorhanden('rechnung','manuellbezahltmarkiert') && $zahlungsstatus=="offen")
|
||||||
|
{
|
||||||
|
$this->app->erp->RemoveReadonly('bezahlt_am');
|
||||||
|
$this->app->erp->RemoveReadonly('zahlbetrag');
|
||||||
|
$this->app->erp->RemoveReadonly('zahlungsstatus');
|
||||||
|
}
|
||||||
|
|
||||||
if($schreibschutz=='1' && $this->app->erp->RechteVorhanden('rechnung','mahnwesen'))
|
if($schreibschutz=='1' && $this->app->erp->RechteVorhanden('rechnung','mahnwesen'))
|
||||||
{
|
{
|
||||||
$this->app->erp->RemoveReadonly('mahnwesen_datum');
|
$this->app->erp->RemoveReadonly('mahnwesen_datum');
|
||||||
$this->app->erp->RemoveReadonly('mahnwesen_gesperrt');
|
$this->app->erp->RemoveReadonly('mahnwesen_gesperrt');
|
||||||
$this->app->erp->RemoveReadonly('mahnwesen_internebemerkung');
|
$this->app->erp->RemoveReadonly('mahnwesen_internebemerkung');
|
||||||
$this->app->erp->RemoveReadonly('zahlungsstatus');
|
|
||||||
$this->app->erp->RemoveReadonly('mahnwesenfestsetzen');
|
$this->app->erp->RemoveReadonly('mahnwesenfestsetzen');
|
||||||
$this->app->erp->RemoveReadonly('mahnwesen');
|
$this->app->erp->RemoveReadonly('mahnwesen');
|
||||||
$this->app->erp->RemoveReadonly('bezahlt_am');
|
|
||||||
/*
|
/*
|
||||||
'ist' should not be edited manually
|
'ist' should not be edited manually
|
||||||
|
|
||||||
@ -1795,9 +1802,9 @@ class Rechnung extends GenRechnung
|
|||||||
|
|
||||||
if($speichern!='' && $this->app->erp->RechteVorhanden('rechnung','mahnwesen'))
|
if($speichern!='' && $this->app->erp->RechteVorhanden('rechnung','mahnwesen'))
|
||||||
{
|
{
|
||||||
|
|
||||||
$mahnwesen_datum = $this->app->Secure->GetPOST('mahnwesen_datum');
|
$mahnwesen_datum = $this->app->Secure->GetPOST('mahnwesen_datum');
|
||||||
$bezahlt_am = $this->app->Secure->GetPOST('bezahlt_am');
|
$bezahlt_am = $this->app->Secure->GetPOST('bezahlt_am');
|
||||||
|
$zahlbetrag = $this->app->Secure->GetPOST('zahlbetrag');
|
||||||
$mahnwesen_gesperrt = $this->app->Secure->GetPOST('mahnwesen_gesperrt');
|
$mahnwesen_gesperrt = $this->app->Secure->GetPOST('mahnwesen_gesperrt');
|
||||||
$mahnwesen_internebemerkung = $this->app->Secure->GetPOST('mahnwesen_internebemerkung');
|
$mahnwesen_internebemerkung = $this->app->Secure->GetPOST('mahnwesen_internebemerkung');
|
||||||
$zahlungsstatus = $this->app->Secure->GetPOST('zahlungsstatus');
|
$zahlungsstatus = $this->app->Secure->GetPOST('zahlungsstatus');
|
||||||
@ -1823,14 +1830,77 @@ class Rechnung extends GenRechnung
|
|||||||
|
|
||||||
/* if($mahnwesenfestsetzen=='1')
|
/* if($mahnwesenfestsetzen=='1')
|
||||||
{*/
|
{*/
|
||||||
$this->app->DB->Update("UPDATE rechnung SET mahnwesen_internebemerkung='$mahnwesen_internebemerkung',zahlungsstatus='$zahlungsstatus',versendet_mahnwesen='$versendet',
|
$this->app->DB->Update("
|
||||||
mahnwesen_gesperrt='$mahnwesen_gesperrt',mahnwesen_datum='$mahnwesen_datum', mahnwesenfestsetzen='$mahnwesenfestsetzen',internebemerkung='$internebemerkung',
|
UPDATE rechnung SET
|
||||||
mahnwesen='$mahnwesen',skonto_gegeben='$skonto_gegeben',bezahlt_am='$bezahlt_am' WHERE id='$id' LIMIT 1");
|
mahnwesen_internebemerkung='$mahnwesen_internebemerkung',
|
||||||
|
zahlungsstatus='$zahlungsstatus',
|
||||||
|
versendet_mahnwesen='$versendet',
|
||||||
|
mahnwesen_gesperrt='$mahnwesen_gesperrt',
|
||||||
|
mahnwesen_datum='$mahnwesen_datum',
|
||||||
|
mahnwesenfestsetzen='$mahnwesenfestsetzen',
|
||||||
|
internebemerkung='$internebemerkung'
|
||||||
|
WHERE id='$id' LIMIT 1");
|
||||||
/* } else {
|
/* } else {
|
||||||
$this->app->DB->Update("UPDATE rechnung SET mahnwesen='$mahnwesen', mahnwesenfestsetzen='$mahnwesenfestsetzen', mahnwesen_internebemerkung='$mahnwesen_internebemerkung', mahnwesen_gesperrt='$mahnwesen_gesperrt',mahnwesen_datum='$mahnwesen_datum' WHERE id='$id' LIMIT 1");
|
$this->app->DB->Update("UPDATE rechnung SET mahnwesen='$mahnwesen', mahnwesenfestsetzen='$mahnwesenfestsetzen', mahnwesen_internebemerkung='$mahnwesen_internebemerkung', mahnwesen_gesperrt='$mahnwesen_gesperrt',mahnwesen_datum='$mahnwesen_datum' WHERE id='$id' LIMIT 1");
|
||||||
}*/
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($zahlungsstatus == 'bezahlt') {
|
||||||
|
$this->app->Tpl->Set('SCHNELLEINGABE_HIDDEN', 'hidden');
|
||||||
|
$this->app->Tpl->Set('SCHNELLEINGABE_TOOLTIP_HIDDEN', 'hidden');
|
||||||
|
}
|
||||||
|
|
||||||
|
$saldo = $this->app->erp->GetSaldoDokument($id,'rechnung');
|
||||||
|
if (empty($saldo)) {
|
||||||
|
$this->app->Tpl->Set('SCHNELLEINGABE_HIDDEN', 'hidden');
|
||||||
|
$this->app->Tpl->Set('SCHNELLEINGABE_TOOLTIP_HIDDEN', 'hidden');
|
||||||
|
} else {
|
||||||
|
$ist = $this->app->erp->EUR($saldo['betrag']);
|
||||||
|
$this->app->Tpl->Set('ISTDB',$ist);
|
||||||
|
if ($ist > $soll) {
|
||||||
|
$this->app->Tpl->addMessage('error','Rechnung ist überzahlt!');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$rechnung_schnelleingabe_konto = $this->app->erp->Firmendaten('rechnung_schnelleingabe_konto');
|
||||||
|
|
||||||
|
if (!empty($rechnung_schnelleingabe_konto)) {
|
||||||
|
$this->app->Tpl->Set('SCHNELLEINGABE_TOOLTIP_HIDDEN', 'hidden');
|
||||||
|
if ($speichern!='' && $this->app->erp->RechteVorhanden('rechnung','manuellbezahltmarkiert') && !empty($zahlbetrag)) {
|
||||||
|
if ($bezahlt_am == '0000-00-00') {
|
||||||
|
$bezahlt_am = date('Y-m-d');
|
||||||
|
}
|
||||||
|
$sql = "
|
||||||
|
INSERT INTO kontoauszuege
|
||||||
|
(
|
||||||
|
konto,
|
||||||
|
buchung,
|
||||||
|
importdatum,
|
||||||
|
buchungstext,
|
||||||
|
soll,
|
||||||
|
waehrung,
|
||||||
|
bearbeiter
|
||||||
|
)
|
||||||
|
VALUES
|
||||||
|
(
|
||||||
|
$rechnung_schnelleingabe_konto,
|
||||||
|
'$bezahlt_am',
|
||||||
|
'".date("Y-m-d")."',
|
||||||
|
'Rechnung ".$nummer." Schnelleingabe',
|
||||||
|
$zahlbetrag,
|
||||||
|
'EUR',
|
||||||
|
'".$this->app->User->GetName()."'
|
||||||
|
)
|
||||||
|
";
|
||||||
|
$this->app->DB->Insert($sql);
|
||||||
|
$kontoauszug = $this->app->DB->GetInsertID();
|
||||||
|
$this->app->erp->fibu_buchungen_buchen("kontoauszuege",$kontoauszug, "rechnung", $id, -$zahlbetrag, 'EUR', $bezahlt_am, "Rechnung ".$nummer." Schnelleingabe");
|
||||||
|
$this->rechnung_zahlstatus_berechnen($id);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$this->app->Tpl->Set('SCHNELLEINGABE_HIDDEN', 'hidden');
|
||||||
|
}
|
||||||
|
|
||||||
if($status=='')
|
if($status=='')
|
||||||
$this->app->DB->Update("UPDATE rechnung SET status='angelegt' WHERE id='$id' LIMIT 1");
|
$this->app->DB->Update("UPDATE rechnung SET status='angelegt' WHERE id='$id' LIMIT 1");
|
||||||
|
|
||||||
@ -2749,9 +2819,14 @@ class Rechnung extends GenRechnung
|
|||||||
* Recalculate the payments status with skonto
|
* Recalculate the payments status with skonto
|
||||||
*/
|
*/
|
||||||
|
|
||||||
function rechnung_zahlstatus_berechnen() {
|
function rechnung_zahlstatus_berechnen($rechnung_id = null) {
|
||||||
// START RECALCULATE
|
// START RECALCULATE
|
||||||
$this->app->erp->fibu_rebuild_tables();
|
$this->app->erp->fibu_rebuild_tables();
|
||||||
|
|
||||||
|
if (!empty($rechnung_id)) {
|
||||||
|
$condition = " AND id = '".$rechnung_id."'";
|
||||||
|
}
|
||||||
|
|
||||||
$offene_rechnungen = $this->app->DB->SelectArr(" SELECT
|
$offene_rechnungen = $this->app->DB->SelectArr(" SELECT
|
||||||
id,
|
id,
|
||||||
soll,
|
soll,
|
||||||
@ -2768,9 +2843,9 @@ class Rechnung extends GenRechnung
|
|||||||
rechnung
|
rechnung
|
||||||
WHERE
|
WHERE
|
||||||
belegnr <> '' AND zahlungsstatus = 'offen'
|
belegnr <> '' AND zahlungsstatus = 'offen'
|
||||||
");
|
".$condition);
|
||||||
|
|
||||||
foreach ($offene_rechnungen as $offene_rechnung) {
|
foreach ($offene_rechnungen as $offene_rechnung) {
|
||||||
$saldo = $this->app->erp->GetSaldoDokument($offene_rechnung['id'],'rechnung');
|
$saldo = $this->app->erp->GetSaldoDokument($offene_rechnung['id'],'rechnung');
|
||||||
if (!empty($saldo)) {
|
if (!empty($saldo)) {
|
||||||
if ($saldo['waehrung'] == $offene_rechnung['waehrung']) {
|
if ($saldo['waehrung'] == $offene_rechnung['waehrung']) {
|
||||||
@ -2781,12 +2856,13 @@ class Rechnung extends GenRechnung
|
|||||||
// Check overall value
|
// Check overall value
|
||||||
if ($saldo['betrag'] == 0) {
|
if ($saldo['betrag'] == 0) {
|
||||||
// ok -> will be marked as paid
|
// ok -> will be marked as paid
|
||||||
} else if ($skontorelevante_zahlungen >= $offene_rechnung['skontosoll']) {
|
} else if (abs($skontorelevante_zahlungen-$offene_rechnung['skontosoll']) <= 0.01) {
|
||||||
// Skonto ok -> book difference
|
// Skonto ok -> book difference
|
||||||
$sachkonto = $this->app->erp->Firmendaten('rechnung_skonto_kontorahmen');
|
$sachkonto = $this->app->erp->Firmendaten('rechnung_skonto_kontorahmen');
|
||||||
if (!empty($sachkonto)) {
|
if (!empty($sachkonto)) {
|
||||||
$this->app->erp->fibu_buchungen_buchen('rechnung',$offene_rechnung['id'],'kontorahmen',$sachkonto,-$saldo['betrag'],$offene_rechnung['waehrung'],date('Y-m-d'),'');
|
$this->app->erp->fibu_buchungen_buchen('rechnung',$offene_rechnung['id'],'kontorahmen',$sachkonto,$offene_rechnung['soll']-$skontorelevante_zahlungen,$offene_rechnung['waehrung'],date('Y-m-d'),'');
|
||||||
$offene_rechnung['ist'] = $offene_rechnung['soll'];
|
$offene_rechnung['ist'] = $offene_rechnung['soll'];
|
||||||
|
$saldo['betrag'] = 0;
|
||||||
} else {
|
} else {
|
||||||
}
|
}
|
||||||
} else if ($offene_rechnung['faellig']) {
|
} else if ($offene_rechnung['faellig']) {
|
||||||
@ -2800,7 +2876,7 @@ class Rechnung extends GenRechnung
|
|||||||
SET
|
SET
|
||||||
ist = ".$saldo['betrag']."+soll,
|
ist = ".$saldo['betrag']."+soll,
|
||||||
zahlungsstatus = IF(".$saldo['betrag']." = 0,'bezahlt','offen')
|
zahlungsstatus = IF(".$saldo['betrag']." = 0,'bezahlt','offen')
|
||||||
WHERE id=".$offene_rechnung['id'];
|
WHERE id=".$offene_rechnung['id'];
|
||||||
$this->app->DB->Update($sql);
|
$this->app->DB->Update($sql);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -125,6 +125,9 @@ class WidgetGenrechnung
|
|||||||
$field = new HTMLInput("bezahlt_am","text","","10","","","","","","","","0","","");
|
$field = new HTMLInput("bezahlt_am","text","","10","","","","","","","","0","","");
|
||||||
$this->form->NewField($field);
|
$this->form->NewField($field);
|
||||||
|
|
||||||
|
$field = new HTMLInput("zahlbetrag","money","","10","","","","","","","","0","","");
|
||||||
|
$this->form->NewField($field);
|
||||||
|
|
||||||
$field = new HTMLInput("ist","text","","10","","","","","","","","0","","");
|
$field = new HTMLInput("ist","text","","10","","","","","","","","0","","");
|
||||||
$this->form->NewField($field);
|
$this->form->NewField($field);
|
||||||
|
|
||||||
|
@ -104,7 +104,9 @@
|
|||||||
<div class="inside inside-full-height">
|
<div class="inside inside-full-height">
|
||||||
[MAHNWESENIF]
|
[MAHNWESENIF]
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>{|Zahlungsstatus|}</legend>
|
<legend>
|
||||||
|
{|Zahlungsstatus|} <img class="wawitooltipicon" src="themes/new/images/tooltip_grau.png" title="Zur Nutzung der Schnelleingabe muss in den Grundeinstellungen das Geschäftskonto für Schnelleingabe und optional das Sachkonto für Rechnung-Skontobuchungen gesetzt werden." [SCHNELLEINGABE_TOOLTIP_HIDDEN]>
|
||||||
|
</legend>
|
||||||
<table class="tablemahnwesenfestsetzen">
|
<table class="tablemahnwesenfestsetzen">
|
||||||
<tr>
|
<tr>
|
||||||
<td width="200">{|Zahlungsstatus|}:</td>
|
<td width="200">{|Zahlungsstatus|}:</td>
|
||||||
@ -119,15 +121,23 @@
|
|||||||
<td>
|
<td>
|
||||||
{|SOLL|}:
|
{|SOLL|}:
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td align="right">
|
||||||
[SOLL]
|
[SOLL]
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
{|SKONTOSOLL|}:
|
||||||
|
</td>
|
||||||
|
<td align="right">
|
||||||
|
[SKONTOSOLL]
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
{|FEHLT|}:
|
{|FEHLT|}:
|
||||||
</td>
|
</td>
|
||||||
<td id="istdb">
|
<td id="istdb" align="right">
|
||||||
[ISTDB]
|
[ISTDB]
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -135,6 +145,23 @@
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
</fieldset>
|
||||||
|
<fieldset [SCHNELLEINGABE_HIDDEN]>
|
||||||
|
<legend>{|Schnelleingabe|}</legend>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td width="200">{|Bezahlt am|}:</td>
|
||||||
|
<td width="70%">[BEZAHLT_AM][MSGBEZAHLT_AM]
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>{|Zahlbetrag|}:</td>
|
||||||
|
<td>[ZAHLBETRAG][MSGZAHLBETRAG]</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</fieldset>
|
||||||
|
<fieldset>
|
||||||
|
<legend>{|Mahnwesen|}</legend>
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="200">{|Mahnstufe|}:</td>
|
<td width="200">{|Mahnstufe|}:</td>
|
||||||
|
@ -84,6 +84,7 @@ class WidgetRechnung extends WidgetGenRechnung
|
|||||||
$this->app->erp->AnzeigeAbweichendeBezeichnung("rechnung");
|
$this->app->erp->AnzeigeAbweichendeBezeichnung("rechnung");
|
||||||
|
|
||||||
$this->form->ReplaceFunction("ist",$this,"ReplaceDecimal");
|
$this->form->ReplaceFunction("ist",$this,"ReplaceDecimal");
|
||||||
|
$this->form->ReplaceFunction("zahlbetrag",$this,"ReplaceDecimal");
|
||||||
$this->form->ReplaceFunction("kurs",$this,"ReplaceBetrag");
|
$this->form->ReplaceFunction("kurs",$this,"ReplaceBetrag");
|
||||||
$this->form->ReplaceFunction("skonto_gegeben",$this,"ReplaceDecimal");
|
$this->form->ReplaceFunction("skonto_gegeben",$this,"ReplaceDecimal");
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user