mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2024-12-27 15:10:28 +01:00
306 lines
9.1 KiB
PHP
306 lines
9.1 KiB
PHP
|
<?php
|
||
|
require_once dirname(__DIR__).'/class.zahlungsweise.php';
|
||
|
class Zahlungsweise_rechnung extends Zahlungsweisenmodul
|
||
|
{
|
||
|
/** @var Application */
|
||
|
var $app;
|
||
|
/** @var array */
|
||
|
protected $data;
|
||
|
|
||
|
/**
|
||
|
* Zahlungsweise_rechnung constructor.
|
||
|
*
|
||
|
* @param Application $app
|
||
|
* @param int $id
|
||
|
*/
|
||
|
public function __construct($app, $id)
|
||
|
{
|
||
|
$this->app= $app;
|
||
|
$this->id = $id;
|
||
|
$this->data = $this->app->DB->SelectRow(
|
||
|
sprintf(
|
||
|
'SELECT * FROM zahlungsweisen WHERE id = %d',
|
||
|
$id
|
||
|
)
|
||
|
);
|
||
|
$einstellungen_json = $this->data['einstellungen_json'];
|
||
|
if(!empty($einstellungen_json)) {
|
||
|
$einstellungen_json = json_decode($einstellungen_json,true);
|
||
|
}
|
||
|
if(!empty($einstellungen_json)) {
|
||
|
$this->einstellungen = $einstellungen_json;
|
||
|
}
|
||
|
else{
|
||
|
$this->einstellungen = array();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $doctype
|
||
|
* @param int $doctypeId
|
||
|
* @param string $text
|
||
|
* @param string $language
|
||
|
* @param string|null $zahlungszielskonto
|
||
|
* @param string|null $zahlungszieltageskonto
|
||
|
* @param int|null $zahlungszieltage
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
public function getSkontoText(
|
||
|
$doctype,
|
||
|
$doctypeId,
|
||
|
$text,
|
||
|
$language = '',
|
||
|
$zahlungszielskonto = null,
|
||
|
$zahlungszieltageskonto = null,
|
||
|
$zahlungszieltage = null
|
||
|
) {
|
||
|
if($zahlungszielskonto === null || $zahlungszieltageskonto === null) {
|
||
|
$doctypeRow = $this->app->DB->SelectRow(
|
||
|
sprintf(
|
||
|
"SELECT *
|
||
|
FROM `%s`
|
||
|
WHERE id = %d",
|
||
|
$doctype, $doctypeId
|
||
|
)
|
||
|
);
|
||
|
if(isset($doctypeRow['zahlungszieltage']) && isset($doctypeRow['zahlungszieltageskonto'])) {
|
||
|
$zahlungszielskonto = $doctypeRow['zahlungszielskonto'];
|
||
|
$zahlungszieltageskonto = $doctypeRow['zahlungszieltageskonto'];
|
||
|
$zahlungszieltage = $doctypeRow['zahlungszieltage'];
|
||
|
}
|
||
|
else {
|
||
|
$doctypeRow = $this->app->DB->SelectRow(
|
||
|
sprintf(
|
||
|
"SELECT zahlungszieltage, zahlungszieltageskonto
|
||
|
FROM `adresse`
|
||
|
WHERE id = %d",
|
||
|
$doctypeRow['adresse']
|
||
|
)
|
||
|
);
|
||
|
$zahlungszielskonto = $doctypeRow['zahlungszielskonto'];
|
||
|
$zahlungszieltageskonto = $doctypeRow['zahlungszieltageskonto'];
|
||
|
$zahlungszieltage = $doctypeRow['zahlungszieltage'];
|
||
|
}
|
||
|
if($zahlungszielskonto == 0) {
|
||
|
return $text;
|
||
|
}
|
||
|
}
|
||
|
$zahlungszielskontototal=$zahlungszielskonto;
|
||
|
if(empty($language)) {
|
||
|
$doctypeRow = $this->app->DB->SelectRow(
|
||
|
sprintf(
|
||
|
"SELECT sprache, adresse, datum, DATE_FORMAT(datum, '%%d.%%m.%%Y') AS datum_de,
|
||
|
DATE_FORMAT(DATE_ADD(datum, INTERVAL zahlungszieltage DAY),'%%d.%%m.%%Y') AS zahlungdatum,
|
||
|
zahlungszieltage
|
||
|
FROM `%s`
|
||
|
WHERE id = %d",
|
||
|
$doctype, $doctypeId
|
||
|
)
|
||
|
);
|
||
|
|
||
|
$language = !empty($doctypeRow['sprache'])?(String)$doctypeRow['sprache']:(String)$this->app->DB->Select(
|
||
|
sprintf(
|
||
|
'SELECT sprache FROM adresse WHERE id = %d',
|
||
|
$doctypeRow['adresse']
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
$zahlungszielskontodatum = $this->app->DB->Select(
|
||
|
sprintf(
|
||
|
"SELECT DATE_FORMAT(DATE_ADD(`datum`, INTERVAL %d DAY),'%%d.%%m.%%Y')
|
||
|
FROM `%s`
|
||
|
WHERE `id` = %d
|
||
|
LIMIT 1",
|
||
|
$zahlungszieltageskonto, $doctype, $doctypeId
|
||
|
)
|
||
|
);
|
||
|
if($this->einstellungen['own_discount_text']) {
|
||
|
if($doctype === 'rechnung') {
|
||
|
$ownText = $this->app->erp->Beschriftung('own_discount_text_invoice', $language);
|
||
|
if(empty($ownText)) {
|
||
|
$ownText = $this->einstellungen['own_discount_text_invoice'];
|
||
|
}
|
||
|
$text .= "\n".$ownText;
|
||
|
}
|
||
|
else{
|
||
|
$ownText = $this->app->erp->Beschriftung('own_discount_text_order', $language);
|
||
|
if(empty($ownText)) {
|
||
|
$ownText = $this->einstellungen['own_discount_text_order'];
|
||
|
}
|
||
|
$text .= "\n".$ownText;
|
||
|
}
|
||
|
|
||
|
if($zahlungszieltageskonto<=0){
|
||
|
$zahlungdatum = $this->app->DB->Select(
|
||
|
sprintf(
|
||
|
"SELECT DATE_FORMAT(DATE_ADD(`datum`, INTERVAL %d DAY),'%%d.%%m.%%Y')
|
||
|
FROM `%s`
|
||
|
WHERE `id` = %d
|
||
|
LIMIT 1",
|
||
|
$zahlungszieltageskonto, $doctype, $doctypeId
|
||
|
)
|
||
|
);
|
||
|
$zahlungszielskontodatum = $zahlungdatum;
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
$text .= "\n".$this->app->erp->Beschriftung('dokument_skonto', $language)
|
||
|
." $zahlungszielskonto% "
|
||
|
.$this->app->erp->Beschriftung('dokument_innerhalb', $language)
|
||
|
." $zahlungszieltageskonto "
|
||
|
.$this->app->erp->Beschriftung('dokument_tagen', $language);
|
||
|
}
|
||
|
|
||
|
return str_replace(
|
||
|
[
|
||
|
'{ZAHLUNGSZIELSKONTO}',
|
||
|
'{ZAHLUNGSZIELTAGE}',
|
||
|
'{ZAHLUNGSZIELTAGESKONTO}',
|
||
|
'{ZAHLUNGSZIELSKONTOTOTAL}',
|
||
|
'{ZAHLUNGSZIELSKONTODATUM}',
|
||
|
],
|
||
|
[
|
||
|
number_format($zahlungszielskonto,2,',','.'),
|
||
|
$zahlungszieltage,
|
||
|
$zahlungszieltageskonto,
|
||
|
number_format($zahlungszielskontototal,2,',','.'),
|
||
|
$zahlungszielskontodatum,
|
||
|
],
|
||
|
$text
|
||
|
);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return string
|
||
|
*/
|
||
|
public function GetBezeichnung()
|
||
|
{
|
||
|
return 'Rechnung';
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return array
|
||
|
*/
|
||
|
public function EinstellungenStruktur()
|
||
|
{
|
||
|
return [
|
||
|
'invoice_immediately' => [
|
||
|
'typ'=>'textarea',
|
||
|
'bezeichnung'=>'Satz in Rechnung: (sofort) (DE)',
|
||
|
'default' => $this->app->erp->Beschriftung('zahlung_rechnung_sofort_de'),
|
||
|
'lang' => 'zahlungsweisen_rechnung_invoice_immediately',
|
||
|
],
|
||
|
'invoice_next' => [
|
||
|
'typ'=>'textarea',
|
||
|
'bezeichnung'=>'Satz in Rechnung: (>= 1 Tag) (DE)',
|
||
|
'default' => $this->app->erp->Beschriftung('zahlung_rechnung_de'),
|
||
|
'lang' => 'zahlungsweisen_rechnung_invoice_next',
|
||
|
],
|
||
|
'order_immediately' => [
|
||
|
'typ'=>'textarea',
|
||
|
'bezeichnung'=>'Satz in Angebot/Auftrag: (sofort) (DE)',
|
||
|
'default' => $this->app->erp->Beschriftung('zahlung_auftrag_sofort_de'),
|
||
|
'lang' => 'zahlungsweisen_rechnung_order_immediately',
|
||
|
],
|
||
|
'order_next' => [
|
||
|
'typ'=>'textarea',
|
||
|
'bezeichnung'=>'Satz in Angebot/Auftrag: (>= 1 Tag) (DE)',
|
||
|
'default' => $this->app->erp->Beschriftung('zahlung_auftrag_de'),
|
||
|
'lang' => 'zahlungsweisen_rechnung_order_next',
|
||
|
],
|
||
|
'own_discount_text' => [
|
||
|
'typ' => 'checkbox',
|
||
|
'bezeichnung' => 'Eigener Skontotext',
|
||
|
],
|
||
|
'own_discount_text_order' => [
|
||
|
'typ'=>'textarea',
|
||
|
'bezeichnung'=>'Satz in Angebot/Auftrag (DE)',
|
||
|
'default' => $this->app->erp->Beschriftung('eigener_skontotext_anab'),
|
||
|
'lang' => 'own_discount_text_order',
|
||
|
],
|
||
|
'own_discount_text_invoice' => [
|
||
|
'typ' => 'textarea',
|
||
|
'bezeichnung'=>'Satz in Rechnung (DE)',
|
||
|
'default' => $this->app->erp->Beschriftung('eigener_skontotext_re'),
|
||
|
'lang' => 'own_discount_text_invoice',
|
||
|
],
|
||
|
];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $doctype
|
||
|
* @param int $doctypeid
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
public function GetZahlungsweiseText($doctype, $doctypeid)
|
||
|
{
|
||
|
$doctypeRow = $this->app->DB->SelectRow(
|
||
|
sprintf(
|
||
|
"SELECT sprache, adresse, datum, DATE_FORMAT(datum, '%%d.%%m.%%Y') AS datum_de,
|
||
|
DATE_FORMAT(DATE_ADD(datum, INTERVAL zahlungszieltage DAY),'%%d.%%m.%%Y') AS zahlungdatum,
|
||
|
zahlungszieltage
|
||
|
FROM `%s`
|
||
|
WHERE id = %d",
|
||
|
$doctype, $doctypeid
|
||
|
)
|
||
|
);
|
||
|
$zahlungszieltage = $doctypeRow['zahlungszieltage'];
|
||
|
$zahlungdatum= $doctypeRow['zahlungdatum'];
|
||
|
$language = !empty($doctypeRow['sprache'])?$doctypeRow['sprache']:
|
||
|
$this->app->DB->Select(
|
||
|
sprintf(
|
||
|
'SELECT sprache FROM adresse WHERE id = %d',
|
||
|
$doctypeRow['adresse']
|
||
|
)
|
||
|
);
|
||
|
|
||
|
if($zahlungszieltage == 0) {
|
||
|
$name = $doctype==='rechnung'?'invoice_immediately':'order_immediately';
|
||
|
}
|
||
|
else {
|
||
|
$name = $doctype==='rechnung'?'invoice_next':'order_next';
|
||
|
}
|
||
|
$zahlungsweisetext = (String)$this->app->erp->Beschriftung('zahlungsweisen_rechnung_'.$name, $language);
|
||
|
if(empty($zahlungsweisetext)) {
|
||
|
$zahlungsweisetext = (String)$this->einstellungen[$name];
|
||
|
}
|
||
|
if(empty($zahlungsweisetext)) {
|
||
|
|
||
|
}
|
||
|
if(empty($zahlungsweisetext)) {
|
||
|
switch($name) {
|
||
|
case 'invoice_immediately':
|
||
|
$zahlungsweisetext = 'Rechnung zahlbar sofort. ';
|
||
|
break;
|
||
|
case 'invoice_next':
|
||
|
$zahlungsweisetext = 'Rechnung zahlbar innerhalb von {ZAHLUNGSZIELTAGE} Tagen bis zum {ZAHLUNGBISDATUM}. ';
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
$zahlungsweisetext = str_replace(
|
||
|
['{ZAHLUNGSZIELTAGE}','{ZAHLUNGBISDATUM}'],
|
||
|
[$zahlungszieltage,$zahlungdatum],
|
||
|
$zahlungsweisetext
|
||
|
);
|
||
|
|
||
|
if(in_array($doctype, ['rechnung','auftrag','angebot'])) {
|
||
|
$zahlungsweisetext = $this->getSkontoText($doctype, $doctypeid, $zahlungsweisetext);
|
||
|
}
|
||
|
|
||
|
return $zahlungsweisetext;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param $postData
|
||
|
*/
|
||
|
public function updatePostDataForAssistent($postData)
|
||
|
{
|
||
|
$postData['verhalten'] = 'rechnung';
|
||
|
|
||
|
return $postData;
|
||
|
}
|
||
|
}
|
||
|
|