mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2024-11-15 04:27:14 +01:00
4375 lines
174 KiB
PHP
4375 lines
174 KiB
PHP
<?php
|
||
/*
|
||
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
|
||
*
|
||
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
|
||
*
|
||
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
|
||
*
|
||
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
|
||
* to obtain the text of the corresponding license version.
|
||
*
|
||
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
|
||
*/
|
||
?>
|
||
<?php
|
||
include_once "class.superfpdf.php";
|
||
|
||
class Briefpapier extends SuperFPDF {
|
||
public $doctype;
|
||
public $doctypeOrig;
|
||
|
||
public $logofile;
|
||
public $sender;
|
||
public $recipient;
|
||
public $corrDetails;
|
||
public $boldCorrDetails;
|
||
public $textDetails;
|
||
public $items;
|
||
|
||
public $ust_befreit;
|
||
|
||
public $barcode;
|
||
public $firmendatenid;
|
||
public $absender;
|
||
public $knickfalz;
|
||
public $projekt;
|
||
public $filename;
|
||
public $id;
|
||
public $table;
|
||
public $parameter;
|
||
public $ausarchiv = false;
|
||
public $waehrung;
|
||
public $anzahlkomma;
|
||
/** @var array */
|
||
public $mhd = [];
|
||
/** @var array */
|
||
public $charge = [];
|
||
/** @var array */
|
||
public $sn = [];
|
||
|
||
/** @var Application $app */
|
||
public $app;
|
||
|
||
/** @var array **/
|
||
private $styleData;
|
||
|
||
/**
|
||
* Briefpapier constructor.
|
||
*
|
||
* @param Application $app
|
||
* @param string $projekt
|
||
* @param array $styleData
|
||
*/
|
||
public function __construct($app,$projekt="", $styleData = null) {
|
||
|
||
if($styleData != null) $this->setStyleData($styleData);
|
||
//$orientation='P';$unit='mm';$format='A4';
|
||
//parent::PDF_EPS($orientation,$unit,$format);
|
||
$this->projekt = $projekt;
|
||
|
||
$this->app=$app;
|
||
$this->absender = '';
|
||
$this->firmendatenid = $this->app->DB->Select("SELECT MAX(id) FROM firmendaten LIMIT 1");
|
||
$this->parameter = '';
|
||
|
||
$viernachkommastellen_belege = $this->getStyleElement('viernachkommastellen_belege');
|
||
if($viernachkommastellen_belege=='1')
|
||
{
|
||
$this->anzahlkomma=4;
|
||
} else {
|
||
$this->anzahlkomma=2;
|
||
}
|
||
|
||
$this->ust_spalteausblende=false;
|
||
|
||
if($this->getStyleElement('kleinunternehmer')=='1')
|
||
{
|
||
$this->ust_befreit=1;
|
||
$this->ust_spalteausblende=true;
|
||
}
|
||
|
||
|
||
$hintergrund = $this->getStyleElement('hintergrund');
|
||
|
||
if(!empty(erpAPI::Ioncube_Property('isdevelopmentversion'))) {
|
||
$this->setDevelopmentVersionBackground();
|
||
}
|
||
elseif($this->app->erp->BriefpapierHintergrunddisable)
|
||
{
|
||
}
|
||
else if($hintergrund=='logo')
|
||
{
|
||
$logo = $this->app->erp->getSettingsFile('logo');
|
||
$filename = $this->app->erp->GetTMP().$this->app->Conf->WFdbname.'_logo.jpg';
|
||
if ($handle = fopen($filename, 'w')) {
|
||
fwrite($handle, $logo);
|
||
fclose($handle);
|
||
}
|
||
$this->logofile = $this->app->erp->GetTMP().$this->app->Conf->WFdbname.'_logo.jpg';
|
||
$this->briefpapier='';
|
||
}
|
||
else if($hintergrund=='briefpapier')
|
||
{
|
||
$briefpapier = $this->app->erp->getSettingsFile('briefpapier');
|
||
$filename = $this->app->erp->GetTMP().$this->app->Conf->WFdbname.'_briefpapier.pdf';
|
||
if ($handle = fopen($filename, 'w')) {
|
||
fwrite($handle, $briefpapier);
|
||
fclose($handle);
|
||
}
|
||
|
||
$this->briefpapier=$this->app->erp->GetTMP().$this->app->Conf->WFdbname.'_briefpapier.pdf';
|
||
$this->logofile = '';
|
||
|
||
$briefpapier2vorhanden = $this->getStyleElement('briefpapier2vorhanden');
|
||
$this->briefpapier2vorhanden = $briefpapier2vorhanden;
|
||
if($briefpapier2vorhanden > 0)
|
||
{
|
||
$briefpapier2 = $this->app->erp->getSettingsFile('briefpapier2');
|
||
$filename = $this->app->erp->GetTMP().$this->app->Conf->WFdbname.'_briefpapier2.pdf';
|
||
if ($handle = fopen($filename, 'w')) {
|
||
fwrite($handle, $briefpapier2);
|
||
fclose($handle);
|
||
}
|
||
|
||
$this->briefpapier2=$this->app->erp->GetTMP().$this->app->Conf->WFdbname.'_briefpapier2.pdf';
|
||
}
|
||
}
|
||
else {
|
||
$this->logofile = '';
|
||
$this->briefpapier='';
|
||
}
|
||
|
||
if(isset($this->app->Conf->WFtestmode) && $this->app->Conf->WFtestmode==true)
|
||
{
|
||
$this->briefpapier='./lib/dokumente/briefpapier_testmodus.pdf';
|
||
$this->briefpapier2='./lib/dokumente/briefpapier_testmodus.pdf';
|
||
}
|
||
|
||
$this->knickfalz = $this->getStyleElement('knickfalz');
|
||
$this->abseite2y = $this->getStyleElement('abseite2y');
|
||
|
||
$footersichtbar = $this->getStyleElement('footersichtbar');
|
||
if($footersichtbar==1) {
|
||
$this->nichtsichtbar_footer = false;
|
||
} else {
|
||
$this->nichtsichtbar_footer = true;
|
||
}
|
||
|
||
$seite_von_sichtbar = $this->getStyleElement('seite_von_sichtbar');
|
||
if($seite_von_sichtbar==1) {
|
||
$this->seite_von_sichtbar = false;
|
||
} else {
|
||
$this->seite_von_sichtbar = true;
|
||
}
|
||
|
||
$this->seite_von_ausrichtung = $this->getStyleElement('seite_von_ausrichtung');
|
||
|
||
|
||
$this->abstand_adresszeileoben = $this->getStyleElement('abstand_adresszeileoben');
|
||
$this->abstand_boxrechtsoben = $this->getStyleElement('abstand_boxrechtsoben');
|
||
$this->abstand_boxrechtsoben_lr = $this->getStyleElement('abstand_boxrechtsoben_lr');
|
||
$this->abstand_betreffzeileoben = $this->getStyleElement('abstand_betreffzeileoben');
|
||
$this->abstand_artikeltabelleoben = $this->getStyleElement('abstand_artikeltabelleoben');
|
||
|
||
$this->boxausrichtung = $this->getStyleElement('boxausrichtung');
|
||
|
||
$sichtbar = $this->getStyleElement('sichtbar');
|
||
if($sichtbar==1) {
|
||
$this->nichtsichtbar_zeileabsender = false;
|
||
} else {
|
||
$this->nichtsichtbar_zeileabsender =true;
|
||
}
|
||
|
||
|
||
$this->barcode_sichtbar = $this->getStyleElement('barcode');
|
||
$this->barcode_x = $this->getStyleElement('barcode_x');
|
||
$this->barcode_y = $this->getStyleElement('barcode_y');
|
||
$this->barcode_x_header = $this->getStyleElement('barcode_x_header');
|
||
$this->barcode_y_header = $this->getStyleElement('barcode_y_header');
|
||
|
||
$projekt = $this->projekt;
|
||
|
||
|
||
$this->waehrung=$this->getStyleElement('waehrung');
|
||
|
||
|
||
|
||
// kann man herausfinden was fuer ein projekt angegeben ist???
|
||
$speziallieferschein = $this->app->DB->Select("SELECT speziallieferschein FROM projekt WHERE id='$projekt' LIMIT 1");
|
||
$speziallieferscheinbeschriftung = $this->app->DB->Select("SELECT speziallieferscheinbeschriftung FROM projekt WHERE id='$projekt' LIMIT 1");
|
||
$eigenesteuer = $this->app->DB->Select("SELECT eigenesteuer FROM projekt WHERE id='$projekt' LIMIT 1");
|
||
if($eigenesteuer=='1'){
|
||
$this->waehrung = $this->app->DB->Select("SELECT waehrung FROM projekt WHERE id='$projekt' LIMIT 1");
|
||
}
|
||
if($speziallieferschein>0)
|
||
{
|
||
if(!$this->app->erp->BriefpapierHintergrunddisable)
|
||
{
|
||
$seite1 = $this->app->DB->Select("SELECT ds.datei FROM datei_stichwoerter ds INNER JOIN datei d ON d.id=ds.datei AND IFNULL(d.geloescht,0)=0 WHERE ds.subjekt LIKE 'Briefpapier1' AND ds.objekt LIKE 'Projekt' AND ds.parameter='$projekt' LIMIT 1");
|
||
$seite2 = $this->app->DB->Select("SELECT ds.datei FROM datei_stichwoerter ds INNER JOIN datei d ON d.id=ds.datei AND IFNULL(d.geloescht,0)=0 WHERE ds.subjekt LIKE 'Briefpapier2' AND ds.objekt LIKE 'Projekt' AND ds.parameter='$projekt' LIMIT 1");
|
||
}
|
||
|
||
if(!empty($seite1) && is_file($this->app->erp->GetDateiPfad($seite1))){
|
||
$this->briefpapier = $this->app->erp->GetDateiPfad($seite1);
|
||
}
|
||
if(!empty($seite2) && is_file($this->app->erp->GetDateiPfad($seite2))){
|
||
$this->briefpapier2 = $this->app->erp->GetDateiPfad($seite2);
|
||
}
|
||
|
||
if($seite2>0 && is_file($this->app->erp->GetDateiPfad($seite2))){
|
||
$this->briefpapier2vorhanden = 1;
|
||
}
|
||
|
||
$this->logofile = '';
|
||
|
||
if($speziallieferscheinbeschriftung!=1){
|
||
$this->nichtsichtbar_zeileabsender = true;
|
||
$this->nichtsichtbar_footer = true;
|
||
$this->nichtsichtbar_rechtsoben = true;
|
||
}
|
||
}
|
||
|
||
$this->nichtsichtbar_rechtsoben = true;
|
||
$this->nichtsichtbar_summe = false;
|
||
$this->nichtsichtbar_box=false;
|
||
$this->nichtsichtbar_empfaenger=false;
|
||
}
|
||
|
||
/**
|
||
* set Development-watermark as pdf-background
|
||
*
|
||
* @return void
|
||
*/
|
||
protected function setDevelopmentVersionBackground(): void
|
||
{
|
||
$this->briefpapier = $this->app->erp->GetTMP().'development_version.pdf';
|
||
$this->briefpapier2 = '';
|
||
$this->logofile = '';
|
||
if(is_file($this->briefpapier)) {
|
||
return;
|
||
}
|
||
$waterMarkPdf = new SuperFPDF('P', 'mm', 'A4');
|
||
$waterMarkPdf->filename = $this->briefpapier;
|
||
$waterMarkPdf->AddPage();
|
||
$waterMarkPdf->SetTextColor(200);
|
||
$waterMarkPdf->SetFont(
|
||
($this->app->erp->Firmendaten('schriftart') ? $this->app->erp->Firmendaten('schriftart') : 'Arial'),
|
||
'B',
|
||
45
|
||
);
|
||
$waterMarkPdf->Rotate(45, 45, 180);
|
||
$waterMarkPdf->Text(45, 180, 'DEVELOPMENT VERSION');
|
||
$waterMarkPdf->Rotate(0);
|
||
$waterMarkPdf->SetTextColor(0);
|
||
file_put_contents($waterMarkPdf->filename, $waterMarkPdf->displayAnhaenge('S'));
|
||
}
|
||
|
||
/**
|
||
* @param string $language
|
||
*
|
||
* @return string
|
||
*/
|
||
public function getLanguageCodeFrom($language) {
|
||
if(empty($language)) {
|
||
return '';
|
||
}
|
||
$languages = $this->app->DB->SelectArr("SELECT * FROM sprachen WHERE aktiv = 1 AND iso <> ''");
|
||
if(empty($languages)) {
|
||
return '';
|
||
}
|
||
foreach($languages as $languagesRow) {
|
||
if(in_array(
|
||
$language,
|
||
[
|
||
$languagesRow['iso'],
|
||
$languagesRow['alias'],
|
||
$languagesRow['bezeichnung_de'],
|
||
$languagesRow['bezeichnung_en'
|
||
]
|
||
]
|
||
)) {
|
||
return $languagesRow['iso'];
|
||
}
|
||
}
|
||
|
||
return '';
|
||
}
|
||
|
||
public function GetChargeMHDSNString($type,$doctype,$doctypeid,$posid, $returnSimpleString = false)
|
||
{
|
||
$lieferschein_posid = 0;
|
||
$auftrag_position_id = 0;
|
||
$lieferschein = 0;
|
||
if($doctype === 'rechnung'){
|
||
$lieferschein = $this->app->DB->Select("SELECT lieferschein FROM rechnung WHERE id = '$doctypeid' LIMIT 1");
|
||
}
|
||
if($doctype === 'rechnung' && !$lieferschein){
|
||
$lieferschein = $this->app->DB->Select("SELECT id FROM lieferschein WHERE rechnungid = '$doctypeid' LIMIT 1");
|
||
}
|
||
if($doctype === 'rechnung' && !$lieferschein)
|
||
{
|
||
$auftrag = $this->app->DB->Select("SELECT auftragid FROM rechnung WHERE id = '$doctypeid' LIMIT 1");
|
||
if($auftrag){
|
||
$lieferschein = $this->app->DB->Select("SELECT id FROM lieferschein WHERE auftragid = '$auftrag' LIMIT 1");
|
||
}
|
||
}
|
||
if($doctype === 'lieferschein'){
|
||
$lieferschein_posid = $posid;
|
||
}
|
||
if($doctype === 'rechnung'){
|
||
$auftrag_position_id = $this->app->DB->Select("SELECT auftrag_position_id FROM rechnung_position WHERE id='$posid'");
|
||
}
|
||
if($doctype === 'gutschrift'){
|
||
// $auftrag_position_id = $this->app->DB->Select("SELECT gutschrift_position_id FROM rechnung_position WHERE id='$posid'");
|
||
}
|
||
if($doctype === 'rechnung')
|
||
{
|
||
if(!empty($auftrag_position_id) && $auftrag_position_id > 0){
|
||
$lieferschein_posid = $this->app->DB->Select("SELECT id FROM lieferschein_position WHERE auftrag_position_id='$auftrag_position_id' AND auftrag_position_id <> 0 ORDER BY lieferschein = '$lieferschein' DESC LIMIT 1");
|
||
}
|
||
if(!$lieferschein_posid)
|
||
{
|
||
$lieferschein_posarr = $this->app->DB->SelectArr("SELECT lieferschein_position_id FROM `sammelrechnung_position` WHERE rechnung_position_id = '$posid' AND lieferschein_position_id <> 0 AND menge <> 0");
|
||
if(!empty($lieferschein_posarr))
|
||
{
|
||
$lieferschein_posid = null;
|
||
foreach($lieferschein_posarr as $v)
|
||
{
|
||
$lieferschein_posid[] = $v['lieferschein_position_id'];
|
||
}
|
||
if(!empty($lieferschein_posid) && count($lieferschein_posid) === 1)
|
||
{
|
||
$lieferschein_posid = reset($lieferschein_posid);
|
||
if($lieferschein_posid){
|
||
$lieferschein = $this->app->DB->Select("SELECT lieferschein FROM lieferschein_position WHERE id = '$lieferschein_posid' LIMIT 1");
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}else{
|
||
if(!empty($auftrag_position_id) && $auftrag_position_id > 0){
|
||
$lieferschein_posid = $this->app->DB->Select("SELECT id FROM lieferschein_position WHERE auftrag_position_id='$auftrag_position_id' AND auftrag_position_id <> 0 LIMIT 1");
|
||
}
|
||
}
|
||
if($type === 'sn' && ($doctype === 'lieferschein' || $doctype === 'rechnung' || $doctype === 'gutschrift'))
|
||
{
|
||
if(!empty($tmp))
|
||
{
|
||
$ctmp = count($tmp);
|
||
for($i=0;$i<$ctmp;$i++)
|
||
{
|
||
$tmp_string[]=$tmp[$i]['seriennummer'];
|
||
}
|
||
}
|
||
}
|
||
|
||
$belegPosCharge = $this->getStyleElement('beleg_pos_charge');
|
||
$belegPosMhd = $this->getStyleElement('beleg_pos_mhd');
|
||
if($returnSimpleString) {
|
||
$belegPosCharge = 1;
|
||
$belegPosMhd = 1;
|
||
}
|
||
if($belegPosCharge=='1'
|
||
&& $belegPosMhd =='1') {
|
||
if($type === 'mhd')
|
||
{
|
||
$tmp = $this->app->DB->SelectArr("SELECT SUM(menge) as menge,wert, wert2 ,type2
|
||
FROM beleg_chargesnmhd
|
||
WHERE type='$type' AND doctype='$doctype' AND doctypeid='$doctypeid' AND pos='$posid'
|
||
GROUP by wert,wert2");
|
||
if(empty($tmp) && $doctype === 'rechnung' && $lieferschein && $lieferschein_posid)
|
||
{
|
||
if(is_array($lieferschein_posid))
|
||
{
|
||
$tmp = $this->app->DB->SelectArr("SELECT SUM(menge) as menge,wert, wert2 ,type2
|
||
FROM beleg_chargesnmhd
|
||
WHERE type='$type' AND doctype='lieferschein' AND pos in (".implode(', ',$lieferschein_posid ).")
|
||
GROUP by wert,wert2");
|
||
}else{
|
||
$tmp = $this->app->DB->SelectArr("SELECT SUM(menge) as menge,wert, wert2 ,type2
|
||
FROM beleg_chargesnmhd
|
||
WHERE type='$type' AND doctype='lieferschein' AND doctypeid='$lieferschein' AND pos='$lieferschein_posid'
|
||
GROUP by wert,wert2");
|
||
}
|
||
}
|
||
|
||
}elseif($type === 'charge')
|
||
{
|
||
if($returnSimpleString) {
|
||
$tmp = $this->app->DB->SelectArr("SELECT SUM(bc1.menge) as menge,bc1.wert
|
||
FROM beleg_chargesnmhd bc1
|
||
WHERE bc1.type='$type' AND bc1.doctype='$doctype' AND bc1.doctypeid='$doctypeid' AND bc1.pos='$posid'
|
||
GROUP by bc1.wert");
|
||
}
|
||
else{
|
||
$tmp = $this->app->DB->SelectArr("SELECT SUM(bc1.menge) as menge,bc1.wert
|
||
FROM beleg_chargesnmhd bc1
|
||
LEFT JOIN beleg_chargesnmhd bc2
|
||
ON bc1.doctype = bc2.doctype AND bc1.doctypeid = bc2.doctypeid AND bc1.pos = bc2.pos AND bc1.lagerplatz = bc2.lagerplatz
|
||
AND bc2.type = 'mhd' AND bc2.type2 = 'charge' AND bc2.wert2 = bc1.wert
|
||
WHERE bc1.type='$type' AND bc1.doctype='$doctype' AND bc1.doctypeid='$doctypeid' AND bc1.pos='$posid' AND isnull(bc2.id)
|
||
GROUP by bc1.wert");
|
||
}
|
||
if(empty($tmp) && $doctype === 'rechnung' && $lieferschein && $lieferschein_posid)
|
||
{
|
||
if($returnSimpleString) {
|
||
if(is_array($lieferschein_posid)){
|
||
$tmp = $this->app->DB->SelectArr("SELECT SUM(bc1.menge) as menge,bc1.wert
|
||
FROM beleg_chargesnmhd bc1
|
||
WHERE bc1.type='$type' AND bc1.doctype='lieferschein' AND
|
||
bc1.pos in ('" . implode(', ', $lieferschein_posid) . "')
|
||
GROUP by bc1.wert");
|
||
}else{
|
||
$tmp = $this->app->DB->SelectArr("SELECT SUM(bc1.menge) as menge,bc1.wert
|
||
FROM beleg_chargesnmhd bc1
|
||
WHERE bc1.type='$type' AND bc1.doctype='lieferschein' AND bc1.doctypeid='$lieferschein'
|
||
AND bc1.pos='$lieferschein_posid'
|
||
GROUP by bc1.wert");
|
||
}
|
||
}
|
||
else{
|
||
if(is_array($lieferschein_posid)){
|
||
$tmp = $this->app->DB->SelectArr("SELECT SUM(bc1.menge) as menge,bc1.wert
|
||
FROM beleg_chargesnmhd bc1
|
||
LEFT JOIN beleg_chargesnmhd bc2
|
||
ON bc1.doctype = bc2.doctype AND bc1.doctypeid = bc2.doctypeid AND bc1.pos = bc2.pos AND bc1.lagerplatz = bc2.lagerplatz
|
||
AND bc2.type = 'mhd' AND bc2.type2 = 'charge' AND bc2.wert2 = bc1.wert
|
||
WHERE bc1.type='$type' AND bc1.doctype='lieferschein' AND bc1.pos in ('" . implode(', ', $lieferschein_posid) . "') AND isnull(bc2.id)
|
||
GROUP by bc1.wert");
|
||
}else{
|
||
$tmp = $this->app->DB->SelectArr("SELECT SUM(bc1.menge) as menge,bc1.wert
|
||
FROM beleg_chargesnmhd bc1
|
||
LEFT JOIN beleg_chargesnmhd bc2
|
||
ON bc1.doctype = bc2.doctype AND bc1.doctypeid = bc2.doctypeid AND bc1.pos = bc2.pos AND bc1.lagerplatz = bc2.lagerplatz
|
||
AND bc2.type = 'mhd' AND bc2.type2 = 'charge' AND bc2.wert2 = bc1.wert
|
||
WHERE bc1.type='$type' AND bc1.doctype='lieferschein' AND bc1.doctypeid='$lieferschein' AND bc1.pos='$lieferschein_posid' AND isnull(bc2.id)
|
||
GROUP by bc1.wert");
|
||
}
|
||
}
|
||
}
|
||
}else{
|
||
$tmp = $this->app->DB->SelectArr("SELECT SUM(menge) as menge,wert
|
||
FROM beleg_chargesnmhd
|
||
WHERE type='$type' AND doctype='$doctype' AND doctypeid='$doctypeid' AND pos='$posid'
|
||
GROUP by wert");
|
||
if(empty($tmp) && $lieferschein && $lieferschein_posid)
|
||
{
|
||
if(is_array($lieferschein_posid))
|
||
{
|
||
$tmp = $this->app->DB->SelectArr("SELECT SUM(menge) as menge,wert
|
||
FROM beleg_chargesnmhd
|
||
WHERE type='$type' AND doctype='lieferschein' AND pos in ('".implode(', ',$lieferschein_posid )."')
|
||
GROUP by wert");
|
||
}else{
|
||
$tmp = $this->app->DB->SelectArr("SELECT SUM(menge) as menge,wert
|
||
FROM beleg_chargesnmhd
|
||
WHERE type='$type' AND doctype='lieferschein' AND doctypeid='$lieferschein' AND pos='$lieferschein_posid'
|
||
GROUP by wert");
|
||
}
|
||
}
|
||
}
|
||
if(!empty($tmp)){
|
||
$ctmp = count($tmp);
|
||
for ($i = 0; $i < $ctmp; $i++) {
|
||
if($type === 'mhd' && $tmp[$i]['wert'] != ""){
|
||
$tmp[$i]['wert'] = ($i > 0 ? $this->app->erp->Beschriftung('dokument_mhd') . ': ' : '') . date('d.m.Y', strtotime($tmp[$i]['wert']));
|
||
if($tmp[$i]['wert2'] != '' && $tmp[$i]['type2'] === 'charge') {
|
||
$tmp[$i]['wert'] .= ' ' . $this->app->erp->Beschriftung('dokument_charge') . ': ' . $tmp[$i]['wert2'];
|
||
}
|
||
}elseif($type === 'charge'){
|
||
if($i > 0) {
|
||
$tmp[$i]['wert'] = $this->app->erp->Beschriftung('dokument_charge') . ': ' . $tmp[$i]['wert'];
|
||
}
|
||
}elseif($type === 'sn'){
|
||
if($i > 0) {
|
||
$tmp[$i]['wert'] = $this->app->erp->Beschriftung('dokument_seriennummer') . ': ' . $tmp[$i]['wert'];
|
||
}
|
||
}
|
||
if($tmp[$i]['menge'] > 1) {
|
||
$tmp[$i]['menge'] = ' (' . (float)$tmp[$i]['menge'] . ')';
|
||
}else {
|
||
$tmp[$i]['menge'] = '';
|
||
}
|
||
$tmp_string[] = $tmp[$i]['wert'] . $tmp[$i]['menge'];
|
||
}
|
||
}
|
||
}else{
|
||
$tmp = $this->app->DB->SelectArr("SELECT SUM(menge) as menge,wert, wert2
|
||
FROM beleg_chargesnmhd
|
||
WHERE type='$type' AND doctype='$doctype' AND doctypeid='$doctypeid' AND pos='$posid'
|
||
GROUP by wert");
|
||
if(empty($tmp) && $doctype === 'rechnung' && $lieferschein && $lieferschein_posid)
|
||
{
|
||
if(is_array($lieferschein_posid))
|
||
{
|
||
$tmp = $this->app->DB->SelectArr("SELECT SUM(menge) as menge,wert, wert2
|
||
FROM beleg_chargesnmhd
|
||
WHERE type='$type' AND doctype='lieferschein' AND pos in ('".implode(', ',$lieferschein_posid )."')
|
||
GROUP by wert");
|
||
}else{
|
||
$tmp = $this->app->DB->SelectArr("SELECT SUM(menge) as menge,wert, wert2
|
||
FROM beleg_chargesnmhd
|
||
WHERE type='$type' AND doctype='lieferschein' AND doctypeid='$lieferschein' AND pos='$lieferschein_posid'
|
||
GROUP by wert");
|
||
}
|
||
}
|
||
|
||
if(!empty($tmp)){
|
||
$ctmp = count($tmp);
|
||
for ($i = 0; $i < $ctmp; $i++) {
|
||
if($type === 'mhd' && $tmp[$i]['wert'] != ''){
|
||
$tmp[$i]['wert'] =
|
||
($i > 0 && !$returnSimpleString ? $this->app->erp->Beschriftung('dokument_mhd') . ': ' : '') .
|
||
date('d.m.Y', strtotime($tmp[$i]['wert']));
|
||
}
|
||
elseif($type === 'charge'){
|
||
if($i > 0) {
|
||
$tmp[$i]['wert'] = (!$returnSimpleString?$this->app->erp->Beschriftung('dokument_charge') . ': ':'') . $tmp[$i]['wert'];
|
||
}
|
||
}
|
||
elseif($type === 'sn'){
|
||
if($i > 0) {
|
||
$tmp[$i]['wert'] = (!$returnSimpleString?$this->app->erp->Beschriftung('dokument_seriennummer') . ': ':'') . $tmp[$i]['wert'];
|
||
}
|
||
}
|
||
if($tmp[$i]['menge'] > 1) {
|
||
$tmp[$i]['menge'] = ' (' . (float)$tmp[$i]['menge'] . ')';
|
||
}
|
||
else {
|
||
$tmp[$i]['menge'] = '';
|
||
}
|
||
$tmp_string[] = $tmp[$i]['wert'] . $tmp[$i]['menge'];
|
||
}
|
||
}
|
||
}
|
||
|
||
if(!empty($tmp_string)){
|
||
if($returnSimpleString) {
|
||
return implode(', ', $tmp_string);
|
||
}
|
||
return implode("\r\n",$tmp_string);
|
||
}
|
||
return '';
|
||
}
|
||
|
||
function CheckPosition($value,$doctype,$doctypeid,$posid)
|
||
{
|
||
// ean
|
||
if($this->getStyleElement('beleg_pos_ean')=='1')
|
||
{
|
||
$ean = $this->app->DB->Select("SELECT ean FROM artikel WHERE id='".$value['artikel']."' LIMIT 1");
|
||
if($ean!='') {
|
||
$tmpvalue['ean'] = $this->app->erp->Beschriftung('dokument_ean').': '.$ean;
|
||
}
|
||
}
|
||
|
||
// zolltarif // check ust id
|
||
$ust_befreit = $this->app->DB->Select("SELECT ust_befreit FROM $doctype WHERE id='$doctypeid' LIMIT 1");
|
||
if(($ust_befreit==2 && ($doctype=='rechnung' || $doctype=='gutschrift')) ||
|
||
($doctype!='proformarechnung' && $this->getStyleElement('beleg_pos_zolltarifnummer')=='1'))
|
||
{
|
||
if($value['zolltarifnummer']=='' || $value['zolltarifnummer']==0) {
|
||
$value['zolltarifnummer'] = $this->app->DB->Select("SELECT zolltarifnummer FROM artikel WHERE id='".$value['artikel']."' LIMIT 1");
|
||
}
|
||
if($value['herkunftsland']=='' || $value['herkunftsland']==0) {
|
||
$value['herkunftsland'] = $this->app->DB->Select("SELECT herkunftsland FROM artikel WHERE id='".$value['artikel']."' LIMIT 1");
|
||
}
|
||
} else {
|
||
$value['zolltarifnummer']='';
|
||
$value['herkunftsland']='';
|
||
}
|
||
|
||
if($this->getStyleElement('beleg_pos_herkunftsland')=='1')
|
||
{
|
||
$value['herkunftsland']='';
|
||
}
|
||
|
||
$this->mhd[$doctype][$doctypeid][$posid] = $this->GetChargeMHDSNString('mhd',$doctype,$doctypeid,$posid);
|
||
// mhd
|
||
if($this->getStyleElement('beleg_pos_mhd')=='1')
|
||
{
|
||
$mhd=$this->mhd[$doctype][$doctypeid][$posid];//$this->GetChargeMHDSNString('mhd',$doctype,$doctypeid,$posid);
|
||
if(strpos($value['beschreibung'], '{MHD}') !== false) {
|
||
$value['beschreibung'] = str_replace(
|
||
'{MHD}',
|
||
$mhd,
|
||
$value['beschreibung']
|
||
);
|
||
}
|
||
if($mhd!='') {
|
||
$tmpvalue['mhd'] = $this->app->erp->Beschriftung('dokument_mhd').': '.$mhd;
|
||
}
|
||
}
|
||
|
||
$this->charge[$doctype][$doctypeid][$posid] = $this->GetChargeMHDSNString('charge',$doctype,$doctypeid,$posid);
|
||
// charge
|
||
if($this->getStyleElement('beleg_pos_charge')=='1')
|
||
{
|
||
$charge=$this->charge[$doctype][$doctypeid][$posid];
|
||
if(strpos($value['beschreibung'], '{CHARGE}') !== false) {
|
||
$value['beschreibung'] = str_replace(
|
||
'{CHARGE}',
|
||
$charge,
|
||
$value['beschreibung']
|
||
);
|
||
}
|
||
if($charge!='') {
|
||
$tmpvalue['charge'] = $this->app->erp->Beschriftung('dokument_charge').': '.$charge;
|
||
}
|
||
}
|
||
|
||
$this->sn[$doctype][$doctypeid][$posid] = $this->GetChargeMHDSNString('sn',$doctype,$doctypeid,$posid);
|
||
// sn
|
||
if($this->getStyleElement('beleg_pos_sn')=='1')
|
||
{
|
||
$seriennr=$this->sn[$doctype][$doctypeid][$posid];
|
||
if(strpos($value['beschreibung'], '{SN}') !== false) {
|
||
$value['beschreibung'] = str_replace(
|
||
'{SN}',
|
||
$seriennr,
|
||
$value['beschreibung']
|
||
);
|
||
}
|
||
if($seriennr!='') {
|
||
$tmpvalue['sn'] = $this->app->erp->Beschriftung('dokument_seriennummer').': '.$seriennr;
|
||
$value['seriennummer']='';
|
||
}
|
||
}
|
||
|
||
if(!empty($tmpvalue)) {
|
||
if($value['beschreibung']!=''){
|
||
$value['beschreibung'] = $value['beschreibung'] . "\r\n" . implode("\r\n", $tmpvalue);
|
||
}
|
||
else{
|
||
$value['beschreibung'] = implode("\r\n", $tmpvalue);
|
||
}
|
||
}
|
||
return $value;
|
||
}
|
||
|
||
|
||
|
||
|
||
public function addItem($rdata){
|
||
// add rabatt
|
||
if($rdata['price']!='-'){
|
||
if($rdata['rabatt'] == 100){
|
||
$rdata['tprice'] = round($rdata['amount'] * ((double)$rdata['price'] - (double)($rdata['price'] / 100.00 * (double)$rdata['rabatt'])), 13);
|
||
}else{
|
||
$rdata['tprice'] = $rdata['amount'] * ((double)$rdata['price'] - (double)($rdata['price'] / 100.00 * (double)$rdata['rabatt']));
|
||
}
|
||
}
|
||
else {
|
||
$rdata['tprice']='-';
|
||
}
|
||
$this->items[]=$rdata;
|
||
}
|
||
|
||
public function setSender($rdata){
|
||
$this->sender['enterprise'] = $this->app->erp->ReadyForPDF($rdata[0]);
|
||
$this->sender['firstname'] = $this->app->erp->ReadyForPDF($rdata[1]);
|
||
$this->sender['familyname'] = $this->app->erp->ReadyForPDF($rdata[2]);
|
||
$this->sender['address1'] = $this->app->erp->ReadyForPDF($rdata[3]);
|
||
$this->sender['areacode'] = $this->app->erp->ReadyForPDF($rdata[4]);
|
||
$this->sender['city'] = $this->app->erp->ReadyForPDF($rdata[5]);
|
||
if(isset($rdata[6])){
|
||
$this->sender['country'] = $this->app->erp->ReadyForPDF($rdata[6]);
|
||
}
|
||
}
|
||
|
||
function setRecipientRechnung($id)
|
||
{
|
||
|
||
|
||
}
|
||
|
||
|
||
function setRecipientLieferadresse($id,$table)
|
||
{
|
||
$this->id = $id;
|
||
$this->table = $table;
|
||
|
||
if($table == 'serviceauftrag'){
|
||
$adressid = $this->app->DB->Select("SELECT adresse FROM serviceauftrag WHERE id = '$id' LIMIT 1");
|
||
if($adressid != "" && $adressid > 0){
|
||
$tmp = $this->app->DB->SelectArr("SELECT * FROM adresse WHERE id='$adressid' LIMIT 1");
|
||
}
|
||
}else{
|
||
$tmp = $this->app->DB->SelectArr("SELECT * FROM $table WHERE id='$id' LIMIT 1");
|
||
}
|
||
|
||
$titelansprechpartner="";
|
||
$titelname="";
|
||
|
||
if($tmp[0]['ansprechpartner']!='' && $tmp[0]['titel']!='')
|
||
{
|
||
$titelansprechpartner = $tmp[0]['titel'].' ';
|
||
}
|
||
else if ($tmp[0]['titel']!='') {
|
||
$titelname = $tmp[0]['titel'].' ';
|
||
}
|
||
|
||
if($table != 'serviceauftrag'){
|
||
if($tmp[0]['typ']==''){
|
||
$tmp[0]['typ'] = $this->app->DB->Select("SELECT typ FROM adresse WHERE id='" . $tmp[0]['adresse'] . "' LIMIT 1");
|
||
}
|
||
}
|
||
|
||
$check = $this->app->DB->Select("SELECT bezeichnung FROM adresse_typ WHERE type='".$tmp[0]['typ']."' LIMIT 1");
|
||
|
||
if($check!="")
|
||
$this->recipient['anrede'] = $this->app->erp->ReadyForPDF($check);
|
||
else
|
||
$this->recipient['anrede'] = $this->app->erp->ReadyForPDF(ucfirst($tmp[0]['typ']));
|
||
|
||
|
||
if($tmp[0]['typ']!="person")
|
||
{
|
||
$this->recipient['enterprise'] = $this->app->erp->ReadyForPDF($titelname.$tmp[0]['name']);
|
||
|
||
|
||
if($tmp[0]['abteilung']!='' && strlen($tmp[0]['abteilung']) >1){
|
||
$this->recipient['address2'] = $this->app->erp->ReadyForPDF($tmp[0]['abteilung']);
|
||
}
|
||
|
||
if($tmp[0]['ansprechpartner']!='' && strlen($tmp[0]['ansprechpartner'])>1){
|
||
$this->recipient['firstname'] = $this->app->erp->ReadyForPDF($titelansprechpartner . $tmp[0]['ansprechpartner']);
|
||
}
|
||
|
||
if(($table=='rechnung' || $table=='gutschrift') && $this->getStyleElement('rechnung_gutschrift_ansprechpartner')!='1'){
|
||
$this->recipient['firstname'] = '';
|
||
}
|
||
else if(($table=='angebot' || $table=='auftrag' || $table=='bestellung') && $this->getStyleElement('angebot_auftrag_bestellung_ansprechpartner')!='1'){
|
||
$this->recipient['firstname'] = '';
|
||
}
|
||
|
||
|
||
if($tmp[0]['unterabteilung']!=''){
|
||
$this->recipient['address3'] = $this->app->erp->ReadyForPDF($tmp[0]['unterabteilung']);
|
||
}
|
||
|
||
if($tmp[0]['adresszusatz']!=''){
|
||
$this->recipient['address4'] = $this->app->erp->ReadyForPDF($tmp[0]['adresszusatz']);
|
||
}
|
||
|
||
}
|
||
|
||
else {
|
||
$vorname = '';
|
||
if(isset($tmp[0]['vorname']) && $tmp[0]['vorname']!='' && strlen(trim($tmp[0]['vorname']))>0){
|
||
$vorname = $tmp[0]['vorname'] . ' ';
|
||
}
|
||
|
||
$this->recipient['enterprise'] = $this->app->erp->ReadyForPDF($vorname.$tmp[0]['name']);
|
||
$this->recipient['address2'] = $this->app->erp->ReadyForPDF($tmp[0]['adresszusatz']);
|
||
}
|
||
|
||
|
||
$this->recipient['address1'] = $this->app->erp->ReadyForPDF($tmp[0]['strasse']);
|
||
$this->recipient['areacode'] = $this->app->erp->ReadyForPDF($tmp[0]['plz']);
|
||
$this->recipient['city'] = $this->app->erp->ReadyForPDF($tmp[0]['ort']);
|
||
//if($this->recipient['city']!="")
|
||
$this->recipient['country'] = $this->app->erp->ReadyForPDF($tmp[0]['land']);
|
||
}
|
||
|
||
|
||
function setRecipientDB($adresse)
|
||
{
|
||
$tmp = $this->app->DB->SelectArr("SELECT * FROM adresse WHERE id='$adresse' LIMIT 1");
|
||
if($tmp[0]['typ']!="person")
|
||
{
|
||
$this->recipient['enterprise'] = $this->app->erp->ReadyForPDF($tmp[0]['name']);
|
||
|
||
if($tmp[0]['abteilung']!='' && strlen($tmp[0]['abteilung'])>1){
|
||
$this->recipient['address2'] = $this->app->erp->ReadyForPDF($tmp[0]['abteilung']);
|
||
}
|
||
|
||
|
||
$tmp[0]['anrede'] = $this->app->DB->Select("SELECT anrede FROM adresse WHERE id='".$tmp[0]['id']."' LIMIT 1");
|
||
$check = $this->app->DB->Select("SELECT bezeichnung FROM adresse_typ WHERE type='".$tmp[0]['anrede']."' LIMIT 1");
|
||
|
||
if($check!=''){
|
||
$this->recipient['anrede'] = $this->app->erp->ReadyForPDF($check);
|
||
}
|
||
else{
|
||
$this->recipient['anrede'] = $this->app->erp->ReadyForPDF(ucfirst($tmp[0]['anrede']));
|
||
}
|
||
|
||
|
||
if(($this->table=='rechnung' || $this->table=='gutschrift') && $this->getStyleElement('rechnung_gutschrift_ansprechpartner')=='1')
|
||
{
|
||
if($tmp[0]['ansprechpartner']!=''){
|
||
$this->recipient['firstname'] = $this->app->erp->ReadyForPDF($tmp[0]['ansprechpartner']);
|
||
}
|
||
}
|
||
else if(($this->table=='angebot' || $this->table=='auftrag' || $this->table=='bestellung') && $this->getStyleElement("angebot_auftrag_bestellung_ansprechpartner")=='1')
|
||
{
|
||
if($tmp[0]['ansprechpartner']!=''){
|
||
$this->recipient['firstname'] = $this->app->erp->ReadyForPDF($tmp[0]['ansprechpartner']);
|
||
}
|
||
}
|
||
|
||
|
||
if($tmp[0]['unterabteilung']!=''){
|
||
$this->recipient['address3'] = $this->app->erp->ReadyForPDF($tmp[0]['unterabteilung']);
|
||
}
|
||
|
||
if($tmp[0]['adresszusatz']!=''){
|
||
$this->recipient['address4'] = $this->app->erp->ReadyForPDF($tmp[0]['adresszusatz']);
|
||
}
|
||
|
||
}
|
||
|
||
else {
|
||
$this->recipient['enterprise'] = $this->app->erp->ReadyForPDF($tmp[0]['name']);
|
||
$this->recipient['address2'] = $this->app->erp->ReadyForPDF($tmp[0]['adresszusatz']);
|
||
}
|
||
|
||
|
||
$this->recipient['address1'] = $this->app->erp->ReadyForPDF($tmp[0]['strasse']);
|
||
$this->recipient['areacode'] = $this->app->erp->ReadyForPDF($tmp[0]['plz']);
|
||
$this->recipient['city'] = $this->app->erp->ReadyForPDF($tmp[0]['ort']);
|
||
//if($this->recipient['city']!="")
|
||
$this->recipient['country'] = $this->app->erp->ReadyForPDF($tmp[0]['land']);
|
||
}
|
||
|
||
|
||
public function setRecipient($rdata){
|
||
$this->recipient['enterprise'] = $this->app->erp->ReadyForPDF($rdata[0]);
|
||
$this->recipient['firstname'] = $this->app->erp->ReadyForPDF($rdata[1]);
|
||
$this->recipient['familyname'] = $this->app->erp->ReadyForPDF($rdata[2]);
|
||
$this->recipient['address1'] = $this->app->erp->ReadyForPDF($rdata[3]);
|
||
$this->recipient['areacode'] = $this->app->erp->ReadyForPDF($rdata[4]);
|
||
$this->recipient['city'] = $this->app->erp->ReadyForPDF($rdata[5]);
|
||
if(isset($rdata[3]))$this->recipient['country'] = $this->app->erp->ReadyForPDF($rdata[6]);
|
||
}
|
||
|
||
public function setCorrDetails($rdata, $onlyData = false){
|
||
if($onlyData) {
|
||
$this->corrDetails = $rdata;
|
||
return;
|
||
}
|
||
|
||
if($this->getStyleElement("projektnummerimdokument")=='1'){
|
||
$rdata[$this->app->erp->Beschriftung("dokument_projekt")] = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='" . $this->projekt . "' LIMIT 1");
|
||
}
|
||
|
||
if($this->getStyleElement("internetnummerimbeleg")=='1')
|
||
{
|
||
switch($this->doctype)
|
||
{
|
||
case "rechnung":
|
||
case "lieferschein":
|
||
$internetnummer = $this->app->DB->Select("SELECT a.internet FROM auftrag a LEFT JOIN ".$this->doctype." b ON b.auftragid=a.id WHERE b.id='".$this->doctypeid."' LIMIT 1");
|
||
break;
|
||
case "gutschrift":
|
||
$internetnummer = $this->app->DB->Select("SELECT a.internet FROM gutschrift g LEFT JOIN rechnung r ON r.id=g.rechnungid LEFT JOIN auftrag a ON a.id=r.auftragid WHERE g.id='".$this->doctypeid."' LIMIT 1");
|
||
break;
|
||
case "auftrag":
|
||
$internetnummer = $this->app->DB->Select("SELECT internet FROM auftrag WHERE id='".$this->doctypeid."' LIMIT 1");
|
||
break;
|
||
default:
|
||
$internetnummer = '';
|
||
|
||
}
|
||
//$rdata[$this->getStyleElement("beschriftunginternetnummer")]=$internetnummer;
|
||
$rdata[$this->app->erp->Beschriftung("beschriftunginternetnummer")]=$internetnummer;
|
||
}
|
||
if($this->doctype=="rechnung"||$this->doctype=="lieferschein"||$this->doctype=="gutschrift"||$this->doctype=="auftrag"||$this->doctype=="angebot"||$this->doctype=="lieferschein")
|
||
{
|
||
if($this->doctype=='lieferschein'){
|
||
$tabelle='lieferschein';
|
||
}else {
|
||
$tabelle=$this->doctype;
|
||
}
|
||
// $bearbeiteremail = $this->app->DB->Select("SELECT b.email FROM ".$this->doctype." a LEFT JOIN adresse adr ON a.adresse=adr.id LEFT JOIN adresse b ON b.id=adr.innendienst WHERE a.id='".$this->doctypeid."' LIMIT 1");
|
||
// $bearbeitertelefon = $this->app->DB->Select("SELECT b.telefon FROM ".$this->doctype." a LEFT JOIN adresse adr ON a.adresse=adr.id LEFT JOIN adresse b ON b.id=adr.innendienst WHERE a.id='".$this->doctypeid."' LIMIT 1");
|
||
|
||
$bearbeiteremail = $this->app->DB->Select("SELECT b.email FROM ".$tabelle." a LEFT JOIN adresse b ON b.id=a.bearbeiterid WHERE a.id='".$this->doctypeid."' LIMIT 1");
|
||
$bearbeitertelefon = $this->app->DB->Select("SELECT b.telefon FROM ".$tabelle." a LEFT JOIN adresse b ON b.id=a.bearbeiterid WHERE a.id='".$this->doctypeid."' LIMIT 1");
|
||
}
|
||
|
||
if($this->getStyleElement('bearbeiteremailimdokument')=='1'){
|
||
$rdata[$this->app->erp->Beschriftung('dokument_email')] = $bearbeiteremail;
|
||
}
|
||
if($this->getStyleElement('bearbeitertelefonimdokument')=='1'){
|
||
$rdata[$this->app->erp->Beschriftung('dokument_telefon')] = $bearbeitertelefon;
|
||
}
|
||
|
||
|
||
//$rdata[$this->getStyleElement("beschriftungbearbeiteremail")]=$internetnummer;
|
||
//$rdata[$this->getStyleElement("beschriftungbearbeitertelefonnummer")]=$internetnummer;
|
||
|
||
$this->corrDetails = $rdata;
|
||
}
|
||
public function setBoldCorrDetails($rdata){
|
||
$this->boldCorrDetails = $rdata;
|
||
}
|
||
|
||
public function setItalicBoldCorrDetails($rdata){
|
||
$this->italicBoldCorrDetails = $rdata;
|
||
}
|
||
|
||
public function setItalicCorrDetails($rdata){
|
||
$this->italicCorrDetails = $rdata;
|
||
}
|
||
|
||
public function setTextDetails($rdata){
|
||
$this->textDetails = $rdata;
|
||
}
|
||
|
||
|
||
public function setTotals($rdata){
|
||
$this->totals = $rdata;
|
||
}
|
||
|
||
// Briefpapier festlegen
|
||
public function setStationery($stationeryfile) {
|
||
$this->setSourceFile($stationeryfile);
|
||
$tplidx = $this->ImportPage(1);
|
||
$this->useTemplate($tplidx);
|
||
}
|
||
/*
|
||
public function setLogo($logofile) {
|
||
$this->logofile = "./lib/pdf/images/".$logofile;
|
||
}
|
||
*/
|
||
|
||
// label settings
|
||
public function setBarcode($barcode) {
|
||
$barcode = preg_replace('/[^0-9a-zA-Z\-]/', '', $barcode);
|
||
if($this->barcode_sichtbar)
|
||
$this->barcode = $barcode;
|
||
else $this->barcode="";
|
||
|
||
}
|
||
|
||
|
||
public function Header() {
|
||
if($this->knickfalz!='1'){
|
||
$this->Line(0,105,5,105);
|
||
$this->Line(0,148,7,148);
|
||
$this->Line(0,210,5,210);
|
||
}
|
||
if($this->logofile!='')
|
||
$this->Image($this->logofile,15,10,110);
|
||
|
||
if($this->barcode!='' && $this->briefpapier==''){
|
||
//$this->Rotate(90);
|
||
$this->Code39($this->barcode_x, $this->barcode_y, $this->barcode, 1, 3);
|
||
//$this->Rotate(0);
|
||
}
|
||
|
||
if($this->briefpapier!='' && $this->PageNo()<=1)
|
||
$this->setStationery($this->briefpapier);
|
||
|
||
// wenn
|
||
if($this->PageNo() > 1 && $this->briefpapier2!='' && $this->briefpapier2vorhanden=='1'){
|
||
if($this->doctype != 'produktion'){
|
||
$this->setStationery($this->briefpapier2);
|
||
}
|
||
}
|
||
else if ( $this->PageNo() > 1 && $this->briefpapier!=''){
|
||
$this->setStationery($this->briefpapier);
|
||
}
|
||
|
||
|
||
if($this->PageNo() > 1)
|
||
{
|
||
$this->SetY($this->abseite2y);
|
||
}
|
||
}
|
||
|
||
public function Footer() {
|
||
$differenz=12;
|
||
$this->SetXY(12,$this->getStyleElement("abstand_seiten_unten")*-1);
|
||
$this->SetFont($this->GetFont(),'',8);
|
||
|
||
|
||
if($this->seite_von_sichtbar!="1")
|
||
{
|
||
if($this->getStyleElement("seite_von_ausrichtung_relativ")=="1")// && $this->seite_von_ausrichtung=="C")
|
||
{
|
||
$this->SetX($this->getStyleElement("abstand_seitenrandlinks"));
|
||
$differenz = $this->getStyleElement("abstand_seitenrandlinks");
|
||
}
|
||
|
||
$tmp = $this->rMargin;
|
||
if($this->getStyleElement("abstand_seitenrandrechts")>0)
|
||
$this->rMargin=$this->getStyleElement("abstand_seitenrandrechts");
|
||
else
|
||
$this->rMargin=$this->getStyleElement("abstand_seitenrandlinks");
|
||
|
||
$tmpc = $this->cMargin;
|
||
if($this->seite_von_ausrichtung=="R")
|
||
$this->cMargin=-3;
|
||
|
||
if($this->getStyleElement("seite_belegnr"))
|
||
$this->Cell(0,8,$this->app->erp->Beschriftung("dokument_seite").' '.$this->PageNo().' '.$this->app->erp->Beschriftung("dokument_seitevon").' {nb} '.$this->zusatzfooter,0,0,$this->seite_von_ausrichtung);
|
||
else
|
||
$this->Cell(0,8,$this->app->erp->Beschriftung("dokument_seite").' '.$this->PageNo().' '.$this->app->erp->Beschriftung("dokument_seitevon").' {nb}',0,0,$this->seite_von_ausrichtung);
|
||
|
||
$this->cMargin = $tmpc;
|
||
|
||
$this->rMargin=$tmp;
|
||
}
|
||
|
||
if($this->nichtsichtbar_footer!=true)
|
||
{
|
||
|
||
$footerarr = $this->app->DB->SelectArr("SELECT * FROM firmendaten WHERE id='".$this->firmendatenid."' LIMIT 1");
|
||
$firmendaten_extra = $this->app->DB->SelectArr("SELECT * FROM firmendaten_werte");
|
||
if($firmendaten_extra)
|
||
{
|
||
foreach($firmendaten_extra as $v)
|
||
{
|
||
if(!isset($footerarr[0][$v['name']]))$footerarr[0][$v['name']] = $v['wert'];
|
||
}
|
||
}
|
||
$footerarr = $footerarr[0];
|
||
|
||
foreach($footerarr as $key=>$value)
|
||
$footerarr[$key] = utf8_decode($value);
|
||
|
||
$this->SetXY(10,-26);
|
||
$this->SetDrawColor($this->getStyleElement("footer_farbe"));
|
||
$this->SetTextColor($this->getStyleElement("footer_farbe"));
|
||
|
||
$this->SetFont($this->GetFont(),'',7);
|
||
|
||
|
||
if($this->getStyleElement("footer_zentriert")!=1)
|
||
{
|
||
$this->MultiCell($footerarr['footer_breite1'],3,utf8_encode(" ".$footerarr['footer_0_0']."\n ".$footerarr['footer_0_1']."\n ".$footerarr['footer_0_2']."\n ".$footerarr['footer_0_3']."\n ".$footerarr['footer_0_4']."\n ".$footerarr['footer_0_5'].""),'','L');
|
||
$this->SetXY($footerarr['footer_breite1'] + 10,-26); // Breite 1 + 10
|
||
$this->MultiCell($footerarr['footer_breite2'],3,utf8_encode(" ".$footerarr['footer_1_0']."\n ".$footerarr['footer_1_1']."\n ".$footerarr['footer_1_2']."\n ".$footerarr['footer_1_3']."\n ".$footerarr['footer_1_4']."\n ".$footerarr['footer_1_5'].""),'','L');
|
||
$this->SetXY($footerarr['footer_breite1'] + $footerarr['footer_breite2'] + 10,-26); //breite 1 + breite 2 + 10
|
||
$this->MultiCell($footerarr['footer_breite3'],3,utf8_encode(" ".$footerarr['footer_2_0']."\n ".$footerarr['footer_2_1']."\n ".$footerarr['footer_2_2']."\n ".$footerarr['footer_2_3']."\n ".$footerarr['footer_2_4']."\n ".$footerarr['footer_2_5'].""),'','L');
|
||
$this->SetXY($footerarr['footer_breite1'] + $footerarr['footer_breite2'] + $footerarr['footer_breite3'] + 10,-26); //breite 1 + breite 2 + breite 3 + 10
|
||
$this->MultiCell($footerarr['footer_breite4'],3,utf8_encode(" ".$footerarr['footer_3_0']."\n ".$footerarr['footer_3_1']."\n ".$footerarr['footer_3_2']."\n ".$footerarr['footer_3_3']."\n ".$footerarr['footer_3_4']."\n ".$footerarr['footer_3_5'].""),'','L');
|
||
} else {
|
||
$this->MultiCell(0,3,utf8_encode(" ".$footerarr['footer_0_0']."\n ".$footerarr['footer_0_1']."\n ".$footerarr['footer_0_2']."\n ".$footerarr['footer_0_3']."\n ".$footerarr['footer_0_4']."\n ".$footerarr['footer_0_5'].""),'','C');
|
||
|
||
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @param string $parameter
|
||
*
|
||
* @return array|null
|
||
*/
|
||
protected function getOldDocument(string $parameter): ?array
|
||
{
|
||
return $this->app->DB->SelectRow(
|
||
"SELECT *
|
||
FROM `pdfarchiv`
|
||
WHERE `table_id` = '".$this->id."'
|
||
AND `table_name` = '".$this->table."'
|
||
AND `doctype` = '".$this->app->DB->real_escape_string($this->doctype)."'
|
||
AND `doctypeorig` = '".$this->app->DB->real_escape_string($this->doctypeOrig)."'
|
||
AND CHAR_LENGTH(`belegnummer`) > 2
|
||
AND `belegnummer` <> 'SAB'
|
||
AND `parameter` = '$parameter'
|
||
AND `keinhintergrund` = '".($this->app->erp->BriefpapierHintergrunddisable?'1':'0')."'
|
||
ORDER BY `zeitstempel` DESC
|
||
LIMIT 1"
|
||
);
|
||
}
|
||
|
||
/**
|
||
* @param string $path
|
||
*
|
||
* @return bool
|
||
*/
|
||
protected function checkAndUpdateDocumentName(string $path): bool
|
||
{
|
||
if(!file_exists($path)){
|
||
return false;
|
||
}
|
||
$pathInfos = explode('_', basename($path),3);
|
||
$md5 = md5_file($path);
|
||
if($md5 === $pathInfos[0]){
|
||
return false;
|
||
}
|
||
|
||
return $this->updateDocumentEntry($pathInfos, $md5,$path);
|
||
}
|
||
|
||
/**
|
||
* @param array $fileInfos
|
||
* @param string $md5
|
||
* @param string $filePath
|
||
*/
|
||
protected function updateDocumentEntry(array $fileInfos, string $md5, string $filePath): bool
|
||
{
|
||
$fileName = basename($filePath);
|
||
$dir = dirname($filePath);
|
||
$newFileName = $md5 . '_' . explode('_', basename($filePath),2)[1];
|
||
$newFilePath = $dir . '/' . $newFileName;
|
||
$tableId = $fileInfos[1];
|
||
if(file_exists($newFilePath)){
|
||
$this->checkAndUpdateDocumentName($newFilePath);
|
||
}
|
||
if(file_exists($newFilePath)){
|
||
return false;
|
||
}
|
||
|
||
$this->updatePdfArchiveEntry((int)$tableId, $md5, $newFileName, $fileName);
|
||
rename($dir . '/' . $fileName, $newFilePath);
|
||
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* @param int $tableId
|
||
* @param string $md5
|
||
* @param string $newFileName
|
||
* @param string $oldFilename
|
||
*/
|
||
protected function updatePdfArchiveEntry(int $tableId, string $md5, string $newFileName, string $oldFilename): void
|
||
{
|
||
$this->app->DB->Update(
|
||
"UPDATE `pdfarchiv`
|
||
SET `checksum` = '{$md5}', `dateiname` = '{$newFileName}'
|
||
WHERE `dateiname` = '{$oldFilename}' AND `table_id` = {$tableId} AND `table_name` = '{$this->table}'"
|
||
);
|
||
}
|
||
|
||
/**
|
||
* @param string $checkSum
|
||
* @param string $fileName
|
||
* @param string $documentNumber
|
||
* @param string $parameter
|
||
*
|
||
* @return int
|
||
*/
|
||
protected function createPdfArchiveEntry(
|
||
string $checkSum, string $fileName, string $documentNumber, string $parameter = ''
|
||
): int
|
||
{
|
||
$userName = $this->app->DB->real_escape_string($this->app->User->GetName());
|
||
$documentType = $this->app->DB->real_escape_string($this->doctype);
|
||
$originalDocumentType = $this->app->DB->real_escape_string($this->doctypeOrig);
|
||
$documentNumber = $this->app->DB->real_escape_string($documentNumber);
|
||
$parameter = $this->app->DB->real_escape_string($parameter);
|
||
$noBackGround = $this->app->erp->BriefpapierHintergrunddisable ? 1 : 0;
|
||
$this->app->DB->Insert(
|
||
"INSERT INTO `pdfarchiv`
|
||
(
|
||
`schreibschutz`, `zeitstempel`, `checksum`, `table_id`, `table_name`, `bearbeiter`,
|
||
`erstesoriginal`, `doctype`, `doctypeorig`, `dateiname`,
|
||
`belegnummer`, `keinhintergrund`, `parameter`
|
||
)
|
||
VALUES
|
||
(
|
||
1, NOW(), '{$checkSum}', '{$this->id}', '{$this->table}', '{$userName}',
|
||
0, '{$documentType}', '{$originalDocumentType}', '{$fileName}',
|
||
'{$documentNumber}', '{$noBackGround}', '{$parameter}'
|
||
)"
|
||
);
|
||
|
||
return (int)$this->app->DB->GetInsertID();
|
||
}
|
||
|
||
/**
|
||
* @param false $schreibschutz
|
||
* @param false $force
|
||
* @param string $parameter
|
||
*/
|
||
public function ArchiviereDocument($schreibschutz = false, $force = false, $parameter = ''): void
|
||
{
|
||
if(!$schreibschutz){
|
||
|
||
if (!is_null($this->table)) {
|
||
$schreibschutz = (bool)$this->app->DB->Select(
|
||
"SELECT `schreibschutz` FROM `{$this->table}` WHERE `id` = '{$this->id}' LIMIT 1"
|
||
);
|
||
}
|
||
}
|
||
|
||
if($parameter == ''){
|
||
$parameter = $this->parameter;
|
||
}
|
||
|
||
if($this->ausarchiv){
|
||
return;
|
||
}
|
||
|
||
if (!is_null($this->table)) {
|
||
$isDraft = $this->app->DB->Select(
|
||
"SELECT `id` FROM `{$this->table}` WHERE `id` = '{$this->id}' AND `belegnr` <> '' AND `belegnr` <> '0' LIMIT 1"
|
||
) === null;
|
||
}
|
||
|
||
if($isDraft){
|
||
return;
|
||
}
|
||
|
||
if($force) {
|
||
$this->app->DB->Update("UPDATE `{$this->table}` SET `schreibschutz` = 1 WHERE `id` = '{$this->id}' LIMIT 1");
|
||
$schreibschutz = true;
|
||
}
|
||
|
||
if(!$schreibschutz){
|
||
return;
|
||
}
|
||
|
||
$this->filename = $this->app->erp->Dateinamen($this->filename);
|
||
$dir = rtrim($this->app->Conf->WFuserdata, '/') . '/pdfarchiv/' . $this->app->Conf->WFdbname . '/' . $this->table;
|
||
if(!is_dir($dir) && !mkdir($dir, 0700,true) && !is_dir($dir)){
|
||
$this->app->erp->LogFile('Fehler beim erstellen von '.$dir);
|
||
return;
|
||
}
|
||
|
||
$dir = dirname(Briefpapier::getPDFfolder($dir, $this->id, $this->id . '_' . $this->filename, false, true));
|
||
$absoluteFilePath = $dir . '/' .$this->id . '_' . $this->filename;
|
||
|
||
$oldDocument = $this->getOldDocument((string)$parameter);
|
||
$isOldDocumentFileExists = !empty($oldDocument['dateiname']) && is_file($dir . '/' . $oldDocument['dateiname']);
|
||
$hasOldDocumentFileMd5Sum = $isOldDocumentFileExists
|
||
&& !empty($oldDocument['checksum'])
|
||
&& strpos($oldDocument['dateiname'], $oldDocument['checksum']) ===0;
|
||
if($hasOldDocumentFileMd5Sum) {
|
||
$oldFile = $dir . '/' . $oldDocument['dateiname'];
|
||
if($this->checkAndUpdateDocumentName($oldFile)) {
|
||
$oldDocument = $this->getOldDocument((string)$parameter);
|
||
$isOldDocumentFileExists = !empty($oldDocument['dateiname']) && is_file($dir . '/' . $oldDocument['dateiname']);
|
||
}
|
||
}
|
||
$oldFile = $isOldDocumentFileExists ? $dir . '/' . $oldDocument['dateiname'] : null;
|
||
if($oldFile !== null && !$force) {
|
||
return;
|
||
}
|
||
$documentNumber = str_ireplace('.pdf', '', substr($this->filename, strrpos($this->filename, '_') + 1));
|
||
// If the current document file does not exist
|
||
if(!file_exists($absoluteFilePath)){
|
||
// save this document to file
|
||
$this->Output($absoluteFilePath, 'F');
|
||
if(empty($oldDocument) || $oldDocument['dateiname'] !== basename($absoluteFilePath)) {
|
||
$this->createPdfArchiveEntry(
|
||
md5_file($absoluteFilePath), basename($absoluteFilePath), $documentNumber, (string)$parameter
|
||
);
|
||
}
|
||
$this->resetToArchiveFlag();
|
||
return;
|
||
}
|
||
// create a new temp file
|
||
$tempFilePath = $dir . '/' .$this->id . '_temp' . $this->filename;
|
||
$this->Output($tempFilePath, 'F');
|
||
if($oldFile !== null && $this->areFilesEqualExceptCreationDate($oldFile, $tempFilePath)) {
|
||
unlink($tempFilePath);
|
||
$this->resetToArchiveFlag();
|
||
return;
|
||
}
|
||
$md5CurrentFile = md5_file($absoluteFilePath);
|
||
// and compare with existing file
|
||
if($this->areFilesEqualExceptCreationDate($absoluteFilePath, $tempFilePath)){
|
||
//if($md5CurrentFile === md5_file($tempFilePath)){
|
||
// If same, delete temp file and
|
||
unlink($tempFilePath);
|
||
$this->resetToArchiveFlag();
|
||
return;
|
||
}
|
||
// build the file name with md5_hash
|
||
$md5FileName = $dir . '/' . $md5CurrentFile . '_' . $this->id . '_' . $this->filename;
|
||
// check if the file exists
|
||
$this->checkAndUpdateDocumentName($md5FileName);
|
||
if(!file_exists($md5FileName)){
|
||
rename($absoluteFilePath, $md5FileName);
|
||
$this->updatePdfArchiveEntry($this->id, $md5CurrentFile, basename($md5FileName), basename($absoluteFilePath));
|
||
|
||
rename($tempFilePath, $absoluteFilePath);
|
||
$this->createPdfArchiveEntry(
|
||
md5_file($absoluteFilePath), basename($absoluteFilePath), $documentNumber, (string)$parameter
|
||
);
|
||
$this->resetToArchiveFlag();
|
||
return;
|
||
}
|
||
if($this->areFilesEqualExceptCreationDate($absoluteFilePath, $md5FileName)){
|
||
rename($tempFilePath, $absoluteFilePath);
|
||
$this->createPdfArchiveEntry(
|
||
md5_file($absoluteFilePath), basename($absoluteFilePath), $documentNumber, (string)$parameter
|
||
);
|
||
$this->resetToArchiveFlag();
|
||
return;
|
||
}
|
||
|
||
unlink($tempFilePath);
|
||
$this->resetToArchiveFlag();
|
||
}
|
||
|
||
/**
|
||
* resolve to-archive request for document, after creating new pdf-file
|
||
*/
|
||
public function resetToArchiveFlag(): void
|
||
{
|
||
if(empty($this->id) || empty($this->table)) {
|
||
return;
|
||
}
|
||
$this->app->DB->Update("UPDATE `{$this->table}` SET `zuarchivieren` = 0 WHERE `id` = {$this->id} LIMIT 1");
|
||
}
|
||
|
||
/**
|
||
* @param string $firstFilePath
|
||
* @param string $secondFilePath
|
||
* @return bool
|
||
*/
|
||
public function areFilesEqualExceptCreationDate(string $firstFilePath, string $secondFilePath)
|
||
{
|
||
if(!file_exists($firstFilePath) || !file_exists($secondFilePath)){
|
||
return false;
|
||
}
|
||
|
||
$pattern = '#CreationDate \(D:[0-9]+\)#';
|
||
|
||
$contentFirstFile = preg_replace($pattern, '', @file_get_contents($firstFilePath));
|
||
$contentSecondFile = preg_replace($pattern, '', @file_get_contents($secondFilePath));
|
||
|
||
return md5($contentFirstFile) === md5($contentSecondFile);
|
||
}
|
||
|
||
public function DocumentArchiviert()
|
||
{
|
||
$this->filename = $this->app->erp->Dateinamen($this->filename);
|
||
$dir = $this->app->Conf->WFuserdata.'/pdfarchiv/'.$this->app->Conf->WFdbname;
|
||
if(!is_dir($dir)){
|
||
return false;
|
||
}
|
||
if(!is_dir($dir.'/'.$this->table)){
|
||
return false;
|
||
}
|
||
|
||
$md5alt = false;
|
||
$altesdokument = $this->app->DB->SelectRow("SELECT * from pdfarchiv where table_id = '".$this->id."' and table_name = '".$this->table."' AND doctype = '".$this->app->DB->real_escape_string($this->doctype)."' AND doctypeorig = '".$this->app->DB->real_escape_string($this->doctypeOrig)."' AND CHAR_LENGTH(belegnummer) > 2 AND belegnummer <> 'SAB' AND parameter = '".$this->parameter."' ORDER BY zeitstempel DESC LIMIT 1");
|
||
if(empty($altesdokument)){
|
||
return false;
|
||
}
|
||
|
||
$md5alt = $altesdokument['checksum'];
|
||
if(!file_exists($dir.'/'.$this->table.'/'.$md5alt.'_'.$this->id.'_'.$this->filename)) {
|
||
$file = Briefpapier::getPDFfolder($dir.'/'.$this->table, $this->id,$md5alt.'_'.$this->id.'_'.$this->filename);
|
||
if(!file_exists($file)){
|
||
return false;
|
||
}
|
||
}
|
||
|
||
$this->Output($dir.'/'.$this->table.'/TEMP_'.$this->id.'_'.$this->filename,'F');
|
||
$md5sum_tmp = md5_file($dir.'/'.$this->table.'/TEMP_'.$this->id.'_'.$this->filename);
|
||
unlink($dir.'/'.$this->table.'/TEMP_'.$this->id.'_'.$this->filename);
|
||
return $md5sum_tmp == $md5alt;
|
||
}
|
||
|
||
|
||
public function archiveDocument($parameter = '')
|
||
{
|
||
if($this->table && $this->id)
|
||
{
|
||
$this->ArchiviereDocument($this->app->DB->Select('SELECT schreibschutz FROM `'.trim($this->app->DB->real_escape_string($this->table))."` WHERE id = '".(int)$this->id."' LIMIT 1")?true:false,false, $parameter);
|
||
}else{
|
||
$this->ArchiviereDocument();
|
||
}
|
||
}
|
||
|
||
public static function getPDFfolder($folder, $tableid, $file = '', $forcenew = false, $createfolder = false)
|
||
{
|
||
if($file === '') {
|
||
$file = $folder;
|
||
$folder = dirname($folder);
|
||
$file = substr($file, strlen($folder)+1);
|
||
}
|
||
if(!$forcenew && file_exists($folder.'/'.$file)) {
|
||
return $folder.'/'.$file;
|
||
}
|
||
$tableida = str_split($tableid, 1);
|
||
$newfolder = $folder. '/'.implode('/',$tableida);
|
||
if(!$createfolder) {
|
||
return $newfolder.'/'.$file;
|
||
}
|
||
|
||
if(!is_dir($newfolder) && !mkdir($newfolder,0700,true) && !is_dir($newfolder)){
|
||
return $folder.'/'.$file;
|
||
}
|
||
|
||
return $newfolder.'/'.$file;
|
||
}
|
||
|
||
public function inlineDocument($from_archiv = false) {
|
||
//$from_archiv=false;
|
||
//$filenameprefix = substr($this->filename,9,2);
|
||
$content = null;
|
||
if($from_archiv && !empty($this->table) && !empty($this->id)) {
|
||
$dir = $this->app->Conf->WFuserdata.'/pdfarchiv/'.$this->app->Conf->WFdbname.'/'.$this->table;
|
||
if(is_dir($dir)) {
|
||
if($this->table === 'rechnung') {
|
||
$filenameprefix = substr($this->filename,9,2);
|
||
$mirror = $this->app->DB->Select(
|
||
"SELECT dateiname
|
||
FROM pdfarchiv
|
||
WHERE table_name = '".$this->table."' AND table_id = '".$this->id."' AND schreibschutz = 1 AND substring(belegnummer,1,2) = '$filenameprefix' AND parameter = '".$this->parameter."' AND keinhintergrund = '".(int)$this->app->erp->BriefpapierHintergrunddisable."'
|
||
ORDER BY zeitstempel DESC
|
||
LIMIT 1"
|
||
);
|
||
}
|
||
else{
|
||
$mirror = $this->app->DB->Select(
|
||
"SELECT dateiname
|
||
FROM pdfarchiv
|
||
WHERE table_name = '".$this->table."' AND table_id = '".$this->id."' AND schreibschutz = 1 AND parameter = '".$this->parameter."' AND keinhintergrund = '".(int)$this->app->erp->BriefpapierHintergrunddisable."'
|
||
ORDER BY zeitstempel DESC
|
||
LIMIT 1"
|
||
);
|
||
}
|
||
if(!empty($mirror)) {
|
||
$file = Briefpapier::getPDFfolder($dir,$this->id, $mirror);
|
||
//if(is_file($dir.'/'.$mirror))
|
||
if(is_file($file)) {
|
||
//$content = file_get_contents($dir.'/'.$mirror);
|
||
$content = file_get_contents($file);
|
||
if(!empty($content)) {
|
||
header('Content-type: application/pdf');
|
||
echo $content;
|
||
$this->app->ExitXentral();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
$this->renderDocument();
|
||
$this->archiveDocument();
|
||
header('Content-type: application/pdf');
|
||
$this->Output();
|
||
|
||
$this->app->ExitXentral();
|
||
}
|
||
|
||
/**
|
||
* @param int $tableid
|
||
* @param string $tablename
|
||
*
|
||
* @return bool
|
||
*/
|
||
public function zuArchivieren($tableid, $tablename)
|
||
{
|
||
if($tablename) {
|
||
$check = $this->app->DB->Select("SELECT zuArchivieren FROM `$tablename` WHERE id = '$tableid'");
|
||
}
|
||
if($check){
|
||
return true;
|
||
}
|
||
$mirrors = $this->app->DB->SelectArr(
|
||
"SELECT *
|
||
FROM pdfarchiv
|
||
WHERE table_id = '".$tableid."' AND `table_name` = '".$tablename."' AND erstesoriginal = 0
|
||
AND CHAR_LENGTH(belegnummer) > 2 AND belegnummer <> 'SAB' AND parameter = '".$this->parameter."'
|
||
AND keinhintergrund = '".(int)$this->app->erp->BriefpapierHintergrunddisable."'
|
||
ORDER BY zeitstempel DESC"
|
||
);
|
||
if(empty($mirrors)) {
|
||
return true;
|
||
}
|
||
$dir = $this->app->Conf->WFuserdata.'/pdfarchiv/'.$this->app->Conf->WFdbname.'/'.$tablename;
|
||
if(!is_dir($dir)) {
|
||
return true;
|
||
}
|
||
foreach($mirrors as $k => $mirror) {
|
||
$dateipfad = Briefpapier::getPDFfolder($dir,$tableid,$mirror['dateiname']);
|
||
if(!empty($mirror['dateiname']) && file_exists($dateipfad)) {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* @param int $id
|
||
*/
|
||
public function movePDFArchiv($id)
|
||
{
|
||
|
||
$mirrors = $id <=0?null:$this->app->DB->SelectRow(
|
||
sprintf(
|
||
'SELECT * FROM pdfarchiv WHERE id = %d',
|
||
$id
|
||
)
|
||
);
|
||
|
||
if(empty($mirrors) || empty($mirrors['dateiname'])) {
|
||
return;
|
||
}
|
||
$dir = $this->app->Conf->WFuserdata.'/pdfarchiv/'.$this->app->Conf->WFdbname.'/'.$mirrors['table_name'];
|
||
if(!is_file($dir.'/'.$mirrors['dateiname'])) {
|
||
return;
|
||
}
|
||
$newfile = self::getPDFfolder($dir,$mirrors['table_id'],$mirrors['dateiname'],true,true);
|
||
if($newfile != $dir.'/'.$mirrors['dateiname'] && !is_file($newfile)) {
|
||
@rename($dir.'/'.$mirrors['dateiname'], $newfile);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @param int $tableid
|
||
* @param string $tablename
|
||
*
|
||
* @return array|bool
|
||
*/
|
||
public function getArchivedFiles($tableid, $tablename)
|
||
{
|
||
$mirrors = $this->app->DB->SelectArr("SELECT * from pdfarchiv where table_id = '".$tableid."' and table_name = '".$tablename."' AND CHAR_LENGTH(belegnummer) > 2 AND belegnummer <> 'SAB' AND keinhintergrund = 0 ORDER BY zeitstempel DESC");
|
||
if(!$mirrors){
|
||
return false;
|
||
}
|
||
|
||
$dir = $this->app->Conf->WFuserdata.'/pdfarchiv/'.$this->app->Conf->WFdbname.'/'.$tablename;
|
||
if(!is_dir($dir)) {
|
||
return false;
|
||
}
|
||
|
||
foreach($mirrors as $k => $mirror) {
|
||
$dateipfad = Briefpapier::getPDFfolder($dir,$tableid,$mirror['dateiname']);
|
||
if(!$mirror['dateiname'] || !file_exists($dateipfad)) {
|
||
unset($mirrors[$k]);
|
||
}
|
||
else{
|
||
$mirrors[$k]['file'] = $mirror['dateiname'];
|
||
}
|
||
}
|
||
|
||
if(empty($mirrors)) {
|
||
return false;
|
||
}
|
||
|
||
return $mirrors;
|
||
}
|
||
|
||
public function getArchivedFiles_alt($tableid, $tablename)
|
||
{
|
||
|
||
$mirrors = $this->app->DB->SelectArr("SELECT * from pdfmirror_md5pool where table_id = '".$tableid."' and table_name = '".$tablename."' ORDER BY zeitstempel DESC");
|
||
|
||
if(!$mirrors)return false;
|
||
|
||
$dir = $this->app->Conf->WFuserdata."/pdfmirror/".$this->app->Conf->WFdbname.'/'.$tablename;
|
||
if(is_dir($dir))
|
||
{
|
||
|
||
|
||
$files = glob($dir.'/*.pdf');
|
||
if(!$files)return false;
|
||
|
||
foreach($files as $file)
|
||
{
|
||
$path_parts = pathinfo($file);
|
||
foreach($mirrors as $k => $mirror)
|
||
{
|
||
if($mirror['checksum'])
|
||
{
|
||
|
||
if(strpos($path_parts['basename'],$mirror['checksum'])=== 0)
|
||
{
|
||
$mirrors[$k]['file'] = $path_parts['basename'];
|
||
}
|
||
|
||
} else {
|
||
if(strpos($path_parts['filename'], $tableid.'_') === 0){
|
||
$mirrors[$k]['file'] = $path_parts['basename'];
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
}
|
||
foreach($mirrors as $k => $mirror)
|
||
{
|
||
if(!isset($mirror['file']))unset($mirrors[$k]);
|
||
}
|
||
|
||
if(!isset($mirrors) || count($mirrors) < 1)return false;
|
||
|
||
return $mirrors;
|
||
}
|
||
return false;
|
||
}
|
||
|
||
/**
|
||
* @param int $id
|
||
*
|
||
* @return bool|array
|
||
*/
|
||
public function getArchivByID($id)
|
||
{
|
||
$id = (int)$id;
|
||
if($id <= 0) {
|
||
return false;
|
||
}
|
||
$dir = $this->app->Conf->WFuserdata.'/pdfarchiv/'.$this->app->Conf->WFdbname;
|
||
if(!is_dir($dir)) {
|
||
return false;
|
||
}
|
||
$mirror = $this->app->DB->SelectRow(sprintf('SELECT * FROM pdfarchiv WHERE id = %d LIMIT 1', $id));
|
||
if(empty($mirror)){
|
||
return false;
|
||
}
|
||
|
||
if(empty($mirror['dateiname'])) {
|
||
return false;
|
||
}
|
||
$file = Briefpapier::getPDFfolder($dir.'/'.$mirror['table_name'], $mirror['table_id'], $mirror['dateiname']);
|
||
|
||
if(!file_exists($file)) {
|
||
return false;
|
||
}
|
||
|
||
$tmpr['belegnr'] = $mirror['belegnummer'];
|
||
$tmpr['file'] = file_get_contents($file);
|
||
|
||
return $tmpr;
|
||
}
|
||
|
||
public function getArchivByID_alt($id)
|
||
{
|
||
$id = (int)$id;
|
||
if(!$id)return false;
|
||
$dir = $this->app->Conf->WFuserdata."/pdfmirror/".$this->app->Conf->WFdbname;
|
||
if(!is_dir($dir))return false;
|
||
$mirror = $this->app->DB->SelectArr("SELECT * from pdfmirror_md5pool where id = '$id' LIMIT 1");
|
||
if(!$mirror)return false;
|
||
$mirror = reset($mirror);
|
||
$mirrors = $this->getArchivedFiles_alt($mirror['table_id'], $mirror['table_name']);
|
||
if(!$mirrors)return false;
|
||
foreach($mirrors as $mirror)
|
||
{
|
||
//echo ".";
|
||
if($mirror['id'] == $id)
|
||
{
|
||
//echo ":";
|
||
if(file_exists($dir."/".$mirror['table_name']."/".$mirror['file']))
|
||
{
|
||
//echo ";";
|
||
$tmpr['belegnr'] = str_replace('.pdf','',$mirror['file']);
|
||
$tmpr['belegnr'] = substr($tmpr['belegnr'],strrpos($tmpr['belegnr'],'_')+1);
|
||
$tmpr['file'] = file_get_contents($dir."/".$mirror['table_name']."/".$mirror['file']);
|
||
return $tmpr;
|
||
}
|
||
return false;
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
|
||
/**
|
||
* @param bool $from_archiv
|
||
*/
|
||
public function displayDocument($from_archiv = false) {
|
||
//$from_archiv=false;
|
||
if($from_archiv) {
|
||
$dir = $this->app->Conf->WFuserdata.'/pdfarchiv/'.$this->app->Conf->WFdbname.'/'.$this->table;
|
||
if($this->table && $this->id && is_dir($dir)) {
|
||
if($this->table === 'rechnung') {
|
||
$filenameprefix = substr($this->filename,9,2);
|
||
$mirror = $this->app->DB->Select("SELECT dateiname FROM pdfarchiv WHERE table_name = '".$this->table."' AND table_id = '".$this->id."' AND schreibschutz = 1 AND substring(belegnummer,1,2) = '$filenameprefix' AND parameter = '".$this->parameter."' AND keinhintergrund = '".(int)$this->app->erp->BriefpapierHintergrunddisable."' ORDER by zeitstempel DESC LIMIT 1");
|
||
}
|
||
else{
|
||
$mirror = $this->app->DB->Select("SELECT dateiname FROM pdfarchiv WHERE table_name = '".$this->table."' AND table_id = '".$this->id."' AND schreibschutz = 1 AND parameter = '".$this->parameter."' AND keinhintergrund = '".(int)$this->app->erp->BriefpapierHintergrunddisable."' ORDER by zeitstempel DESC LIMIT 1");
|
||
}
|
||
if($mirror) {
|
||
$file = Briefpapier::getPDFfolder($dir, $this->id, $mirror);
|
||
//if(is_file($dir.'/'.$mirror))
|
||
if(is_file($file)) {
|
||
//$content = file_get_contents($dir.'/'.$mirror);
|
||
$content = file_get_contents($file);
|
||
if(!empty($content)) {
|
||
$this->filename = $this->app->erp->Dateinamen($this->filename);
|
||
header('Content-type: application/pdf');
|
||
header('Content-Disposition: attachment; filename="'.$this->filename.'"');
|
||
echo $content;
|
||
$this->app->ExitXentral();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
$this->filename = $this->app->erp->Dateinamen($this->filename);
|
||
|
||
$this->renderDocument();
|
||
$this->archiveDocument();
|
||
$this->Output($this->filename,'D');
|
||
$this->app->ExitXentral();
|
||
}
|
||
|
||
public function displayTMP($from_archiv = false) {
|
||
//if(!$from_archiv && $this->table && $this->id)$from_archiv = $this->app->DB->Select("SELECT schreibschutz FROM `".$this->table."` WHERE id = '".$this->id."' LIMIT 1");
|
||
if($from_archiv) {
|
||
$dir = $this->app->Conf->WFuserdata.'/pdfarchiv/'.$this->app->Conf->WFdbname.'/'.$this->table;
|
||
if($this->table && $this->id && is_dir($dir)) {
|
||
if($this->table === 'rechnung') {
|
||
$filenameprefix = substr($this->filename,9,2);
|
||
$mirror = $this->app->DB->Select("SELECT dateiname FROM pdfarchiv WHERE table_name = '".$this->table."' AND table_id = '".$this->id."' AND schreibschutz = 1 AND substring(belegnummer,1,2) = '$filenameprefix' AND parameter = '".$this->parameter."' AND keinhintergrund = '".(int)$this->app->erp->BriefpapierHintergrunddisable."' ORDER by zeitstempel DESC LIMIT 1");
|
||
}
|
||
else{
|
||
$mirror = $this->app->DB->Select("SELECT dateiname FROM pdfarchiv WHERE table_name = '".$this->table."' AND table_id = '".$this->id."' AND schreibschutz = 1 AND parameter = '".$this->parameter."' AND keinhintergrund = '".(int)$this->app->erp->BriefpapierHintergrunddisable."' ORDER by zeitstempel DESC LIMIT 1");
|
||
}
|
||
if($mirror){
|
||
$mirror2 = Briefpapier::getPDFfolder($dir,$this->id, $mirror);
|
||
if(is_file($mirror2)) {
|
||
$mirror = substr($mirror2, strlen($dir)+1);
|
||
}
|
||
if(is_file($dir.'/'.$mirror)){
|
||
$this->filename = $this->app->erp->Dateinamen($this->filename);
|
||
$content = file_get_contents($dir.'/'.$mirror);
|
||
if($content != '' && file_put_contents($this->app->erp->GetTMP().$this->filename,$content)){
|
||
if($this->addpdf){
|
||
$files[] = $this->app->erp->GetTMP().$this->filename;
|
||
foreach($this->addpdf as $file){
|
||
$files[] = $file;
|
||
}
|
||
$content = $this->app->erp->MergePDF($files);
|
||
file_put_contents($this->app->erp->GetTMP().$this->filename,$content);
|
||
}
|
||
$this->ausarchiv = true;
|
||
return $this->app->erp->GetTMP().$this->filename;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
$this->renderDocument();
|
||
$this->archiveDocument();
|
||
$this->filename = $this->app->erp->Dateinamen($this->filename);
|
||
$this->Output($this->app->erp->GetTMP().$this->filename,'F');
|
||
|
||
return $this->app->erp->GetTMP().$this->filename;
|
||
}
|
||
|
||
public function sendDocument($from_archiv = false) {
|
||
$this->renderDocument();
|
||
$this->archiveDocument();
|
||
$this->filename = $this->app->erp->Dateinamen($this->filename);
|
||
$this->Output($this->filename,'S');
|
||
$this->app->ExitXentral();
|
||
}
|
||
|
||
/***********************************
|
||
* public functions
|
||
***********************************/
|
||
// setup relevant data for a invoice
|
||
public function setupTax() {
|
||
// full taxrate
|
||
// define("USTV",0.19);
|
||
// reduced taxrate
|
||
// define("USTR",0.07);
|
||
}
|
||
|
||
|
||
public function calcTotals() {
|
||
$total=$totalFullTax=$totalReducedTax=0;
|
||
$citems = !empty($this->items)?count($this->items):0;
|
||
for($i=0;$i<$citems;$i++) {
|
||
$total += $this->items[$i]['tprice'];
|
||
if($this->items[$i]['tax']=="USTV") {
|
||
$totalFullTax+= $this->items[$i]['tprice']*USTV;
|
||
}
|
||
else {
|
||
$totalReducedTax+= $this->items[$i]['tprice']*USTR;
|
||
}
|
||
}
|
||
return array($total,$totalFullTax,$totalReducedTax);
|
||
}
|
||
|
||
function GetFont()
|
||
{
|
||
if($this->getStyleElement('schriftart')!=''){
|
||
return $this->getStyleElement('schriftart');
|
||
}
|
||
|
||
return 'Arial';
|
||
}
|
||
|
||
public function setStyleData($styleData){
|
||
$this->styleData = $styleData;
|
||
}
|
||
|
||
private function getStyleElement($key){
|
||
if(isset($this->styleData[$key]) && !empty($this->styleData[$key])) return $this->styleData[$key];
|
||
|
||
return $this->app->erp->Firmendaten($key);
|
||
}
|
||
|
||
public function renderDocument() {
|
||
// prepare page details
|
||
parent::__construct('P','mm','A4');
|
||
$this->app->erp->RunHook('briefpapier_render_document_hook1', 1, $this);
|
||
|
||
|
||
// if($this->getStyleElement("schriftart")!="")
|
||
// $this->SetFont($this->getStyleElement("schriftart"));
|
||
|
||
$font = $this->getStyleElement('schriftart');
|
||
|
||
if(!in_array($font, ['', 'Arial', 'Courier', 'Helvetica', 'Times'])){
|
||
$this->AddFont($font,'',strtolower($font).'.php');
|
||
|
||
if(is_file("lib/pdf/font/".strtolower($font).'i.php'))
|
||
$this->AddFont($font,'I',strtolower($font).'i.php');
|
||
else
|
||
$this->AddFont($font,'I',strtolower($font).'.php');
|
||
|
||
if(is_file("lib/pdf/font/".strtolower($font).'b.php'))
|
||
$this->AddFont($font,'B',strtolower($font).'b.php');
|
||
else
|
||
$this->AddFont($font,'B',strtolower($font).'.php');
|
||
|
||
if(is_file("lib/pdf/font/".strtolower($font).'bi.php'))
|
||
$this->AddFont($font,'BI',strtolower($font).'bi.php');
|
||
else
|
||
$this->AddFont($font,'BI',strtolower($font).'.php');
|
||
|
||
}
|
||
|
||
// invoke Header() and Footer() by adding a new page
|
||
$this->AddPage();
|
||
//$this->setStationery("/home/eproo/eproo-master/app/main/www/lib/dokumente/demo.pdf");
|
||
$this->SetDisplayMode("real","single");
|
||
|
||
if($this->getStyleElement("abstand_seitenrandrechts")=="")
|
||
$this->getStyleElementSet("abstand_seitenrandrechts",$this->getStyleElement("abstand_seitenrandlinks"));
|
||
|
||
$this->SetMargins($this->getStyleElement("abstand_seitenrandlinks"),50,$this->getStyleElement("abstand_seitenrandrechts"));
|
||
$this->SetAutoPageBreak(true,$this->getStyleElement("abstand_umbruchunten"));
|
||
$this->AliasNbPages('{nb}');
|
||
|
||
// render document top to bottom
|
||
if(!$this->nichtsichtbar_empfaenger)
|
||
{
|
||
if(!empty($this->recipient))
|
||
$this->renderRecipient();
|
||
}
|
||
|
||
if($this->doctype=="lieferschein" && !empty($this->barcode))
|
||
{
|
||
if($this->barcode_y_header!=0)
|
||
$y = $this->barcode_y_header;
|
||
else
|
||
$y = $this->GetY();
|
||
$this->Code39($this->barcode_x_header, $y+1, $this->barcode, 1, 5);
|
||
}
|
||
|
||
if($this->barcode!="" && $this->briefpapier!=""){
|
||
$this->Code39($this->barcode_x, $this->barcode_y, $this->barcode, 1, 3);
|
||
}
|
||
|
||
//if(!empty($this->sender))
|
||
$this->renderSender();
|
||
|
||
if(!$this->nichtsichtbar_box)
|
||
{
|
||
if(!empty($this->corrDetails) || !empty($this->boldCorrDetails) || !empty($this->italicCorrDetails)
|
||
|| !empty($this->italicBoldCorrDetails))
|
||
$this->renderCorrDetails();
|
||
}
|
||
|
||
$this->renderDoctype();
|
||
if($this->doctype=="brief")
|
||
{
|
||
$this->SetY(95);
|
||
$this->textDetails['body']=$this->letterDetails['body'];
|
||
}
|
||
|
||
$this->renderText();
|
||
if(!empty($this->items)) {
|
||
$this->renderItems();
|
||
$this->SetTextColor(0,0,0);
|
||
if($this->doctype!="lieferschein" && $this->doctype!="preisanfrage" && !$this->nichtsichtbar_summe) {
|
||
$this->renderTotals();
|
||
} else $this->Cell(1,5,'',0);
|
||
}
|
||
$this->renderFooter();
|
||
$this->logofile = "";
|
||
$this->briefpapier="";
|
||
$this->briefpapier2="";
|
||
if($this->addpdf)
|
||
{
|
||
foreach($this->addpdf as $addpdf)
|
||
{
|
||
$filename = $addpdf;
|
||
$this->AddPage();
|
||
$this->SetXY(0,0);
|
||
$anz = $this->setSourceFile($filename);
|
||
for($i = 1; $i <= $anz; $i++)
|
||
{
|
||
if($i > 1)
|
||
{
|
||
$this->AddPage();
|
||
$this->SetXY(0,0);
|
||
}
|
||
$tplidx = $this->ImportPage($i);
|
||
$this->useTemplate($tplidx);
|
||
}
|
||
}
|
||
}
|
||
$this->app->erp->RunHook('briefpapier_render_document_hook2', 1, $this);
|
||
}
|
||
|
||
|
||
public function renderRecipient(){
|
||
// $this->SetY(50);
|
||
$this->SetY(50+$this->abstand_adresszeileoben);
|
||
$this->SetFont($this->GetFont(),'',10);
|
||
|
||
$schriftgroesse = $this->getStyleElement('schriftgroesse');
|
||
if($schriftgroesse>0)
|
||
$this->SetFont($this->GetFont(),'',$schriftgroesse);
|
||
|
||
if($this->recipient['anrede']!="" && $this->getStyleElement('typimdokument'))
|
||
{
|
||
$this->SetX($this->getStyleElement("abstand_adresszeilelinks"));
|
||
$this->Cell(80,5,$this->recipient['anrede'],0,1);
|
||
}
|
||
|
||
$this->SetMargins($this->getStyleElement("abstand_adresszeilelinks"),50);
|
||
if($this->recipient['enterprise']) {
|
||
$this->SetX($this->getStyleElement("abstand_adresszeilelinks"));
|
||
$charlimit=40;
|
||
if(strlen($this->recipient['enterprise'])>$charlimit + 15)
|
||
{
|
||
$array = explode( "\n", wordwrap($this->recipient['enterprise'], $charlimit));
|
||
foreach($array as $row)
|
||
{
|
||
$this->Cell(80,5,$this->app->erp->ReadyForPDF($row),0,1);
|
||
}
|
||
} else {
|
||
$this->Cell(80,5,$this->app->erp->ReadyForPDF($this->recipient['enterprise']),0,1);
|
||
}
|
||
|
||
}
|
||
|
||
|
||
if($this->recipient['firstname']!="")
|
||
{
|
||
$this->SetX($this->getStyleElement("abstand_adresszeilelinks"));
|
||
$this->Cell(80,5,$this->recipient['firstname'],0,1);
|
||
}
|
||
|
||
if($this->recipient['address2']!="") {
|
||
$this->SetX($this->getStyleElement("abstand_adresszeilelinks"));
|
||
$this->Cell(80,5,$this->recipient['address2'],0,1);
|
||
}
|
||
|
||
if($this->recipient['address3']!="")
|
||
{
|
||
$this->SetX($this->getStyleElement("abstand_adresszeilelinks"));
|
||
$this->Cell(80,5,$this->recipient['address3'],0,1);
|
||
}
|
||
|
||
if($this->recipient['address4']!="")
|
||
{
|
||
$this->SetX($this->getStyleElement("abstand_adresszeilelinks"));
|
||
$this->Cell(80,5,$this->recipient['address4'],0,1);
|
||
}
|
||
|
||
|
||
//$this->Cell(80,5,$this->recipient['firstname']." ".$this->recipient['familyname'],0,1);
|
||
$this->SetX($this->getStyleElement("abstand_adresszeilelinks"));
|
||
$this->Cell(80,5,$this->recipient['address1'],0,1);
|
||
|
||
|
||
$this->SetFont($this->GetFont(),'',10);
|
||
if($schriftgroesse>0)
|
||
$this->SetFont($this->GetFont(),'',$schriftgroesse);
|
||
|
||
|
||
$this->SetX($this->getStyleElement("abstand_adresszeilelinks"));
|
||
$inland = $this->getStyleElement("land");
|
||
if($this->recipient['country']!=$inland)
|
||
{
|
||
//$this->Cell(80,5,$this->recipient['country']."-".$this->recipient['areacode']." ".$this->recipient['city'],0,1);
|
||
|
||
if(function_exists('mb_strtoupper'))
|
||
$this->Cell(80,5,mb_strtoupper($this->recipient['areacode']." ".$this->recipient['city'],"UTF-8"),0,1);
|
||
else
|
||
$this->Cell(80,5,strtoupper($this->recipient['areacode']." ".$this->recipient['city']),0,1);
|
||
|
||
$this->SetX($this->getStyleElement("abstand_adresszeilelinks"));
|
||
$this->Cell(80,5,strtoupper($this->app->erp->UmlauteEntfernen($this->app->GetLandLang($this->recipient['country'],$this->sprache))),0,1);
|
||
|
||
}
|
||
else {
|
||
$this->Cell(80,5,$this->recipient['areacode']." ".$this->recipient['city'],0,1);
|
||
}
|
||
//$this->SetFont($this->GetFont(),'',9);
|
||
//if(isset($this->recipient['country'])) $this->Cell(80,5,$this->recipient['country'],0,1);
|
||
|
||
|
||
//FREITEXT1
|
||
$freitext1aktiv = $this->getStyleElement('freitext1aktiv');
|
||
if($freitext1aktiv){
|
||
$freitext1inhalt = $this->app->erp->Beschriftung("freitext1inhalt");
|
||
if($freitext1inhalt=="") $freitext1inhalt = $this->getStyleElement('freitext1inhalt');
|
||
|
||
$freitext1inhalt = $this->app->erp->ParseUserVars($this->table,$this->id,$freitext1inhalt);
|
||
$freitext1inhalt = $this->app->erp->ReadyForPDF($freitext1inhalt);
|
||
$freitext1schriftgroesse = $this->getStyleElement('freitext1schriftgroesse');
|
||
$freitext1y = $this->getStyleElement('freitext1y');
|
||
$freitext1x = $this->getStyleElement('freitext1x');
|
||
$freitext1breite = $this->getStyleElement('freitext1breite');
|
||
$this->SetFont($this->GetFont(),'',$freitext1schriftgroesse);
|
||
$this->SetY($freitext1y);
|
||
$this->SetX($freitext1x);
|
||
$this->MultiCell($freitext1breite, 5, $this->WriteHTML($freitext1inhalt), 0, 'L');
|
||
}
|
||
|
||
|
||
//FREITEXT2
|
||
$freitext2aktiv = $this->getStyleElement('freitext2aktiv');
|
||
if($freitext2aktiv){
|
||
$freitext2inhalt = $this->app->erp->Beschriftung("freitext2inhalt");
|
||
if($freitext2inhalt=="") $freitext1inhalt = $this->getStyleElement('freitext2inhalt');
|
||
|
||
$freitext2inhalt = $this->app->erp->ParseUserVars($this->table,$this->id,$freitext2inhalt);
|
||
$freitext2inhalt = $this->app->erp->ReadyForPDF($freitext2inhalt);
|
||
$freitext2schriftgroesse = $this->getStyleElement('freitext2schriftgroesse');
|
||
$freitext2y = $this->getStyleElement('freitext2y');
|
||
$freitext2x = $this->getStyleElement('freitext2x');
|
||
$freitext2breite = $this->getStyleElement('freitext2breite');
|
||
$this->SetFont($this->GetFont(),'',$freitext2schriftgroesse);
|
||
$this->SetY($freitext2y);
|
||
$this->SetX($freitext2x);
|
||
$this->MultiCell($freitext2breite, 5, $this->WriteHTML($freitext2inhalt), 0, 'L');
|
||
}
|
||
|
||
|
||
$this->SetMargins($this->getStyleElement("abstand_seitenrandlinks"),50,$this->getStyleElement("abstand_seitenrandrechts"));
|
||
}
|
||
|
||
public function setAbsender($sender)
|
||
{
|
||
$this->absender = $sender;
|
||
|
||
}
|
||
|
||
public function renderSender() {
|
||
$monthlu = array("", "Januar", "Februar", "M<>rz", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember");
|
||
$monthnom = date("n");
|
||
$month = $monthlu[$monthnom];
|
||
$date = date("j").". ".$month." ".date("Y");
|
||
|
||
|
||
if($this->nichtsichtbar_zeileabsender!=true)
|
||
{
|
||
|
||
//abstand_adresszeileoben
|
||
// line above address field
|
||
$absender = (($this->absender!='') ? $this->absender : $this->getStyleElement('absender'));
|
||
$schriftgroesse = $this->getStyleElement('schriftgroesseabsender');
|
||
$this->SetY(43+$this->abstand_adresszeileoben);
|
||
$this->SetFont($this->GetFont(),'',$schriftgroesse);
|
||
//$cellStr = $this->sender['enterprise']." <20> ".$this->sender['address1']." <20> ".$this->sender['areacode']." ".$this->sender['city'];
|
||
$cellStr = $this->app->erp->ReadyForPDF($absender);
|
||
|
||
$this->SetX($this->getStyleElement("abstand_adresszeilelinks"));
|
||
|
||
if($this->getStyleElement("absenderunterstrichen")=="1")
|
||
$this->Cell($this->GetStringWidth($cellStr)+2,5,$cellStr,'B');
|
||
else
|
||
$this->Cell($this->GetStringWidth($cellStr)+2,5,$cellStr,'');
|
||
}
|
||
|
||
if($this->nichtsichtbar_rechtsoben!=true)
|
||
{
|
||
// detailed sender data
|
||
$lineHeight = 4;
|
||
$xOffset = 131;
|
||
$absatz = 3;
|
||
|
||
$this->SetXY($xOffset,10);
|
||
$this->SetFont($this->GetFont(),'',9);
|
||
$this->Cell(30,$lineHeight,"Name der Gesellschaft: ",0,0,'R');
|
||
$this->SetFont($this->GetFont(),'B',9);
|
||
$this->Cell(60,$lineHeight,$this->sender['enterprise'],0,2);
|
||
if(isset($this->sender['enterprise2']))
|
||
$this->Cell(60,$lineHeight,$this->sender['enterprise2'],0,2);
|
||
|
||
$this->SetXY($xOffset,$this->GetY());
|
||
$this->SetFont($this->GetFont(),'',9);
|
||
$this->Cell(30,$lineHeight,"Sitz der Gesellschaft: ",0,0,'R');
|
||
$this->SetFont($this->GetFont(),'B',9);
|
||
$this->Cell(60,$lineHeight,$this->sender['address1'],0,2);
|
||
if(isset($this->sender['address2']))
|
||
$this->Cell(60,$lineHeight,$this->sender['address2'],0,2);
|
||
$this->Cell(60,$lineHeight,$this->sender['areacode']." ".$this->sender['city'],0,2);
|
||
|
||
$this->SetXY($xOffset,$this->GetY()+$absatz); //abstand
|
||
$this->SetFont($this->GetFont(),'',9);
|
||
if(isset($this->sender['phone1'])) {
|
||
$this->Cell(30,$lineHeight,"Fon: ",0,0,'R');
|
||
$this->Cell(60,$lineHeight,$this->sender['phone1'],0,2);
|
||
}
|
||
|
||
if(isset($this->sender['fax'])) {
|
||
$this->SetXY($xOffset,$this->GetY());
|
||
$this->Cell(30,$lineHeight,"Fax: ",0,0,'R');
|
||
$this->Cell(60,$lineHeight,$this->sender['fax'],0,2);
|
||
}
|
||
|
||
|
||
$this->SetXY($xOffset, $this->GetY()+$absatz); //abstand
|
||
if(isset($this->sender['email'])) {
|
||
$this->Cell(30,$lineHeight,"Mail: ",0,0,'R');
|
||
$this->Cell(60,$lineHeight,$this->sender['email'],0,2);
|
||
}
|
||
|
||
if(isset($this->sender['web'])) {
|
||
$this->SetXY($xOffset,$this->GetY());
|
||
$this->Cell(30,$lineHeight,"Web: ",0,0,'R');
|
||
$this->Cell(60,$lineHeight,$this->sender['web'],0,2);
|
||
}
|
||
|
||
$this->SetXY($xOffset, $this->GetY()+$absatz); //abstand
|
||
if(isset($this->sender['ustid'])) {
|
||
$this->Cell(30,$lineHeight,"UST-ID: ",0,0,'R');
|
||
$this->Cell(60,$lineHeight,$this->sender['ustid'],0,2);
|
||
}
|
||
if(isset($this->sender['taxnr'])) {
|
||
$this->SetXY($xOffset,$this->GetY());
|
||
$this->Cell(30,$lineHeight,"Steuer-Nr.: ",0,0,'R');
|
||
$this->Cell(60,$lineHeight,$this->sender['taxnr'],0,2);
|
||
}
|
||
if(isset($this->sender['hreg'])) {
|
||
$this->SetXY($xOffset,$this->GetY());
|
||
$this->Cell(30,$lineHeight,"Handelsregister: ",0,0,'R');
|
||
$this->Cell(60,$lineHeight,$this->sender['hreg'],0,2);
|
||
}
|
||
|
||
$this->SetXY($xOffset,$this->GetY());
|
||
$this->Cell(30,$lineHeight,utf8_encode("Gesch<63>ftsf<73>hrung: "),0,0,'R');
|
||
$this->Cell(60,$lineHeight,$this->sender['firstname'].' '.$this->sender['familyname'],0,2);
|
||
|
||
//$this->SetXY($xOffset, $this->GetY()+$absatz+2); //abstand
|
||
//$this->Cell(30,$lineHeight,"Datum: ",0,0,'R');
|
||
//$this->Cell(60,$lineHeight,utf8_encode($date),0,2);
|
||
}
|
||
}
|
||
|
||
|
||
// kundennummer rechnungsnummer und datum
|
||
public function renderCorrDetails() {
|
||
|
||
$breite_spalte_rechts = 30;
|
||
|
||
$recht_links_verschieben = $this->abstand_boxrechtsoben_lr;
|
||
|
||
$startpos_links_rechts = -83 + $recht_links_verschieben;
|
||
|
||
$boldTitleStr = $boldValueStr = $titleStr = $valueStr = "";
|
||
$italicTitleStr = $italicValueStr = '';
|
||
$italicBoldTitleStr = $italicBoldValueStr = '';
|
||
if(isset($this->boldCorrDetails)){
|
||
foreach($this->boldCorrDetails as $title => $value) {
|
||
$boldTitleStr .= $title !== ''?$this->app->erp->ReadyForPDF($title).": \n":" \n";
|
||
$boldValueStr .= $this->app->erp->ReadyForPDF($value)."\n";
|
||
}
|
||
}
|
||
if(!empty($this->italicCorrDetails)) {
|
||
foreach($this->italicCorrDetails as $title => $value) {
|
||
$italicTitleStr .= $title !== ''?$this->app->erp->ReadyForPDF($title).": \n":" \n";
|
||
$italicValueStr .= $this->app->erp->ReadyForPDF($value)."\n";
|
||
}
|
||
}
|
||
|
||
if(!empty($this->italicBoldCorrDetails)) {
|
||
foreach($this->italicBoldCorrDetails as $title => $value) {
|
||
$italicBoldTitleStr .= $title !== ''?$this->app->erp->ReadyForPDF($title).": \n":" \n";
|
||
$italicBoldValueStr .= $this->app->erp->ReadyForPDF($value)."\n";
|
||
}
|
||
}
|
||
|
||
if(isset($this->corrDetails)){
|
||
foreach($this->corrDetails as $title => $value) {
|
||
if($value!="")
|
||
{
|
||
$titleStr .= $title !== ''?$this->app->erp->ReadyForPDF($title).": \n":" \n";
|
||
$valueStr .= $this->app->erp->ReadyForPDF($value)."\n";
|
||
}
|
||
}
|
||
}
|
||
|
||
if($this->boxausrichtung=="") $this->boxausrichtung="R";
|
||
|
||
$pos = strpos($this->boxausrichtung, ';');
|
||
if($pos > 0)
|
||
{
|
||
$tmp_box = explode(";",$this->boxausrichtung);
|
||
$this->boxausrichtung = $tmp_box[0];
|
||
$this->box_breite1 = $tmp_box[1];
|
||
$this->box_breite2 = $tmp_box[2];
|
||
}
|
||
if($this->box_breite1=="") $this->box_breite1=34;
|
||
if($this->box_breite2=="") $this->box_breite2=38;
|
||
|
||
|
||
$fontinfobox = $this->getStyleElement("infobox");
|
||
|
||
if($italicBoldTitleStr != '') {
|
||
$this->SetFont($this->GetFont(),'BI',$fontinfobox);
|
||
$this->SetXY($startpos_links_rechts,80);
|
||
$this->MultiCell($this->box_breite1,4,$italicBoldTitleStr,'',!empty($this->boxalignmentleft)?strtoupper($this->boxalignmentleft): $this->boxausrichtung); //TL
|
||
$this->SetXY($startpos_links_rechts+$breite_spalte_rechts,80);
|
||
$this->MultiCell($this->box_breite2,4,$italicBoldValueStr,'',!empty($this->boxalignmentright)?strtoupper($this->boxalignmentright):$this->boxausrichtung); //TR
|
||
}
|
||
elseif($italicTitleStr != '') {
|
||
$this->SetFont($this->GetFont(),'I',$fontinfobox);
|
||
$this->SetXY($startpos_links_rechts,80);
|
||
$this->MultiCell($this->box_breite1,4,$italicTitleStr,'',!empty($this->boxalignmentleft)?strtoupper($this->boxalignmentleft):$this->boxausrichtung); //TL
|
||
$this->SetXY($startpos_links_rechts+$breite_spalte_rechts,80);
|
||
$this->MultiCell($this->box_breite2,4,$italicValueStr,'',!empty($this->boxalignmentright)?strtoupper($this->boxalignmentright):$this->boxausrichtung);
|
||
}
|
||
elseif($boldTitleStr!='') {
|
||
$this->SetFont($this->GetFont(),'B',$fontinfobox);
|
||
$this->SetXY($startpos_links_rechts,80);
|
||
$this->MultiCell($this->box_breite1,4,$boldTitleStr,'',!empty($this->boxalignmentleft)?strtoupper($this->boxalignmentleft):$this->boxausrichtung); //TL
|
||
$this->SetXY($startpos_links_rechts+$breite_spalte_rechts,80);
|
||
$this->MultiCell($this->box_breite2,4,$boldValueStr,'',!empty($this->boxalignmentright)?strtoupper($this->boxalignmentright):$this->boxausrichtung); //TR
|
||
}
|
||
else {
|
||
$this->SetXY($startpos_links_rechts,80+$this->abstand_boxrechtsoben);
|
||
$this->MultiCell($this->box_breite1,0,'','',!empty($this->boxalignmentleft)?strtoupper($this->boxalignmentleft):$this->boxausrichtung); //TL
|
||
$this->SetXY($startpos_links_rechts+$breite_spalte_rechts,80+$this->abstand_boxrechtsoben);
|
||
$this->MultiCell($this->box_breite2,0,'','',!empty($this->boxalignmentright)?strtoupper($this->boxalignmentright):$this->boxausrichtung); //TR
|
||
}
|
||
|
||
$this->SetY(80);
|
||
$this->SetY($this->GetY()+$this->abstand_boxrechtsoben);
|
||
|
||
$this->SetFont($this->GetFont(),'',$fontinfobox);
|
||
$tempY = $this->GetY();
|
||
$this->SetX($startpos_links_rechts);
|
||
$this->MultiCell($this->box_breite1,4,$titleStr,"",$this->boxausrichtung); //BL
|
||
$this->SetXY($startpos_links_rechts+$breite_spalte_rechts,$tempY);
|
||
$this->MultiCell($this->box_breitexi21,4,$valueStr,"",$this->boxausrichtung); //BR
|
||
|
||
$this->SetY(80+$this->abstand_artikeltabelleoben); //Hoehe Box
|
||
//$this->SetY(60);//+$this->abstand_artikeltabelleoben); //Hoehe Box
|
||
}
|
||
|
||
|
||
public function renderDoctype() {
|
||
//$this->Ln(1);
|
||
|
||
if($this->doctype=="brief")
|
||
$betreffszeile = $this->getStyleElement('betreffszeile');
|
||
else
|
||
$betreffszeile = $this->getStyleElement('betreffszeile');
|
||
|
||
$this->SetY(80);//+$this->abstand_artikeltabelleoben); //Hoehe Box
|
||
//$this->SetY(80+$this->abstand_artikeltabelleoben); //Hoehe Box
|
||
|
||
$this->SetFont($this->GetFont(),'B',$betreffszeile);
|
||
$this->SetY($this->GetY()+$this->abstand_betreffzeileoben);
|
||
//$this->Cell(85,6,$this->doctypeOrig);
|
||
$this->MultiCell(210-83+$this->abstand_boxrechtsoben_lr-$this->getStyleElement("abstand_seitenrandlinks")-5,6,html_entity_decode($this->doctypeOrig,ENT_QUOTES),0,'L');
|
||
$this->SetY($this->GetY()-$this->abstand_betreffzeileoben);
|
||
|
||
//$this->SetY($this->GetY()+$this->abstand_betreffzeileoben);
|
||
$this->SetY($this->GetY()+$this->abstand_artikeltabelleoben); //Hoehe Box
|
||
}
|
||
|
||
public function renderText() {
|
||
|
||
if(isset($this->textDetails['body'])) {
|
||
if($this->doctype=="brief")
|
||
$dokumententext = $this->getStyleElement('dokumententext');
|
||
else
|
||
$dokumententext = $this->getStyleElement('dokumententext');
|
||
$this->SetFont($this->GetFont(),'',$dokumententext);
|
||
//if($this->doctype!="brief")
|
||
$this->Ln(11);
|
||
|
||
$this->textDetails['body'] = $this->app->erp->ParseUserVars($this->table,$this->id,$this->textDetails['body']);
|
||
|
||
if($this->getStyleElement("briefhtml")=="1")
|
||
{
|
||
$html = $this->app->erp->ReadyForPDF($this->app->erp->RemoveNewlineAfterBreaks($this->textDetails['body']));
|
||
$this->MultiCell(180,4,$this->WriteHTML($html));
|
||
} else {
|
||
$this->MultiCell(180,4,$this->app->erp->ReadyForPDF($this->textDetails['body']));
|
||
}
|
||
}
|
||
}
|
||
|
||
public function renderFooter() {
|
||
|
||
$this->app->erp->RunHook('briefpapier_render_footer_hook1', 1, $this);
|
||
|
||
if(isset($this->textDetails['footer'])) {
|
||
$freitext = $this->getStyleElement('freitext');
|
||
|
||
if($this->getStyleElement("kleinunternehmer"))
|
||
{
|
||
if($this->textDetails['footer']=="") $this->textDetails['footer'] ="Als Kleinunternehmer im Sinne von §19 Abs.1 UStG wird Umsatzsteuer nicht berechnet!";
|
||
else $this->textDetails['footer'] .="\r\nAls Kleinunternehmer im Sinne von § 19 Abs. 1 UStG wird Umsatzsteuer nicht berechnet!";
|
||
}
|
||
|
||
$this->textDetails['footer'] = $this->app->erp->ParseUserVars($this->table,$this->id,$this->textDetails['footer']);
|
||
|
||
$this->SetFont($this->GetFont(),'',$freitext);
|
||
// $this->Ln();
|
||
$y = $this->GetY();
|
||
|
||
// if($this->doctype!="lieferschein")
|
||
// $this->SetY($y-5);
|
||
//$parsed = $this->app->erp->ReadyForPDF($this->textDetails['footer']);
|
||
if($this->getStyleElement("briefhtml")=="1")
|
||
{
|
||
$html = $this->app->erp->ReadyForPDF($this->app->erp->RemoveNewlineAfterBreaks($this->textDetails['footer']));
|
||
$this->MultiCell(180,4,$this->WriteHTML($html));
|
||
} else {
|
||
$this->MultiCell(180,4,$this->app->erp->ReadyForPDF($this->textDetails['footer']));
|
||
}
|
||
}
|
||
|
||
$this->app->erp->RunHook('briefpapier_render_footer_hook2', 1, $this);
|
||
}
|
||
|
||
public function CalcPosString($posstr, $oldpostr, $hauptnummer, $oldlvl, $newlvl)
|
||
{
|
||
if($oldpostr == 0)
|
||
{
|
||
if($hauptnummer)
|
||
{
|
||
return $hauptnummer.'.1';
|
||
}
|
||
return '1';
|
||
}
|
||
if($newlvl > $oldlvl)
|
||
{
|
||
return $oldpostr.str_repeat('.1', $newlvl - $oldlvl);
|
||
}
|
||
$oldpostra = explode('.', $oldpostr);
|
||
|
||
$diff = $oldlvl - $newlvl;
|
||
$length = count($oldpostra);
|
||
if($hauptnummer && $hauptnummer != $oldpostra[0]){
|
||
return (String)((int)$oldpostra[0]+1).'.1';
|
||
}
|
||
|
||
$ret = '';
|
||
if($diff >= $length -1)
|
||
{
|
||
return (String)((int)$oldpostra[0]+1);
|
||
}
|
||
for($i = 0; $i < $length - 1 - $diff; $i++)
|
||
{
|
||
$ret .= $oldpostra[$i].'.';
|
||
}
|
||
|
||
return $ret.(String)((int)$oldpostra[$length - 1 - $diff]+1);
|
||
}
|
||
|
||
/**
|
||
* @param string $type
|
||
* @param int $orderId
|
||
* @param int $orderPositionId
|
||
* @param string $doctype
|
||
*
|
||
* @return string
|
||
*/
|
||
public function getDeliveryNoteBestBeforeBatchSnFromOrder($type, $orderId, $orderPositionId, $doctype = 'auftrag')
|
||
{
|
||
if($doctype === 'rechnung') {
|
||
$orderPositionId = $this->app->DB->Select(
|
||
sprintf(
|
||
'SELECT auftrag_position_id FROM rechnung_position WHERE id = %d',
|
||
$orderPositionId
|
||
)
|
||
);
|
||
if($orderPositionId <= 0) {
|
||
return '';
|
||
}
|
||
}
|
||
|
||
$position = $this->app->DB->SelectRow(
|
||
sprintf(
|
||
'SELECT id, lieferschein
|
||
FROM lieferschein_position
|
||
WHERE auftrag_position_id = %d AND auftrag_position_id > 0
|
||
LIMIT 1',
|
||
$orderPositionId
|
||
)
|
||
);
|
||
|
||
if(empty($position)) {
|
||
return '';
|
||
}
|
||
if($type === 'mhd') {
|
||
$this->mhd['lieferschein'][$position['lieferschein']][$position['id']] =
|
||
$this->GetChargeMHDSNString('mhd', 'lieferschein', $position['lieferschein'], $position['id']);
|
||
return $this->mhd['lieferschein'][$position['lieferschein']][$position['id']];
|
||
}
|
||
if($type === 'charge') {
|
||
$this->charge['lieferschein'][$position['lieferschein']][$position['id']] =
|
||
$this->GetChargeMHDSNString('charge', 'lieferschein', $position['lieferschein'], $position['id']);
|
||
return $this->charge['lieferschein'][$position['lieferschein']][$position['id']];
|
||
}
|
||
if($type === 'sn') {
|
||
$this->sn['lieferschein'][$position['lieferschein']][$position['id']] =
|
||
$this->GetChargeMHDSNString('sn', 'lieferschein', $position['lieferschein'], $position['id']);
|
||
return $this->sn['lieferschein'][$position['lieferschein']][$position['id']];
|
||
}
|
||
|
||
return '';
|
||
}
|
||
|
||
/**
|
||
* @param string $text
|
||
* @param string $doctype
|
||
* @param int $doctypeId
|
||
* @param int $positionId
|
||
*
|
||
* @return string
|
||
*/
|
||
public function parseBestBeforeBatchSn($text, $doctype, $doctypeId, $positionId){
|
||
if(strpos($text, '{MHD}') !== false) {
|
||
$entry = !empty($this->mhd[$doctype]) && !empty($this->mhd[$doctype][$doctypeId])
|
||
&& !empty($this->mhd[$doctype][$doctypeId][$positionId])?
|
||
$this->mhd[$doctype][$doctypeId][$positionId]:'';
|
||
if($entry === '') {
|
||
$this->mhd[$doctype][$doctypeId][$positionId] = $this->GetChargeMHDSNString(
|
||
'mhd',$doctype,$doctypeId,$positionId, true
|
||
);
|
||
$entry = $this->mhd[$doctype][$doctypeId][$positionId];
|
||
if($entry === '' && ($doctype === 'auftrag' || $doctype === 'rechnung')) {
|
||
$entry = $this->getDeliveryNoteBestBeforeBatchSnFromOrder('mhd', $doctypeId, $positionId, $doctype);
|
||
}
|
||
}
|
||
|
||
$text = str_replace('{MHD}', $entry, $text);
|
||
}
|
||
if(strpos($text, '{CHARGE}') !== false) {
|
||
$entry = !empty($this->charge[$doctype]) && !empty($this->charge[$doctype][$doctypeId])
|
||
&& !empty($this->charge[$doctype][$doctypeId][$positionId])?
|
||
$this->charge[$doctype][$doctypeId][$positionId]:'';
|
||
if($entry === '') {
|
||
$this->charge[$doctype][$doctypeId][$positionId] = $this->GetChargeMHDSNString(
|
||
'charge',$doctype,$doctypeId,$positionId, true
|
||
);
|
||
$entry = $this->charge[$doctype][$doctypeId][$positionId];
|
||
if($entry === '' && ($doctype === 'auftrag' || $doctype === 'rechnung')) {
|
||
$entry = $this->getDeliveryNoteBestBeforeBatchSnFromOrder('charge', $doctypeId, $positionId, $doctype);
|
||
}
|
||
}
|
||
$text = str_replace('{CHARGE}', $entry, $text);
|
||
}
|
||
if(strpos($text, '{SN}') !== false) {
|
||
$entry = !empty($this->sn[$doctype]) && !empty($this->sn[$doctype][$doctypeId])
|
||
&& !empty($this->sn[$doctype][$doctypeId][$positionId])?
|
||
$this->sn[$doctype][$doctypeId][$positionId]:'';
|
||
if($entry === '') {
|
||
$this->sn[$doctype][$doctypeId][$positionId] = $this->GetChargeMHDSNString(
|
||
'sn',$doctype,$doctypeId,$positionId, true
|
||
);
|
||
$entry = $this->sn[$doctype][$doctypeId][$positionId];
|
||
if($entry === '' && ($doctype === 'auftrag' || $doctype === 'rechnung')) {
|
||
$entry = $this->getDeliveryNoteBestBeforeBatchSnFromOrder('sn', $doctypeId, $positionId, $doctype);
|
||
}
|
||
}
|
||
$text = str_replace('{SN}', $entry, $text);
|
||
}
|
||
|
||
return $text;
|
||
}
|
||
|
||
public function renderItems() {
|
||
|
||
$this->app->erp->RunHook('briefpapier_renderitems',1, $this);
|
||
// if($this->bestellungohnepreis) $this->doctype="lieferschein";
|
||
$posWidth = $this->getStyleElement("breite_position");
|
||
$amWidth = $this->getStyleElement("breite_menge");
|
||
$itemNoWidth = $this->getStyleElement("breite_nummer");
|
||
$einheitWidth = $this->getStyleElement("breite_einheit");
|
||
$descWidth = $this->getStyleElement("breite_artikel");
|
||
$taxWidth = $this->getStyleElement("breite_steuer");
|
||
$belege_subpositionen = $this->getStyleElement("belege_subpositionen");
|
||
$belege_subpositionenstuecklisten = $this->getStyleElement('belege_subpositionenstuecklisten') && in_array(($this->table?$this->table:$this->doctype),array('rechnung', 'auftrag','lieferschein','gutschrift','angebot'));
|
||
$belege_stuecklisteneinrueckenmm = $this->getStyleElement('belege_stuecklisteneinrueckenmm');
|
||
$doctype = $this->table?$this->table:$this->doctype;
|
||
$doctypeId = $this->id;
|
||
|
||
$has_steuer = $this->app->DB->Select("SHOW COLUMNS FROM `$doctype` LIKE 'steuersatz_normal'");
|
||
|
||
if ($has_steuer) {
|
||
$docArr = $this->app->DB->SelectRow(
|
||
sprintf(
|
||
'SELECT projekt,adresse,steuersatz_normal,steuersatz_ermaessigt FROM `%s` WHERE id = %d',
|
||
$doctype, $doctypeId
|
||
)
|
||
);
|
||
} else {
|
||
$docArr = $this->app->DB->SelectRow(
|
||
sprintf(
|
||
'SELECT projekt,adresse, 0 AS steuersatz_normal, 0 AS steuersatz_ermaessigt FROM `%s` WHERE id = %d',
|
||
$doctype, $doctypeId
|
||
)
|
||
);
|
||
}
|
||
|
||
$query = sprintf("SELECT `sprache` FROM `%s`
|
||
WHERE `id` = %d
|
||
LIMIT 1",
|
||
$doctype, $doctypeId);
|
||
$documentLanguage = $this->app->DB->Select($query);
|
||
if(!empty($docArr)) {
|
||
$projekt = $docArr['projekt'];
|
||
$adresse = $docArr['adresse'];
|
||
}
|
||
else{
|
||
$projekt = $this->app->DB->Select("SELECT projekt FROM " . ($this->table ? $this->table : $this->doctype) . " WHERE id = '" . $this->id . "' LIMIT 1");
|
||
$adresse = $this->app->DB->Select("SELECT adresse FROM " . ($this->table ? $this->table : $this->doctype) . " WHERE id = '" . $this->id . "' LIMIT 1");
|
||
}
|
||
$inventurohnepreis = null;
|
||
if(!in_array($this->table ? $this->table : $this->doctype, ['rechnung','auftrag','angebot','bestellung'])) {
|
||
|
||
$from = $this->table ? $this->table : $this->doctype;
|
||
|
||
if ($this->app->DB->Select("SHOW COLUMNS FROM `$from` LIKE 'noprice'")) {
|
||
|
||
$inventurohnepreis = $this->app->DB->Select(
|
||
sprintf(
|
||
'SELECT noprice
|
||
FROM `%s`
|
||
WHERE id = %d
|
||
LIMIT 1',
|
||
$from,
|
||
$this->id
|
||
)
|
||
);
|
||
}
|
||
else {
|
||
$inventurohnepreis = false;
|
||
}
|
||
}
|
||
if($inventurohnepreis){
|
||
$descWidth += 40;
|
||
}
|
||
|
||
if($this->doctype=="arbeitsnachweis")
|
||
{
|
||
$itemNoWidth = 20;
|
||
$taxWidth = 40;
|
||
$descWidth = 95;
|
||
}
|
||
|
||
if($this->rabatt=='1') {
|
||
$descWidth -= 15;
|
||
}
|
||
$priceWidth = 20;
|
||
$sumWidth = 20;
|
||
$rabattWidth = 15;
|
||
// $lineLength = $amWidth + $itemNoWidth + $descWidth + $taxWidth + $priceWidth + $sumWidth;
|
||
|
||
// zwischenloesung um platz zu sparen
|
||
if($this->ust_spalteausblende)
|
||
{
|
||
$taxWidth--;
|
||
$descWidth += $taxWidth;
|
||
$taxWidth= 1;
|
||
}
|
||
|
||
$cellhoehe = 5;
|
||
|
||
// render table header
|
||
if(isset($this->textDetails['body'])) {
|
||
$this->Ln();
|
||
}
|
||
else {
|
||
$this->Ln(8);
|
||
}
|
||
$tabellenbeschriftung = $this->getStyleElement('tabellenbeschriftung');
|
||
|
||
$this->SetX($this->getStyleElement('abstand_seitenrandlinks')+1); // eventuell einstellbar per GUI
|
||
|
||
$this->SetFont($this->GetFont(),'B',$tabellenbeschriftung);
|
||
$this->Cell($posWidth,6,$this->app->erp->ReadyForPDF($this->app->erp->Beschriftung('dokument_position'),0,0,'C'));
|
||
if($this->doctype!='arbeitsnachweis')
|
||
{
|
||
if($this->doctype=='zahlungsavis')
|
||
{
|
||
$this->Cell($itemNoWidth,6,'Nummer');
|
||
$this->Cell($descWidth-$einheitWidth+$taxWidth+$priceWidth+$rabattWidth,6,'Beleg');
|
||
|
||
$this->Cell($amWidth,6,'',0,0,'R');
|
||
}
|
||
else {
|
||
$this->Cell($itemNoWidth,6,$this->app->erp->ReadyForPDF($this->app->erp->Beschriftung('dokument_artikelnummer')));
|
||
if($this->getStyleElement('artikeleinheit')=='1'){
|
||
$this->Cell($descWidth - $einheitWidth, 6, $this->app->erp->ReadyForPDF($this->app->erp->Beschriftung('dokument_artikel')));
|
||
}
|
||
else{
|
||
$this->Cell($descWidth, 6, $this->app->erp->ReadyForPDF($this->app->erp->Beschriftung('dokument_artikel')));
|
||
}
|
||
$this->Cell($amWidth,6,$this->app->erp->ReadyForPDF($this->app->erp->Beschriftung('dokument_menge')),0,0,'R');
|
||
}
|
||
} else {
|
||
$this->Cell($taxWidth,6,'Mitarbeiter');
|
||
$this->Cell($itemNoWidth,6,'Ort');
|
||
$this->Cell($descWidth,6,'Tätigkeit');
|
||
$this->Cell($amWidth,6,'Stunden',0,0,'R');
|
||
}
|
||
|
||
if($this->doctype!='lieferschein' && $this->doctype!='arbeitsnachweis' && $this->doctype!='produktion' && $this->doctype!='zahlungsavis' && $this->doctype!='preisanfrage'){
|
||
if($this->getStyleElement('artikeleinheit')=='1'){
|
||
$this->Cell($einheitWidth, 6, $this->app->erp->ReadyForPDF($this->app->erp->Beschriftung('dokument_einheit')), 0, 0, 'R');
|
||
}
|
||
|
||
if($this->ust_spalteausblende){
|
||
$this->Cell($taxWidth, 6, '', 0, 0, 'R');
|
||
}
|
||
else{
|
||
$this->Cell($taxWidth, 6, $this->app->erp->ReadyForPDF($this->app->erp->Beschriftung('dokument_mwst')), 0, 0, 'R');
|
||
}
|
||
|
||
if($this->getStyleElement('artikeleinheit')=='1'){
|
||
if(!$inventurohnepreis){
|
||
$this->Cell($priceWidth, 6, $this->app->erp->ReadyForPDF($this->app->erp->Beschriftung('dokument_einzel')), 0, 0, 'R');
|
||
}
|
||
}
|
||
else{
|
||
if(!$inventurohnepreis){
|
||
$this->Cell($priceWidth, 6, $this->app->erp->ParseUserVars($this->doctype, $this->id,$this->app->erp->ReadyForPDF($this->app->erp->Beschriftung('dokument_stueck'))), 0, 0, 'R');
|
||
}
|
||
}
|
||
|
||
if($this->rabatt=='1') {
|
||
if(!$inventurohnepreis){
|
||
$this->Cell($rabattWidth,6,$this->app->erp->Beschriftung('dokument_rabatt'),0,0,'R');
|
||
$this->Cell($sumWidth,6,$this->app->erp->ParseUserVars($this->doctype, $this->id,$this->app->erp->ReadyForPDF($this->app->erp->Beschriftung('dokument_gesamt'))),0,0,'R');
|
||
}
|
||
} else {
|
||
if(!$inventurohnepreis){
|
||
$this->Cell($sumWidth,6,$this->app->erp->ParseUserVars($this->doctype, $this->id,$this->app->erp->ReadyForPDF($this->app->erp->Beschriftung('dokument_gesamt'))),0,0,'R');
|
||
}
|
||
}
|
||
}
|
||
else if ($this->doctype=='lieferschein' || $this->doctype=='preisanfrage')
|
||
{
|
||
if($this->getStyleElement("artikeleinheit")=='1'){
|
||
$this->Cell($einheitWidth, 6, $this->app->erp->ReadyForPDF($this->app->erp->Beschriftung('dokument_einheit')), 0, 0, 'R');
|
||
}
|
||
}
|
||
else if ($this->doctype=='zahlungsavis')
|
||
{
|
||
$this->Cell($sumWidth,6,$this->app->erp->ParseUserVars($this->doctype, $this->id,$this->app->erp->ReadyForPDF($this->app->erp->Beschriftung('dokument_gesamt'))),0,0,'R');
|
||
}
|
||
|
||
$this->Ln();
|
||
$this->Line($this->getStyleElement('abstand_seitenrandlinks')+1, $this->GetY(), 210-$this->getStyleElement("abstand_seitenrandrechts"), $this->GetY());
|
||
$this->Ln(2);
|
||
|
||
// render table body
|
||
$tabelleninhalt = $this->getStyleElement('tabelleninhalt');
|
||
|
||
$this->SetFont($this->GetFont(),'',$tabelleninhalt);
|
||
$topos = 0;
|
||
if(is_array($this->items))$topos = count($this->items);
|
||
$zwischenpositionen = $this->app->DB->Select("SELECT count(distinct pos) FROM beleg_zwischenpositionen WHERE doctype='".$this->doctype."' AND doctypeid='".$this->doctypeid."' AND pos >= 0 AND pos <'$topos' AND (postype = 'gruppe' OR postype = 'zwischensumme' OR postype = 'gruppensumme' OR postype = 'gruppensummemitoptionalenpreisen') ORDER by sort");
|
||
if($zwischenpositionen < 1)$belege_subpositionen = false;
|
||
$hauptnummer = 0;
|
||
$posoffset = 0;
|
||
if($belege_subpositionen)$hauptnummer = 1;
|
||
$oldlvl = 0;
|
||
$oldpostr = 0;
|
||
$langeartikelnummern = ($this->getStyleElement('langeartikelnummern')?true:false);
|
||
if($this->doctype==='bestellung') {
|
||
$langeartikelnummern = $this->app->DB->Select("SELECT langeartikelnummern FROM bestellung WHERE id='".$this->doctypeid."' LIMIT 1")?true:false;
|
||
}
|
||
$pos=0;
|
||
$umsatzsteuerermaessigtProzent = !empty($docArr)?$docArr['steuersatz_ermaessigt']: $this->app->erp->GetSteuersatzErmaessigt(false,!empty($this->id)?$this->id:$this->doctypeid,$this->table);
|
||
$umsatzsteuernormalProzent = !empty($docArr)?$docArr['steuersatz_normal']:$this->app->erp->GetSteuersatzNormal(false,!empty($this->id)?$this->id:$this->doctypeid,$this->table);
|
||
|
||
$umsatzsteuerermaessigt = (1+$umsatzsteuerermaessigtProzent/100);
|
||
$umsatzsteuernormal = (1+$umsatzsteuernormalProzent/100);
|
||
|
||
$jitposfix = 0; //Die Anzahl der der Unterartikel des vorherigen Stücklistenartikels
|
||
$jitposfixbase = 0; //Die Gesamtzahl der bisher ausgeblendeten Stücklistenartikel
|
||
$anzeigeBelegNettoAdrese = $this->app->erp->AnzeigeBelegNettoAdresse($this->anrede, $this->doctype, $projekt, $adresse,$this->id);
|
||
$docRow = $this->app->DB->SelectRow(
|
||
sprintf(
|
||
'SELECT * FROM `%s` WHERE id = %d', $this->doctype, $this->id
|
||
)
|
||
);
|
||
foreach($this->items as $item){
|
||
$this->SetTextColor(0,0,0);
|
||
for ($l=$pos; $l <= $pos+$jitposfix ; $l++) {
|
||
//Arbeitet die Zwischenpositionen durch falls der vorherige Artikel ein Stücklistenartikel war bei dem Teile ausgeblendet wurden
|
||
$iszwichenpos = $this->DrawZwischenpositionen($l+$jitposfixbase);
|
||
}
|
||
$jitposfixbase += $jitposfix;
|
||
if($item['keineeinzelartikelanzeigen'] == 1){
|
||
$jitposfix = $item['anzahlunterartikel'];
|
||
}else{
|
||
$jitposfix = 0;
|
||
}
|
||
$item['name'] = ($langeartikelnummern?"\r\n\r\n":'').$this->app->erp->ReadyForPDF($item['name']);
|
||
$item['desc'] = $this->app->erp->ReadyForPDF($item['desc']);
|
||
$item['itemno'] = $this->app->erp->ReadyForPDF($item['itemno']);
|
||
$item['herstellernummer'] = $this->app->erp->ReadyForPDF($item['herstellernummer']);
|
||
$item['artikelnummerkunde'] = $this->app->erp->ReadyForPDF($item['artikelnummerkunde']);
|
||
$item['lieferdatum'] = $this->app->erp->ReadyForPDF($item['lieferdatum']);
|
||
$item['hersteller'] = $this->app->erp->ReadyForPDF($item['hersteller']);
|
||
|
||
//TODO Soll einstellbar werden: Zeilenabstand in Tabelle normal mittel
|
||
$cellhoehe = 3;
|
||
//position
|
||
|
||
if($iszwichenpos && $belege_subpositionen && $pos > $posoffset)
|
||
{
|
||
$hauptnummer++;
|
||
$posoffset = $pos;
|
||
}
|
||
if(isset($item['posausblenden']) && $item['posausblenden']){
|
||
$posstr = '';
|
||
}else{
|
||
$pos++;
|
||
$posstr = $pos;
|
||
}
|
||
|
||
if($belege_subpositionen && $hauptnummer)
|
||
{
|
||
$posstr = $hauptnummer.'.'.($pos-$posoffset);
|
||
}
|
||
$newlvl = isset($item['lvl'])?(int)$item['lvl']:0;
|
||
|
||
|
||
$itemNoWidthold = $itemNoWidth;
|
||
$posWidthold = $posWidth;
|
||
if($belege_stuecklisteneinrueckenmm && $newlvl > 0)
|
||
{
|
||
$this->Cell($belege_stuecklisteneinrueckenmm * $newlvl,$cellhoehe,'');
|
||
$posWidth -= $belege_stuecklisteneinrueckenmm * $newlvl;
|
||
if($posWidth < 2* strlen($posstr))
|
||
{
|
||
$diff = 2* strlen($posstr) - $posWidth;
|
||
$posWidth += $diff;
|
||
$itemNoWidth -= $diff;
|
||
}
|
||
}
|
||
if($belege_subpositionenstuecklisten)$posstr = $this->CalcPosString($posstr,$oldpostr, $hauptnummer, $oldlvl, $newlvl);
|
||
$oldpostr = $posstr;
|
||
$oldlvl = isset($item['lvl'])?(int)$item['lvl']:0;
|
||
$this->Cell($posWidth,$cellhoehe,$posstr,0,0,$belege_stuecklisteneinrueckenmm?'':'C');
|
||
//artikelnummer
|
||
if($this->doctype==='arbeitsnachweis')
|
||
{
|
||
$this->Cell($taxWidth,$cellhoehe,trim($item['person']),0);
|
||
|
||
$zeilenuntertext = $this->getStyleElement('zeilenuntertext');
|
||
$this->SetFont($this->GetFont(),'',$zeilenuntertext);
|
||
|
||
// ort
|
||
$tmpy = $this->GetY();
|
||
$tmpx = $this->GetX();
|
||
$this->MultiCell($itemNoWidth,($zeilenuntertext/2),trim($item['itemno']),0); // 4 = abstand
|
||
$tmpy2 = $this->GetY();
|
||
$this->SetXY($tmpx+$itemNoWidth,$tmpy);
|
||
$this->SetFont($this->GetFont(),'',$tabelleninhalt);
|
||
}
|
||
else {
|
||
//TODO BENE
|
||
if($this->doctype==='lieferschein' && $this->getStyleElement('modul_verband')=='1'){
|
||
$this->SetFont($this->GetFont(), '', $tabelleninhalt + 3);
|
||
}else{
|
||
$this->SetFont($this->GetFont(), '', $tabelleninhalt);
|
||
}
|
||
if(isset($item['itemno'])) {
|
||
$this->Cell($itemNoWidth,$cellhoehe,$item['itemno'],0);
|
||
}
|
||
else {
|
||
$this->Cell($itemNoWidth);
|
||
}
|
||
$this->SetFont($this->GetFont(),'',$tabelleninhalt);
|
||
}
|
||
|
||
$position_x = $this->GetX();
|
||
$position_y = $this->GetY();
|
||
|
||
// start am Ende der Zeile Zeichnen
|
||
$this->SetAutoPageBreak(false,$this->getStyleElement("abstand_umbruchunten")); //2306BS
|
||
// Artikel Name
|
||
if($item['tax']!=='hidden' && $newlvl == 0){
|
||
$this->SetFont($this->GetFont(), 'B', $tabelleninhalt);
|
||
}
|
||
if($item['tax'] === 'hidden' && $item['ohnepreis'] == 2 && $newlvl == 0){
|
||
$this->SetFont($this->GetFont(), 'B', $tabelleninhalt);
|
||
}
|
||
if($this->getStyleElement("artikeleinheit")=='1'){
|
||
$this->MultiCell($descWidth - $einheitWidth, $cellhoehe, $item['name'], 0, 'L', false);
|
||
}
|
||
else{
|
||
$this->MultiCell($descWidth, $cellhoehe, $item['name'], 0, 'L', false);
|
||
}
|
||
|
||
$this->SetFont($this->GetFont(),'',$tabelleninhalt);
|
||
$this->SetAutoPageBreak(true,$this->getStyleElement('abstand_umbruchunten')); //2306BS
|
||
|
||
$position_y_end_name = $this->GetY();
|
||
//
|
||
|
||
// wenn vorhanden Artikel Einheit
|
||
|
||
|
||
if($this->getStyleElement('artikeleinheit')=='1'){
|
||
$this->SetXY(($position_x + $descWidth - $einheitWidth), $position_y);
|
||
}
|
||
else{
|
||
$this->SetXY(($position_x + $descWidth), $position_y);
|
||
}
|
||
|
||
|
||
if($this->doctype==='arbeitsnachweis'){
|
||
$this->SetXY(($position_x + $descWidth), $position_y);
|
||
}
|
||
|
||
|
||
// Menge
|
||
|
||
if($this->doctype==='zahlungsavis'){
|
||
$this->Cell($amWidth, $cellhoehe, '', 0, 0, 'R');
|
||
}
|
||
else{
|
||
$this->Cell($amWidth, $cellhoehe, $item['amount'], 0, 0, 'R');
|
||
}
|
||
|
||
if($this->doctype!=='lieferschein' && $this->doctype!=='arbeitsnachweis' && $this->doctype!=='produktion' && $this->doctype!=='preisanfrage') {
|
||
if($this->getStyleElement('artikeleinheit')=='1')
|
||
{
|
||
if($item['unit']!='')
|
||
$einheit = $item['unit'];
|
||
else {
|
||
if(!empty($item['artikel']))
|
||
{
|
||
$einheit = $this->app->DB->Select("SELECT einheit FROM artikel WHERE
|
||
id='".$item['artikel']."' LIMIT 1");
|
||
}else{
|
||
$einheit = $this->app->DB->Select("SELECT einheit FROM artikel WHERE
|
||
nummer='".$item['itemno']."' LIMIT 1");
|
||
}
|
||
if($einheit=='') {
|
||
$einheit = $this->getStyleElement('artikeleinheit_standard');
|
||
}
|
||
}
|
||
if(!empty($einheit) && !empty($documentLanguage)){
|
||
$query = sprintf("SELECT ae.id FROM `artikeleinheit` AS `ae`
|
||
WHERE ae.einheit_de = '%s'",
|
||
$this->app->DB->real_escape_string($einheit));
|
||
$unitId = $this->app->DB->Select($query);
|
||
if(!empty($unitId)){
|
||
$query = sprintf("SELECT u.beschriftung FROM `uebersetzung` AS `u`
|
||
WHERE u.sprache = '%s' AND u.label='%s'",
|
||
$documentLanguage,'artikeleinheit_'.$unitId);
|
||
$unitTranslation = $this->app->DB->Select($query);
|
||
if(!empty($unitTranslation)){
|
||
$einheit = $unitTranslation;
|
||
}
|
||
}
|
||
}
|
||
|
||
$this->Cell($einheitWidth,$cellhoehe,$this->app->erp->ReadyForPDF($einheit),0,0,'R');
|
||
}
|
||
|
||
// if($item['tax']=="hidden") $item['tax']=="hidden";
|
||
if($item['tax']!=='hidden')
|
||
{
|
||
if($this->ust_befreit>0) {
|
||
$item['tax'] = 0;
|
||
} else {
|
||
if($item['tax'] === 'normal') {
|
||
$item['tax'] = $umsatzsteuernormal - 1;
|
||
}
|
||
else {
|
||
$item['tax'] = $umsatzsteuerermaessigt - 1;
|
||
}
|
||
}
|
||
if(isset($item['steuersatz'])){
|
||
$item['tax'] = $item['steuersatz'] / 100;
|
||
}
|
||
}
|
||
|
||
|
||
// wenn steuerfrei komplett immer 0 steuer anzeigen
|
||
$item['tmptax'] = (float) $item['tax'] + 1;
|
||
|
||
// standard anzeige mit steuer
|
||
if(!$this->ust_spalteausblende){
|
||
if($item['tax']==='hidden'){
|
||
$this->Cell($taxWidth,$cellhoehe,"",0,0,'R');
|
||
} else {
|
||
$tax = $item['tax']; //= $tax; //="USTV"?0.19:0.07;
|
||
$tax *= 100; $tax = $tax.'%';
|
||
|
||
if($this->doctype==='zahlungsavis'){
|
||
$this->Cell($taxWidth,$cellhoehe,"",0,0,'R');
|
||
}
|
||
else{
|
||
$this->Cell($taxWidth, $cellhoehe, $item['ohnepreis'] ? '' : $tax, 0, 0, 'R');
|
||
}
|
||
}
|
||
} else {
|
||
//kleinunternehmer
|
||
$this->Cell($taxWidth,$cellhoehe,"",0,0,'R');
|
||
}
|
||
|
||
if($this->doctype!=='lieferschein' && $this->doctype!=='produktion' && $this->doctype!=='preisanfrage') {
|
||
// preis pro Artikel
|
||
|
||
if($this->doctype!=='zahlungsavis')
|
||
{
|
||
if($item['tax']!=='hidden'){
|
||
|
||
if($anzeigeBelegNettoAdrese){
|
||
//if(($this->anrede=="firma" || $this->app->erp->AnzeigeBelegNetto($this->anrede,$projekt) || $this->doctype=="bestellung" || $this->getStyleElement("immernettorechnungen",$projekt)=="1")
|
||
//&& $this->getStyleElement("immerbruttorechnungen",$projekt)!="1")
|
||
if(!$inventurohnepreis){
|
||
$this->Cell($priceWidth, $cellhoehe, $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['price']), 0, 0, 'R');
|
||
}
|
||
}
|
||
else{
|
||
if(!$inventurohnepreis){
|
||
$this->Cell($priceWidth, $cellhoehe, $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['price'] * $item['tmptax']), 0, 0, 'R');
|
||
}
|
||
}
|
||
} else
|
||
{
|
||
if($item['ohnepreis']==2) {
|
||
if(!$inventurohnepreis){
|
||
$this->Cell($priceWidth,$cellhoehe,$item['price'],0,0,'R');
|
||
}
|
||
} // text alternativ zu preis
|
||
else {
|
||
if(!$inventurohnepreis){
|
||
$this->Cell($priceWidth,$cellhoehe,$item['ohnepreis']?'':$this->formatMoney((double)$item['price']),0,0,'R');
|
||
}
|
||
}
|
||
}
|
||
} else {
|
||
$this->Cell($priceWidth,$cellhoehe,"",0,0,'R');
|
||
}
|
||
|
||
// zentale rabatt spalte
|
||
if($this->rabatt=='1') {
|
||
$rabatt_string='';
|
||
|
||
//rabatt
|
||
if($item['grundrabatt'] > 0 || $item['rabatt1'] > 0 || $item['rabatt2'] > 0)
|
||
{
|
||
if($item['grundrabatt']>0) {
|
||
$rabatt_string .= $item['grundrabatt']." %\r\n";
|
||
}
|
||
if($item['rabatt1']>0) {
|
||
$rabatt_string .= $item['rabatt1']." %\r\n";
|
||
}
|
||
if($item['rabatt2']>0) {
|
||
$rabatt_string .= $item['rabatt2']." %\r\n";
|
||
}
|
||
if($item['rabatt3']>0) {
|
||
$rabatt_string .= $item['rabatt3']." %\r\n";
|
||
}
|
||
if($item['rabatt4']>0) {
|
||
$rabatt_string .= $item['rabatt4']." %\r\n";
|
||
}
|
||
if($item['rabatt5']>0) {
|
||
$rabatt_string .= $item['rabatt5']." %\r\n";
|
||
}
|
||
|
||
|
||
$tmpy = $this->GetY();
|
||
$tmpx = $this->GetX();
|
||
|
||
if($item['keinrabatterlaubt']=='1' || $item['rabatt']<=0 || $item['rabatt']==='') {
|
||
$rabatt_or_porto = $this->app->DB->Select("SELECT id FROM artikel WHERE
|
||
nummer='".$item['itemno']."' AND (porto='1' OR rabatt='1') LIMIT 1");
|
||
if($rabatt_or_porto)
|
||
$rabatt_string='';
|
||
else {
|
||
if($this->getStyleElement('modul_verband')=='1') {
|
||
$rabatt_string='SNP';
|
||
}
|
||
else {
|
||
$rabatt_string='';
|
||
}
|
||
}
|
||
if($item['keinrabatterlaubt']=='1' && $item['rabatt']<>0){
|
||
$rabatt_string = $item['rabatt'] . " %\r\n";
|
||
}
|
||
}
|
||
|
||
// rabatt nur klein anzeigen wenn es mehr als einer ist
|
||
if(strstr(trim($rabatt_string), PHP_EOL)) {
|
||
$this->SetFont($this->GetFont(),'',6);
|
||
}
|
||
|
||
if($item['tax']!=='hidden'){
|
||
$this->MultiCell($rabattWidth, $cellhoehe - 1, $rabatt_string, 0, 0);
|
||
}
|
||
else{
|
||
$this->MultiCell($rabattWidth, $cellhoehe - 1, "", 0, 0);
|
||
}
|
||
|
||
$this->SetXY($tmpx+$rabattWidth,$tmpy);
|
||
$this->SetFont($this->GetFont(),'',$tabelleninhalt);
|
||
} else {
|
||
if($item['rabatt']<>0){
|
||
// && $item['keinrabatterlaubt']!="1")
|
||
$this->Cell($rabattWidth, $cellhoehe, $item['ohnepreis'] ? '' : $item['rabatt'] . " %", 0, 0, 'R');
|
||
}
|
||
else
|
||
{
|
||
if($this->getStyleElement('modul_verband')=='1')
|
||
{
|
||
$rabatt_or_porto = $this->app->DB->Select("SELECT id FROM artikel WHERE
|
||
nummer='".$item['itemno']."' AND (porto='1' OR rabatt='1') LIMIT 1");
|
||
if($rabatt_or_porto){
|
||
$this->Cell($rabattWidth, $cellhoehe, '', 0, 0, 'R');
|
||
}
|
||
else{
|
||
$this->Cell($rabattWidth, $cellhoehe, 'SNP', 0, 0, 'R');
|
||
}
|
||
} else {
|
||
$this->Cell($rabattWidth,$cellhoehe,"",0,0,'R');
|
||
}
|
||
}
|
||
}
|
||
}
|
||
else {
|
||
// anzeige ohne zentrale rabatt spalte
|
||
if ($item['tax']==="hidden"){
|
||
$this->Cell($priceWidth,$cellhoehe,"",0,0,'R');
|
||
}
|
||
else {
|
||
if($anzeigeBelegNettoAdrese)
|
||
//if(($this->anrede=="firma" || $this->app->erp->AnzeigeBelegNetto($this->anrede,$projekt) || $this->doctype=="bestellung" || $this->getStyleElement("immernettorechnungen",$projekt)=="1")
|
||
// && $this->getStyleElement("immerbruttorechnungen",$projekt)!="1")
|
||
{
|
||
if(!$inventurohnepreis){
|
||
$this->Cell($priceWidth,$cellhoehe,$item['ohnepreis']?'':$this->formatMoney((double)$item['tprice']),0,0,'R');
|
||
}
|
||
}
|
||
else{
|
||
if(!$inventurohnepreis){
|
||
$this->Cell($priceWidth, $cellhoehe, $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice'] * $item['tmptax']), 0, 0, 'R');
|
||
}
|
||
}
|
||
|
||
$this->Cell($rabattWidth,$cellhoehe,"",0,0,'R');
|
||
}
|
||
}
|
||
}
|
||
else {
|
||
if($anzeigeBelegNettoAdrese)
|
||
// if(($this->anrede=="firma" || $this->app->erp->AnzeigeBelegNetto($this->anrede,$projekt) || $this->doctype=="bestellung" || $this->getStyleElement("immernettorechnungen",$projekt)=="1")
|
||
// && $this->getStyleElement("immerbruttorechnungen",$projekt)!="1")
|
||
if(!$inventurohnepreis){
|
||
$this->Cell($priceWidth,$cellhoehe,$item['ohnepreis']?'':$this->formatMoney((double)$item['price']),0,0,'R');
|
||
}
|
||
else{
|
||
if(!$inventurohnepreis){
|
||
$this->Cell($priceWidth, $cellhoehe, $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['price'] * $item['tmptax']), 0, 0, 'R');
|
||
}
|
||
}
|
||
}
|
||
//$this->Cell($sumWidth,$cellhoehe,$this->formatMoney($item['tprice']).' '.$item['currency'],0,0,'R');
|
||
if($this->rabatt=='1')
|
||
{
|
||
//gesamt preis
|
||
if ($item['tax']==='hidden'){
|
||
$this->Cell($priceWidth,$cellhoehe,'',0,0,'R');
|
||
}
|
||
else {
|
||
if($this->rabatt=='1'){
|
||
if($anzeigeBelegNettoAdrese){
|
||
//if(($this->anrede=="firma" || $this->app->erp->AnzeigeBelegNetto($this->anrede,$projekt) || $this->doctype=="bestellung" || $this->getStyleElement("immernettorechnungen",$projekt)=="1")
|
||
// && $this->getStyleElement("immerbruttorechnungen",$projekt)!="1")
|
||
if(!$inventurohnepreis){
|
||
$this->Cell($sumWidth, $cellhoehe, $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice']), 0, 0, 'R');
|
||
}
|
||
}
|
||
else{
|
||
if(!$inventurohnepreis){
|
||
$this->Cell($sumWidth, $cellhoehe, $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice'] * $item['tmptax']), 0, 0, 'R');
|
||
}
|
||
}
|
||
}
|
||
else {
|
||
if($anzeigeBelegNettoAdrese){
|
||
// if(($this->anrede=="firma" || $this->app->erp->AnzeigeBelegNetto($this->anrede,$projekt) || $this->doctype=="bestellung" || $this->getStyleElement("immernettorechnungen",$projekt)=="1")
|
||
// && $this->getStyleElement("immerbruttorechnungen",$projekt)!="1")
|
||
if(!$inventurohnepreis){
|
||
$this->Cell($sumWidth, $cellhoehe, $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice']), 0, 0, 'R');
|
||
}
|
||
}
|
||
else{
|
||
if(!$inventurohnepreis){
|
||
$this->Cell($sumWidth, $cellhoehe, $item['ohnepreis'] ? '' : $this->formatMoney((double)$item['tprice'] * $item['tmptax']), 0, 0, 'R');
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
else if(($this->doctype==='lieferschein' || $this->doctype==='preisanfrage') && $this->getStyleElement('artikeleinheit')=='1')
|
||
{
|
||
if($item['unit']!='')
|
||
$einheit = $item['unit'];
|
||
else {
|
||
$einheit = $this->app->DB->Select("SELECT einheit FROM artikel WHERE
|
||
nummer='".$item['itemno']."' LIMIT 1");
|
||
if($einheit=='') {
|
||
$einheit = $this->getStyleElement('artikeleinheit_standard');
|
||
}
|
||
}
|
||
|
||
if(!empty($einheit) && !empty($documentLanguage)){
|
||
$query = sprintf("SELECT ae.id FROM `artikeleinheit` AS `ae`
|
||
WHERE ae.einheit_de = '%s'",
|
||
$this->app->DB->real_escape_string($einheit));
|
||
$unitId = $this->app->DB->Select($query);
|
||
if(!empty($unitId)){
|
||
$query = sprintf("SELECT u.beschriftung FROM `uebersetzung` AS `u`
|
||
WHERE u.sprache = '%s' AND u.label='%s'",
|
||
$documentLanguage,'artikeleinheit_'.$unitId);
|
||
$unitTranslation = $this->app->DB->Select($query);
|
||
if(!empty($unitTranslation)){
|
||
$einheit = $unitTranslation;
|
||
}
|
||
}
|
||
}
|
||
|
||
$this->Cell($einheitWidth,$cellhoehe,$this->app->erp->ReadyForPDF($einheit),0,0,'R');
|
||
}
|
||
|
||
$this->Ln();
|
||
if($this->getStyleElement('herstellernummerimdokument')=='1' && $item['herstellernummer']!='')
|
||
{
|
||
if($item['desc']!=''){
|
||
$item['desc'] = $item['desc'] . "\r\n" . $this->app->erp->Beschriftung('dokument_herstellernummer') . ': ' . $item['herstellernummer'];
|
||
}
|
||
else{
|
||
$item['desc'] = $this->app->erp->Beschriftung('dokument_herstellernummer') . ': ' . $item['herstellernummer'];
|
||
}
|
||
}
|
||
|
||
$daten = $this->app->DB->SelectRow("SELECT laenge, breite, hoehe FROM artikel WHERE id = '".$item['artikel']."'");
|
||
if($this->getStyleElement('abmessungimdokument')=='1' && (!empty($daten['laenge']) || $daten['breite']!='' || $daten['hoehe']!='')) {
|
||
$tmp = array();
|
||
if($daten['laenge']<>0) {
|
||
$tmp[]=number_format($daten['laenge'],2,',','.');
|
||
}
|
||
if($daten['breite']<>0) {
|
||
$tmp[]=number_format($daten['breite'],2,',','.');
|
||
}
|
||
if($daten['hoehe']<>0) {
|
||
$tmp[]=number_format($daten['hoehe'],2,',','.');
|
||
}
|
||
|
||
if(count($tmp) > 0)
|
||
{
|
||
if($item['desc']!=''){
|
||
$item['desc'] = $item['desc'] . "\r\n" . $this->app->erp->Beschriftung('dokument_abmessung') . ': ' . implode('x', $tmp);
|
||
}
|
||
else{
|
||
$item['desc'] = $this->app->erp->Beschriftung('dokument_abmessung') . ': ' . implode('x', $tmp);
|
||
}
|
||
}
|
||
}
|
||
|
||
if($item['lieferdatum']!='' && $item['lieferdatum']!='0000-00-00' && $item['lieferdatum']!=='00.00.0000')
|
||
{
|
||
if(strpos($item['lieferdatum'],"-")!==false){
|
||
$item['lieferdatum'] = $this->app->erp->ReadyForPDF($this->app->String->Convert($item['lieferdatum'], '%1-%2-%3', '%3.%2.%1'));
|
||
}
|
||
|
||
if($item['lieferdatumkw']==1)
|
||
{
|
||
$ddate = $this->app->String->Convert($item['lieferdatum'],'%3.%2.%1','%1-%2-%3');
|
||
$duedt = explode("-", $ddate);
|
||
$date = mktime(0, 0, 0, $duedt[1], $duedt[2], $duedt[0]);
|
||
$week = date('W/o', $date);
|
||
$item['lieferdatum'] = $this->app->erp->Beschriftung('dokument_lieferdatumkw').' '.$week;
|
||
}
|
||
|
||
if($item['desc']!=''){
|
||
$item['desc'] = $item['desc'] . "\r\n" . $this->app->erp->Beschriftung('dokument_lieferdatum') . ': ' . $item['lieferdatum'];
|
||
}
|
||
else{
|
||
$item['desc'] = $this->app->erp->Beschriftung('dokument_lieferdatum') . ': ' . $item['lieferdatum'];
|
||
}
|
||
}
|
||
|
||
|
||
if($this->getStyleElement('freifelderimdokument')=='1')
|
||
{
|
||
for($ifreifeld=1;$ifreifeld<=40;$ifreifeld++)
|
||
{
|
||
if($item['freifeld'.$ifreifeld]!='')
|
||
{
|
||
$freifeldbeschriftung = $this->app->erp->Beschriftung('artikel_freifeld' . $ifreifeld);
|
||
$freifeldtyp = $this->getStyleElement('freifeld' . $ifreifeld.'typ');
|
||
if($freifeldtyp==='select')
|
||
{
|
||
$freifeldbeschriftung = strstr($freifeldbeschriftung, '|', true);
|
||
}
|
||
|
||
if($item['desc']!=''){
|
||
$item['desc'] = $item['desc'] . "\r\n" . $freifeldbeschriftung . ': ' . $item['freifeld' . $ifreifeld];
|
||
}
|
||
else{
|
||
$item['desc'] = $freifeldbeschriftung . ': ' . $item['freifeld' . $ifreifeld];
|
||
}
|
||
}
|
||
}
|
||
if(strpos($item['desc'],'{{') !== false && $this->app->erp->ModulVorhanden('formeln')) {
|
||
$item['desc'] = $this->app->erp->BerechneFormel($item['desc'], $this->table, $this->id, $pos, $item);
|
||
}
|
||
|
||
if(strpos($item['desc'],'{') !== false) {
|
||
if(!empty($item['belegposition']) && !empty($this->doctype) && !empty($this->id)) {
|
||
$item['desc'] = $this->parseBestBeforeBatchSn($item['desc'], $this->doctype, $this->id, $item['belegposition']);
|
||
}
|
||
$item['desc'] = $this->app->erp->ParseIfVars($item['desc']);
|
||
}
|
||
}
|
||
|
||
if(strpos($item['desc'],'{') !== false) {
|
||
if(!empty($item['belegposition']) && !empty($this->doctype) && !empty($this->id)){
|
||
$item['desc'] = $this->parseBestBeforeBatchSn(
|
||
$item['desc'], $this->doctype, $this->id, $item['belegposition']
|
||
);
|
||
}
|
||
}
|
||
|
||
if(!empty($this->doctype) && !empty($this->id) && strpos($item['desc'], '{') !== false) {
|
||
$item['desc'] = $this->app->erp->ParseUserVars($this->doctype, $this->id ,$item['desc']);
|
||
}
|
||
|
||
if($item['artikelnummerkunde']!="" && $item['artikelnummerkunde']!='0')
|
||
{
|
||
if($item['desc']!=''){
|
||
$item['desc'] = $item['desc'] . "\r\n" . $this->app->erp->Beschriftung('dokument_artikelnummerkunde') . ': ' . $item['artikelnummerkunde'];
|
||
}
|
||
else{
|
||
$item['desc'] = $this->app->erp->Beschriftung('dokument_artikelnummerkunde') . ': ' . $item['artikelnummerkunde'];
|
||
}
|
||
}
|
||
|
||
if($item['zolltarifnummer']!='' && $item['zolltarifnummer']!='0' && $this->doctype!='proformarechnung')
|
||
{
|
||
if($item['desc']!='') {
|
||
$item['desc']=$item['desc']."\r\n".$this->app->erp->Beschriftung('dokument_zolltarifnummer').': '.$item['zolltarifnummer'].' '.($item['herkunftsland']!=''?$this->app->erp->Beschriftung('dokument_herkunftsland').': '.$item['herkunftsland']:'');
|
||
}
|
||
else {
|
||
$item['desc']=$this->app->erp->Beschriftung('dokument_zolltarifnummer').': '.$item['zolltarifnummer'].' '.($item['herkunftsland']!=""?$this->app->erp->Beschriftung('dokument_herkunftsland').': '.$item['herkunftsland']:'');
|
||
}
|
||
}
|
||
|
||
if($item['ean']!='' && $item['ean']!='0')
|
||
{
|
||
if($item['desc']!=''){
|
||
$item['desc'] = $item['desc'] . "\r\n" . $this->app->erp->Beschriftung('dokument_ean') . ': ' . $item['ean'];
|
||
}
|
||
else{
|
||
$item['desc'] = $this->app->erp->Beschriftung('dokument_ean') . ': ' . $item['ean'];
|
||
}
|
||
}
|
||
|
||
if($item['zusammenfassen']){
|
||
$item['desc'] = '';
|
||
}
|
||
|
||
$startpageBeforeDescription = $this->page;
|
||
|
||
if($item['desc']!='' || !empty($item['steuertext'])) {
|
||
//Herstellernummer einblenden wenn vorhanden und aktiviert
|
||
$zeilenuntertext = $this->getStyleElement('zeilenuntertext');
|
||
$this->SetY($position_y_end_name+$this->getStyleElement('abstand_name_beschreibung'));
|
||
$yBeforeDescription = $this->GetY();
|
||
$this->SetFont($this->GetFont(),'',$zeilenuntertext);
|
||
if($belege_stuecklisteneinrueckenmm && $newlvl > 0){
|
||
$this->Cell($belege_stuecklisteneinrueckenmm * $newlvl, $cellhoehe, '');
|
||
}
|
||
$this->Cell($posWidth);
|
||
$this->Cell($itemNoWidth);
|
||
if($this->doctype==='arbeitsnachweis') {
|
||
$this->Cell($taxWidth);
|
||
}
|
||
|
||
if($this->doctype==='lieferschein' && $this->getStyleElement('modul_verband')=='1'){
|
||
$this->SetFont($this->GetFont(), '', $tabelleninhalt + 1);
|
||
}
|
||
|
||
if($this->getStyleElement('briefhtml')=='1')
|
||
{
|
||
$html = $this->app->erp->ReadyForPDF($this->app->erp->RemoveNewlineAfterBreaks($item['desc']));
|
||
if($this->getStyleElement('artikeleinheit')=='1')
|
||
{
|
||
if($this->getStyleElement('breite_artikelbeschreibung'))
|
||
{
|
||
$this->MultiCell($descWidth-$einheitWidth+$taxWidth + $sumWidth + $rabattWidth,($zeilenuntertext/2),$this->WriteHTML($html),0,'L'); // 4 = abstand
|
||
if(!empty($item['steuertext'])){
|
||
$this->SetX($this->GetX()+$posWidth+$itemNoWidth);
|
||
$this->MultiCell($descWidth-$einheitWidth+$taxWidth + $sumWidth + $rabattWidth,($zeilenuntertext/2),$item['steuertext'],0,'L');
|
||
}
|
||
}
|
||
else
|
||
{
|
||
$this->MultiCell($descWidth-$einheitWidth,($zeilenuntertext/2),$this->WriteHTMLCell($descWidth-$einheitWidth,$html),0,'L'); // 4 = abstand //ALT
|
||
if(!empty($item['steuertext'])){
|
||
$this->SetX($this->GetX()+$posWidth+$itemNoWidth);
|
||
$this->MultiCell($descWidth-$einheitWidth+$taxWidth + $sumWidth + $rabattWidth,($zeilenuntertext/2),$item['steuertext'],0,'L');
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if($this->getStyleElement('breite_artikelbeschreibung')=='1')
|
||
{
|
||
$this->MultiCell($descWidth+$taxWidth + $sumWidth + $rabattWidth,($zeilenuntertext/2),$this->WriteHTML($html),0,'L'); // 4 = abstand
|
||
if(!empty($item['steuertext'])){
|
||
$this->SetX($this->GetX()+$posWidth+$itemNoWidth);
|
||
$this->MultiCell($descWidth-$einheitWidth+$taxWidth + $sumWidth + $rabattWidth,($zeilenuntertext/2),$item['steuertext'],0,'L');
|
||
}
|
||
}
|
||
else
|
||
{
|
||
$this->MultiCell($descWidth,($zeilenuntertext/2),$this->WriteHTMLCell($descWidth,$html),0,'L'); // 4 = abstand //ALT
|
||
if(!empty($item['steuertext'])){
|
||
$this->SetX($this->GetX()+$posWidth+$itemNoWidth);
|
||
$this->MultiCell($descWidth-$einheitWidth+$taxWidth + $sumWidth + $rabattWidth,($zeilenuntertext/2),$item['steuertext'],0,'L');
|
||
}
|
||
}
|
||
}
|
||
} else {
|
||
if($this->getStyleElement('artikeleinheit')=='1')
|
||
{
|
||
if($this->getStyleElement('breite_artikelbeschreibung'))
|
||
{
|
||
$this->MultiCell($descWidth-$einheitWidth+$taxWidth + $sumWidth + $rabattWidth,($zeilenuntertext/2),trim($item['desc']),0,'L'); // 4 = abstand
|
||
if(!empty($item['steuertext'])){
|
||
$this->SetX($this->GetX()+$posWidth+$itemNoWidth);
|
||
$this->MultiCell($descWidth-$einheitWidth+$taxWidth + $sumWidth + $rabattWidth,($zeilenuntertext/2),$item['steuertext'],0,'L');
|
||
}
|
||
}
|
||
else
|
||
{
|
||
$this->MultiCell($descWidth-$einheitWidth,($zeilenuntertext/2),trim($item['desc']),0,'L'); // 4 = abstand //ALT
|
||
if(!empty($item['steuertext'])){
|
||
$this->SetX($this->GetX()+$posWidth+$itemNoWidth);
|
||
$this->MultiCell($descWidth-$einheitWidth+$taxWidth + $sumWidth + $rabattWidth,($zeilenuntertext/2),$item['steuertext'],0,'L');
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if($this->getStyleElement('breite_artikelbeschreibung')=='1')
|
||
{
|
||
$this->MultiCell($descWidth+$taxWidth + $sumWidth + $rabattWidth,($zeilenuntertext/2),trim($item['desc']),0,'L'); // 4 = abstand
|
||
if(!empty($item['steuertext'])){
|
||
$this->SetX($this->GetX()+$posWidth+$itemNoWidth);
|
||
$this->MultiCell($descWidth-$einheitWidth+$taxWidth + $sumWidth + $rabattWidth,($zeilenuntertext/2),$item['steuertext'],0,'L');
|
||
}
|
||
}
|
||
else
|
||
{
|
||
$this->MultiCell($descWidth,($zeilenuntertext/2),trim($item['desc']),0,'L'); // 4 = abstand //ALT
|
||
if(!empty($item['steuertext'])){
|
||
$this->SetX($this->GetX()+$posWidth+$itemNoWidth);
|
||
$this->MultiCell($descWidth-$einheitWidth+$taxWidth + $sumWidth + $rabattWidth,($zeilenuntertext/2),$item['steuertext'],0,'L');
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
$this->Cell($taxWidth);
|
||
$this->Cell($amWidth);
|
||
$this->Ln();
|
||
$this->SetFont($this->GetFont(),'',$tabelleninhalt);
|
||
|
||
$zeilenuntertext = $this->getStyleElement('zeilenuntertext');
|
||
$this->SetFont($this->GetFont(),'',$zeilenuntertext);
|
||
$this->Cell($posWidth);
|
||
$this->Cell($itemNoWidth);
|
||
if($this->doctype==='arbeitsnachweis') {
|
||
$this->Cell($taxWidth);
|
||
}
|
||
if($this->getStyleElement('artikeleinheit')=='1'){
|
||
$this->MultiCell($descWidth - $einheitWidth, 4, '', 0); // 4 = abstand zwischen Artikeln
|
||
}
|
||
else{
|
||
$this->MultiCell($descWidth, 4, '', 0); // 4 = abstand zwischen Artikeln
|
||
}
|
||
$this->Cell($taxWidth);
|
||
$this->Cell($amWidth);
|
||
$this->Ln();
|
||
$this->SetFont($this->GetFont(),'',$tabelleninhalt);
|
||
$yAfterDescription = $this->GetY();
|
||
} else {
|
||
|
||
$zeilenuntertext = $this->getStyleElement('zeilenuntertext');
|
||
$this->SetY($position_y_end_name);
|
||
$yBeforeDescription = $this->GetY();
|
||
$this->SetFont($this->GetFont(),'',$zeilenuntertext);
|
||
$this->Cell($posWidth);
|
||
$this->Cell($itemNoWidth);
|
||
if($this->doctype==='arbeitsnachweis')
|
||
{
|
||
$this->Cell($taxWidth);
|
||
}
|
||
if($this->getStyleElement('artikeleinheit')=='1')
|
||
{
|
||
$this->MultiCell($descWidth-$einheitWidth,3,trim($item['desc']),0); // 4 = abstand
|
||
if(!empty($item['steuertext']))
|
||
{
|
||
$this->SetX($this->GetX()+$posWidth+$itemNoWidth);
|
||
$this->MultiCell($descWidth-$einheitWidth+$taxWidth + $sumWidth + $rabattWidth,($zeilenuntertext/2),$item['steuertext'],0,'L');
|
||
}
|
||
}
|
||
else
|
||
{
|
||
$this->MultiCell($descWidth,3,trim($item['desc']),0); // 4 = abstand
|
||
if(!empty($item['steuertext']))
|
||
{
|
||
$this->SetX($this->GetX()+$posWidth+$itemNoWidth);
|
||
$this->MultiCell($descWidth-$einheitWidth+$taxWidth + $sumWidth + $rabattWidth,($zeilenuntertext/2),$item['steuertext'],0,'L');
|
||
}
|
||
}
|
||
|
||
if(!empty($staffelpreiseanzeigen)){
|
||
$this->MultiCell($posWidth+$itemNoWidth+$descWidth+$amWidth+$taxWidth+$sumWidth+$priceWidth,($zeilenuntertext/2),trim($staffelpreistext),0,'R');
|
||
}
|
||
|
||
$this->Cell($taxWidth);
|
||
$this->Cell($amWidth);
|
||
$this->Ln();
|
||
$this->SetFont($this->GetFont(),'',$tabelleninhalt);
|
||
$yAfterDescription = $this->GetY();
|
||
}
|
||
|
||
$itemNoWidth = $itemNoWidthold;
|
||
$posWidth = $posWidthold;
|
||
|
||
|
||
|
||
if(
|
||
($this->doctype == "auftrag" && $this->getStyleElement("beleg_artikelbild")) ||
|
||
($this->doctype == "lieferschein" && $this->getStyleElement("lieferschein_artikelbild")) ||
|
||
($this->doctype == "rechnung" && $this->getStyleElement("rechnung_artikelbild")) ||
|
||
($this->doctype == "bestellung" && $this->getStyleElement("bestellung_artikelbild")) ||
|
||
($this->doctype == "gutschrift" && $this->getStyleElement("gutschrift_artikelbild")) ||
|
||
($this->doctype == "angebot" && $this->getStyleElement("angebot_artikelbild"))
|
||
){
|
||
$datei = $this->app->DB->Select("SELECT datei FROM `datei_stichwoerter` WHERE subjekt='Shopbild' AND objekt='Artikel' AND parameter='" . $item['artikel'] . "' ORDER by sort ASC LIMIT 1");
|
||
if(!empty($datei)){
|
||
$datei = $this->app->DB->Select("SELECT id FROM datei_version WHERE datei = '$datei' ORDER BY id DESC LIMIT 1");
|
||
}
|
||
$startpage = $this->page;
|
||
if(!empty($datei)){
|
||
$xBeforePic = $this->GetX();
|
||
$folder = $this->app->erp->GetDMSPath($datei);
|
||
if(file_exists($folder . '/' . $datei)){
|
||
if(!class_exists('image')) include_once(__DIR__ . '/../class.image.php');
|
||
$img = new image($this->app);
|
||
$breite = 20 * 10;
|
||
$hoehe = $breite;
|
||
|
||
[$width, $height] = getimagesize($folder . '/' . $datei);
|
||
if($width > 0 && $height > 0){
|
||
$scalex = $breite / $width;
|
||
$scaley = $hoehe / $height;
|
||
if($scalex < $scaley){
|
||
$hoehe /= $scaley / $scalex;
|
||
$hoehe = ceil($hoehe);
|
||
}else{
|
||
$breite /= $scalex / $scaley;
|
||
$breite = ceil($breite);
|
||
}
|
||
|
||
$cachefolder = $this->app->erp->CreateDMSPath($this->app->Conf->WFuserdata . '/dms/' . $this->app->Conf->WFdbname . '/cache', $datei, true) . "/";
|
||
$dateiname = $cachefolder . $datei . '_' . $breite . '_' . $hoehe;
|
||
|
||
if(!is_file($dateiname)) $img->scaledPicByFileId($datei, $breite, $hoehe, false, 'jpg');
|
||
if(is_file($dateiname)){
|
||
[$width, $height] = getimagesize($dateiname);
|
||
//$value['datei'] = array('file'=>$folder.'/cache/'.$datei.'_'.$breite.'_'.$breite,'width'=>$width/10,'height'=>$height/10);
|
||
|
||
$this->SetX($posWidth + (int)$this->getStyleElement("abstand_seitenrandlinks") - 5);
|
||
$dateityp = mime_content_type($dateiname);
|
||
$dateityp = substr($dateityp,6);
|
||
if($dateityp == ''){
|
||
$dateityp = 'jpg';
|
||
}
|
||
|
||
if($startpageBeforeDescription != $this->page){
|
||
$this->SetY($this->abseite2y);
|
||
$this->SetX($posWidth + (int)$this->getStyleElement("abstand_seitenrandlinks") - 5);
|
||
$position_y_end_name = $this->abseite2y;
|
||
}
|
||
$this->Image($dateiname, $this->GetX(), $position_y_end_name + 2, $width / 10, $hoehe / 10,$dateityp);
|
||
$this->SetXY($this->GetX(), $position_y_end_name + 20);
|
||
$yAfterPic = $this->GetY();
|
||
}
|
||
}
|
||
}
|
||
|
||
if($yAfterPic < $yAfterDescription){
|
||
$this->SetY($yAfterDescription);
|
||
}
|
||
|
||
$this->SetX($xBeforePic);
|
||
|
||
$y_nach_bild = $this->GetY();
|
||
|
||
if($yAfterDescription < $yAfterPic+5 && $startpage == $this->page){
|
||
$this->SetY($y_nach_bild+5);
|
||
}
|
||
if($this->GetY() > 240){
|
||
$this->AddPage();
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
for ($l=$pos; $l <= $pos+$jitposfix ; $l++) {
|
||
//Letzten Artikel durcharbeiten
|
||
$this->DrawZwischenpositionen($l+$jitposfixbase, $umsatzsteuerermaessigtProzent,$umsatzsteuernormalProzent);
|
||
}
|
||
|
||
//$this->Line($this->GetX(), $this->GetY(), $this->getStyleElement("abstand_seitenrandlinks")+195-$this->getStyleElement("abstand_seitenrandrechts"), $this->GetY());
|
||
|
||
$this->Line($this->getStyleElement("abstand_seitenrandlinks")+1, $this->GetY(), 210-$this->getStyleElement("abstand_seitenrandrechts"), $this->GetY());
|
||
}
|
||
|
||
function DrawZwischenpositionen($pos,$umsatzsteuerermaessigt = null,$umsatzsteuernormal = null) {
|
||
$ret = false;
|
||
if(is_null($umsatzsteuerermaessigt))
|
||
{
|
||
$umsatzsteuerermaessigt = $this->app->erp->GetSteuersatzErmaessigt(false,$this->doctypeid,$this->table);
|
||
}
|
||
if(is_null($umsatzsteuernormal))
|
||
{
|
||
$umsatzsteuernormal = $this->app->erp->GetSteuersatzNormal(false,$this->doctypeid,$this->table);
|
||
}
|
||
if($this->table != 'lieferschein' && $this->table != 'preisanfrage')
|
||
{
|
||
$zwischenpositionen = $this->app->DB->SelectArr("SELECT * FROM beleg_zwischenpositionen WHERE doctype='".$this->table."' AND doctypeid='".$this->doctypeid."' AND pos='$pos' ORDER by sort");
|
||
}else{
|
||
$zwischenpositionen = $this->app->DB->SelectArr("SELECT * FROM beleg_zwischenpositionen WHERE doctype='".$this->table."' AND doctypeid='".$this->doctypeid."' AND pos='$pos' AND postype <> 'gruppensumme' AND postype <> 'gruppensummemitoptionalenpreisen' AND postype <> 'zwischensumme' ORDER by sort");
|
||
}
|
||
|
||
$projekt = $this->app->DB->Select("SELECT projekt FROM ".$this->table." WHERE id = '".$this->doctypeid."' LIMIT 1");
|
||
$czwischenpositionen = !empty($zwischenpositionen)?count($zwischenpositionen):0;
|
||
for($i=0;$i<$czwischenpositionen;$i++)
|
||
{
|
||
$data = json_decode($zwischenpositionen[$i]['wert'], true);
|
||
switch($zwischenpositionen[$i]['postype'])
|
||
{
|
||
case "gruppe":
|
||
$ret = true;
|
||
$schriftgroesse = $this->FontSizePt;
|
||
$schriftgroesse_alt = $schriftgroesse;
|
||
if($schriftgroesse == 0)$schriftgroesse = 7;
|
||
if(!empty($data['Schriftgroesse']))
|
||
{
|
||
$schriftgroesse = $data['Schriftgroesse'];
|
||
if($schriftgroesse == 0)$schriftgroesse = 7;
|
||
$this->SetFontSize($schriftgroesse);
|
||
}
|
||
$fett = true;
|
||
if(isset($data['Fett']))
|
||
{
|
||
if($data['Fett'] === false || $data['Fett'] === 'false')$fett = false;
|
||
if($data['Fett'] === true || $data['Fett'] === 'true')$fett = true;
|
||
}
|
||
$unterstrichen = false;
|
||
if(isset($data['Unterstrichen']))
|
||
{
|
||
$unterstrichen = $data['Unterstrichen'];
|
||
}
|
||
$this->underline = $unterstrichen;
|
||
$html = ($fett?"<b>":"").$data['name'].($fett?"</b>":"");
|
||
if(!empty($data['Abstand_Oben']))
|
||
{
|
||
$this->Ln((int)$data['Abstand_Oben']);
|
||
}else{
|
||
$this->Ln(0);
|
||
}
|
||
$schriftgroesse = 7;
|
||
if(!empty($data['Schriftgroesse']))
|
||
{
|
||
$schriftgroesse = $data['Schriftgroesse'];
|
||
}
|
||
$this->SetFontSize($schriftgroesse_alt);
|
||
$x = $this->GetX();
|
||
$abstand_links = 0;
|
||
if(isset($data['Abstand_Links']))
|
||
{
|
||
$abstand_links = (int)$data['Abstand_Links'];
|
||
$this->SetX($x+$abstand_links);
|
||
}
|
||
|
||
$this->MultiCell(0,4,$this->WriteHTML($html));
|
||
$this->SetX($x);
|
||
$this->Ln();
|
||
$this->underline = false;
|
||
if($data['kurztext']!="")
|
||
{
|
||
|
||
if(isset($data['Kurztext_Unterstrichen']))
|
||
{
|
||
$this->underline = $data['Kurztext_Unterstrichen'];
|
||
}
|
||
$x = $this->GetX();
|
||
$abstand_links = 0;
|
||
if(isset($data['Kurztext_Abstand_Links'])){
|
||
$abstand_links = (int)$data['Kurztext_Abstand_Links'];
|
||
$this->SetX($x+$abstand_links);
|
||
}
|
||
elseif(isset($data['Abstand_Links']))
|
||
{
|
||
$abstand_links = (int)$data['Abstand_Links'];
|
||
$this->SetX($x+$abstand_links);
|
||
}
|
||
$this->MultiCell(0,4,$this->WriteHTML($data['kurztext']));
|
||
$this->SetX($x);
|
||
if(!empty($data['Abstand_Unten']))
|
||
{
|
||
$this->Ln((int)$data['Abstand_Unten']);
|
||
}else{
|
||
$this->Ln(10);
|
||
}
|
||
}
|
||
$this->SetFontSize($schriftgroesse_alt);
|
||
$this->underline = false;
|
||
break;
|
||
|
||
case "bild":
|
||
if($data['bild'])
|
||
{
|
||
$nochtext = '';
|
||
if($data['kurztext']!="")
|
||
{
|
||
$kurztexta = explode('{BILD}', $data['kurztext'], 2);
|
||
}else {
|
||
$kurztexta[] = '';
|
||
}
|
||
if(count($kurztexta) > 1)$nochtext = $kurztexta[1];
|
||
$data['kurztext'] = $kurztexta[0];
|
||
|
||
$__x = $this->GetX();
|
||
//$ret = true;
|
||
$schriftgroesse = $this->FontSizePt;
|
||
$schriftgroesse_alt = $schriftgroesse;
|
||
if($schriftgroesse == 0)$schriftgroesse = 7;
|
||
if(!empty($data['Schriftgroesse']))
|
||
{
|
||
$schriftgroesse = $data['Schriftgroesse'];
|
||
if($schriftgroesse == 0)$schriftgroesse = 7;
|
||
$this->SetFontSize($schriftgroesse);
|
||
}
|
||
$fett = true;
|
||
if(isset($data['Fett']))
|
||
{
|
||
if($data['Fett'] === false || $data['Fett'] === 'false')$fett = false;
|
||
if($data['Fett'] === true || $data['Fett'] === 'true')$fett = true;
|
||
}
|
||
$unterstrichen = false;
|
||
if(isset($data['Unterstrichen']))
|
||
{
|
||
$unterstrichen = $data['Unterstrichen'];
|
||
}
|
||
$this->underline = $unterstrichen;
|
||
$html = ($fett?"<b>":"").$data['name'].($fett?"</b>":"");
|
||
if(!empty($data['Abstand_Oben']))
|
||
{
|
||
$this->Ln((int)$data['Abstand_Oben']);
|
||
}else{
|
||
$this->Ln(0);
|
||
}
|
||
$schriftgroesse = 7;
|
||
if(!empty($data['Schriftgroesse']))
|
||
{
|
||
$schriftgroesse = $data['Schriftgroesse'];
|
||
}
|
||
$this->SetFontSize($schriftgroesse_alt);
|
||
$x = $this->GetX();
|
||
$abstand_links = 0;
|
||
if(isset($data['Abstand_Links']))
|
||
{
|
||
$abstand_links = (int)$data['Abstand_Links'];
|
||
$this->SetX($x+$abstand_links);
|
||
}
|
||
|
||
$this->MultiCell(0,4,$this->WriteHTML($html));
|
||
$this->SetX($x);
|
||
$this->Ln();
|
||
$this->underline = false;
|
||
if($data['kurztext']!="")
|
||
{
|
||
|
||
if(isset($data['Kurztext_Unterstrichen']))
|
||
{
|
||
$this->underline = $data['Kurztext_Unterstrichen'];
|
||
}
|
||
$x = $this->GetX();
|
||
$abstand_links = 0;
|
||
if(isset($data['Kurztext_Abstand_Links'])){
|
||
$abstand_links = (int)$data['Kurztext_Abstand_Links'];
|
||
$this->SetX($x+$abstand_links);
|
||
}
|
||
elseif(isset($data['Abstand_Links']))
|
||
{
|
||
$abstand_links = (int)$data['Abstand_Links'];
|
||
$this->SetX($x+$abstand_links);
|
||
}
|
||
$this->MultiCell(0,4,$this->WriteHTML($data['kurztext']));
|
||
$this->SetX($x);
|
||
if($nochtext == '')
|
||
{
|
||
if(!empty($data['Abstand_Unten']))
|
||
{
|
||
$this->Ln((int)$data['Abstand_Unten']);
|
||
}else{
|
||
$this->Ln(10);
|
||
}
|
||
}
|
||
}
|
||
$this->SetFontSize($schriftgroesse_alt);
|
||
$this->underline = false;
|
||
|
||
$posWidth = $this->getStyleElement("breite_position");
|
||
$amWidth = $this->getStyleElement("breite_menge");
|
||
$itemNoWidth = $this->getStyleElement("breite_nummer");
|
||
$datei = $data['bild'];
|
||
if(!empty($datei))
|
||
{
|
||
$datei = $this->app->DB->Select("SELECT id FROM datei_version WHERE datei = '$datei' ORDER BY id DESC LIMIT 1");
|
||
}
|
||
if(!empty($datei))
|
||
{
|
||
$folder = $this->app->erp->GetDMSPath($datei);
|
||
if(file_exists($folder.'/'.$datei))
|
||
{
|
||
if(!class_exists('image'))include_once(__DIR__.'/../class.image.php');
|
||
$img = new image($this->app);
|
||
if(isset($data['bildbreite']) && (int)$data['bildbreite'] > 0)
|
||
{
|
||
$breite = $data['bildbreite'] * 10;
|
||
}else{
|
||
$breite = 30 * 10;
|
||
}
|
||
if(isset($data['bildhoehe']) && (int)$data['bildhoehe'] > 0)
|
||
{
|
||
$hoehe = $data['bildhoehe'] * 10;
|
||
}else{
|
||
$hoehe = $breite;
|
||
}
|
||
[$width, $height] = getimagesize($folder.'/'.$datei);
|
||
if($width > 0 && $height > 0)
|
||
{
|
||
$scalex = $breite / $width;
|
||
$scaley = $hoehe / $height;
|
||
if($scalex < $scaley)
|
||
{
|
||
$hoehe /= $scaley / $scalex;
|
||
$hoehe = ceil($hoehe);
|
||
}else{
|
||
$breite /= $scalex / $scaley;
|
||
$breite = ceil($breite);
|
||
}
|
||
|
||
$cachefolder = $this->app->erp->CreateDMSPath($this->app->Conf->WFuserdata.'/dms/'.$this->app->Conf->WFdbname.'/cache', $datei, true)."/";
|
||
$dateiname = $cachefolder.$datei.'_'.$breite.'_'.$hoehe;
|
||
|
||
if(!is_file($dateiname))$img->scaledPicByFileId($datei, $breite, $hoehe, false, 'jpg');
|
||
if(is_file($dateiname))
|
||
{
|
||
[$width, $height] = getimagesize($dateiname);
|
||
//$value['datei'] = array('file'=>$folder.'/cache/'.$datei.'_'.$breite.'_'.$breite,'width'=>$width/10,'height'=>$height/10);
|
||
$x = $this->GetX();
|
||
$y = $this->GetY();
|
||
$this->SetX($posWidth+$itemNoWidth+(int)$this->getStyleElement("abstand_seitenrandlinks"));
|
||
$this->Image($dateiname, $this->GetX(), $this->GetY(),$width / 10, $hoehe / 10, 'jpg');
|
||
if($nochtext == '')
|
||
{
|
||
$this->Cell($picwidth,6,'',0,0,'C');
|
||
}
|
||
$this->SetXY($this->GetX(), $y + $height / 10 + ($nochtext == ''?5:0));
|
||
}
|
||
}
|
||
}
|
||
}
|
||
$this->SetXY($__x, $this->GetY());
|
||
|
||
if($nochtext !== '')
|
||
{
|
||
$data['kurztext'] = $nochtext;
|
||
$__x = $this->GetX();
|
||
$ret = true;
|
||
$schriftgroesse = $this->FontSizePt;
|
||
$schriftgroesse_alt = $schriftgroesse;
|
||
if($schriftgroesse == 0)$schriftgroesse = 7;
|
||
if(!empty($data['Schriftgroesse']))
|
||
{
|
||
$schriftgroesse = $data['Schriftgroesse'];
|
||
if($schriftgroesse == 0)$schriftgroesse = 7;
|
||
$this->SetFontSize($schriftgroesse);
|
||
}
|
||
$fett = true;
|
||
if(isset($data['Fett']))
|
||
{
|
||
if($data['Fett'] === false || $data['Fett'] === 'false')$fett = false;
|
||
if($data['Fett'] === true || $data['Fett'] === 'true')$fett = true;
|
||
}
|
||
|
||
$this->SetFontSize($schriftgroesse_alt);
|
||
$x = $this->GetX();
|
||
$this->underline = false;
|
||
if($data['kurztext']!="")
|
||
{
|
||
|
||
if(isset($data['Kurztext_Unterstrichen']))
|
||
{
|
||
$this->underline = $data['Kurztext_Unterstrichen'];
|
||
}
|
||
$x = $this->GetX();
|
||
$abstand_links = 0;
|
||
if(isset($data['Kurztext_Abstand_Links'])){
|
||
$abstand_links = (int)$data['Kurztext_Abstand_Links'];
|
||
$this->SetX($x+$abstand_links);
|
||
}
|
||
elseif(isset($data['Abstand_Links']))
|
||
{
|
||
$abstand_links = (int)$data['Abstand_Links'];
|
||
$this->SetX($x+$abstand_links);
|
||
}
|
||
$this->MultiCell(0,4,$this->WriteHTML($data['kurztext']));
|
||
$this->SetX($x);
|
||
if(!empty($data['Abstand_Unten']))
|
||
{
|
||
$this->Ln((int)$data['Abstand_Unten']);
|
||
}else{
|
||
$this->Ln(10);
|
||
}
|
||
}
|
||
$this->SetFontSize($schriftgroesse_alt);
|
||
$this->underline = false;
|
||
}
|
||
}
|
||
break;
|
||
case "seitenumbruch":
|
||
$this->AddPage();
|
||
break;
|
||
|
||
case "gruppensumme":
|
||
case "gruppensummemitoptionalenpreisen":
|
||
case "zwischensumme":
|
||
$ret = true;
|
||
$posWidth = $this->getStyleElement("breite_position");
|
||
$amWidth = $this->getStyleElement("breite_menge");
|
||
$itemNoWidth = $this->getStyleElement("breite_nummer");
|
||
$einheitWidth = $this->getStyleElement("breite_einheit");
|
||
$descWidth = $this->getStyleElement("breite_artikel");
|
||
$taxWidth = $this->getStyleElement("breite_steuer");
|
||
|
||
if($this->doctype=="arbeitsnachweis")
|
||
{
|
||
$itemNoWidth = 20;
|
||
$taxWidth = 40;
|
||
$descWidth = 95;
|
||
}
|
||
else if($this->doctype!="lieferschein" && $this->doctype!="produktion" && $this->doctype!="preisanfrage") {
|
||
if($descWidth <=0)
|
||
$descWidth = 76;
|
||
|
||
if($taxWidth <=0)
|
||
$taxWidth = 15;
|
||
}
|
||
else
|
||
{
|
||
$itemNoWidth = 30;
|
||
$descWidth = 91;
|
||
if($taxWidth <=0)
|
||
$taxWidth = 15;
|
||
}
|
||
$priceWidth = 20;
|
||
$sumWidth = 20;
|
||
$rabattWidth = 15;
|
||
|
||
|
||
$schriftgroesse = $this->FontSizePt;
|
||
$schriftgroesse_alt = $schriftgroesse;
|
||
if($schriftgroesse == 0)$schriftgroesse = 4;
|
||
if(!empty($data['Schriftgroesse']))
|
||
{
|
||
$schriftgroesse = $data['Schriftgroesse'];
|
||
if($schriftgroesse == 0)$schriftgroesse = 4;
|
||
$this->SetFontSize($schriftgroesse);
|
||
}
|
||
$fett = true;
|
||
if(isset($data['Fett']))
|
||
{
|
||
if($data['Fett'] === false || $data['Fett'] === 'false')$fett = false;
|
||
if($data['Fett'] === true || $data['Fett'] === 'true')$fett = true;
|
||
}
|
||
$unterstrichen = false;
|
||
if(isset($data['Unterstrichen']))
|
||
{
|
||
$unterstrichen = $data['Unterstrichen'];
|
||
}
|
||
$this->underline = $unterstrichen;
|
||
|
||
switch($zwischenpositionen[$i]['postype'])
|
||
{
|
||
case "gruppensumme":
|
||
case "gruppensummemitoptionalenpreisen":
|
||
$maxpos_untergruppedrueber = (int)$this->app->DB->Select("SELECT pos FROM beleg_zwischenpositionen WHERE doctype='".$this->doctype."' AND doctypeid='".$this->doctypeid."' AND pos < '$pos' AND postype='gruppe' ORDER by pos DESC LIMIT 1");
|
||
|
||
if($this->doctype=="angebot")
|
||
{
|
||
$subwhere = " AND (explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))";
|
||
if($zwischenpositionen[$i]['postype'] !== 'gruppensummemitoptionalenpreisen'){
|
||
$subwhere = ' AND optional!=1 '.$subwhere;
|
||
}
|
||
$zwischenpositionen[$i]['postype'] = 'gruppensumme';
|
||
}
|
||
if($this->doctype=="bestellung")
|
||
{
|
||
$summe = $this->formatMoney($this->app->DB->Select("SELECT SUM(preis*menge) FROM ".$this->doctype."_position WHERE ".$this->doctype."='".$this->doctypeid."' AND sort <='$pos' AND sort >'$maxpos_untergruppedrueber' $subwhere"));
|
||
}else{
|
||
$anzeigesteuerbelege = $this->app->DB->Select("SELECT anzeigesteuerbelege FROM projekt WHERE id = ".$projekt);
|
||
if(
|
||
(
|
||
(
|
||
$this->anrede=="firma" ||
|
||
$this->app->erp->AnzeigeBelegNetto($this->anrede,$projekt,$this->table,$this->id) ||
|
||
$this->doctype=="bestellung" ||
|
||
$this->getStyleElement("immernettorechnungen",$projekt)=="1" ||
|
||
$anzeigesteuerbelege =='1'
|
||
) &&
|
||
$this->getStyleElement("immerbruttorechnungen",$projekt)!="1") ||
|
||
$this->ust_befreit
|
||
) {
|
||
$summe = $this->formatMoney($this->app->DB->Select("SELECT SUM((preis-(preis/100*rabatt))*menge) FROM " . $this->doctype . "_position ap WHERE " . $this->doctype . "='" . $this->doctypeid . "' AND sort <='$pos' AND sort >'$maxpos_untergruppedrueber' $subwhere"));
|
||
}else{
|
||
$summe = $this->formatMoney($this->app->DB->Select("SELECT SUM((preis-(preis/100*rabatt))*menge)*
|
||
(1 + if(ifnull(steuersatz,-1) < 0,if(umsatzsteuer = 'befreit',0,if(umsatzsteuer = 'ermaessigt',$umsatzsteuerermaessigt,$umsatzsteuernormal)),steuersatz
|
||
)/100) FROM " . $this->doctype . "_position ap WHERE " . $this->doctype . "='" . $this->doctypeid . "' AND sort <='$pos' AND sort >'$maxpos_untergruppedrueber' $subwhere"));
|
||
}
|
||
}
|
||
break;
|
||
default:
|
||
//zwischensumme
|
||
if($this->doctype=="angebot")
|
||
{
|
||
$subwhere = " AND optional!=1 AND (explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))";
|
||
}
|
||
if($this->doctype=="bestellung")
|
||
{
|
||
$summe = $this->formatMoney($this->app->DB->Select("SELECT SUM(preis*menge) FROM ".$this->doctype."_position WHERE ".$this->doctype."='".$this->doctypeid."' AND sort <='$pos' $subwhere"));
|
||
}else{
|
||
if((($this->anrede=="firma" || $this->app->erp->AnzeigeBelegNetto($this->anrede,$projekt,$this->table,$this->id) || $this->doctype=="bestellung" || $this->getStyleElement("immernettorechnungen",$projekt)=="1")
|
||
&& $this->getStyleElement("immerbruttorechnungen",$projekt)!="1") || $this->ust_befreit ) {
|
||
$summe = $this->formatMoney($this->app->DB->Select("SELECT SUM((preis-(preis/100*rabatt))*menge) FROM " . $this->doctype . "_position ap WHERE " . $this->doctype . "='" . $this->doctypeid . "' AND sort <='$pos' $subwhere"));
|
||
}else{
|
||
$summe = $this->formatMoney($this->app->DB->Select("SELECT SUM((preis-(preis/100*rabatt))*menge)*
|
||
(1 + if(ifnull(steuersatz,-1) < 0,if(umsatzsteuer = 'befreit',0,if(umsatzsteuer = 'ermaessigt',$umsatzsteuerermaessigt,$umsatzsteuernormal)),steuersatz
|
||
)/100) FROM " . $this->doctype . "_position ap WHERE " . $this->doctype . "='" . $this->doctypeid . "' AND sort <='$pos' $subwhere"));
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
|
||
$beschriftung_zeile = ucfirst($zwischenpositionen[$i]['postype']);
|
||
|
||
if($data['name']=="")
|
||
$html = ($fett?"<b>":"").$beschriftung_zeile.($fett?"</b>":"");
|
||
else
|
||
$html = ($fett?"<b>":"").$data['name'].($fett?"</b>":"");
|
||
if(!empty($data['Abstand_Oben']))
|
||
{
|
||
$this->Ln((int)$data['Abstand_Oben']);
|
||
}else{
|
||
$this->Ln(0);
|
||
}
|
||
$x = $this->GetX();
|
||
|
||
if(isset($data['Abstand_Links']) && $data['Abstand_Links'] > 0)
|
||
{
|
||
$abstand_links = (int)$data['Abstand_Links'];
|
||
$this->SetX($x+$abstand_links);
|
||
}else{
|
||
$abstand_links = $posWidth +$itemNoWidth;
|
||
}
|
||
|
||
$this->SetX($x+$abstand_links);
|
||
$this->Cell($descWidth,4,$this->WriteHTML($html));
|
||
$this->SetX($x+$abstand_links+$descWidth);
|
||
//$this->SetX($x);
|
||
|
||
$rahmen_links = false;
|
||
$rahmen_rechts = false;
|
||
$rahmen_oben = false;
|
||
$rahmen_unten = false;
|
||
if(isset($data['Rahmen_Links']))
|
||
{
|
||
$rahmen_links = $data['Rahmen_Links'];
|
||
}
|
||
if(isset($data['Rahmen_Rechts']))
|
||
{
|
||
$rahmen_rechts = $data['Rahmen_Rechts'];
|
||
}
|
||
if(isset($data['Rahmen_Oben']))
|
||
{
|
||
$rahmen_oben = $data['Rahmen_Oben'];
|
||
}
|
||
if(isset($data['Rahmen_Unten']))
|
||
{
|
||
$rahmen_unten = $data['Rahmen_Unten'];
|
||
}
|
||
$rahmen = '';
|
||
if($rahmen_links)$rahmen .= 'L';
|
||
if($rahmen_rechts)$rahmen .= 'R';
|
||
if($rahmen_oben)$rahmen .= 'T';
|
||
if($rahmen_unten)$rahmen .= 'B';
|
||
$ausrichtung = 'R';
|
||
if(isset($data['Text_Ausrichtung']))
|
||
{
|
||
$ausrichtung = $data['Text_Ausrichtung'];
|
||
}
|
||
$this->Cell($priceWidth+$amWidth+$taxWidth+$priceWidth,4,$summe,$rahmen,0,$ausrichtung);
|
||
if(!empty($data['Abstand_Unten']))
|
||
{
|
||
$this->Ln((int)$data['Abstand_Unten']);
|
||
}else{
|
||
$this->Ln(10);
|
||
}
|
||
$this->SetFontSize($schriftgroesse_alt);
|
||
$this->underline = false;
|
||
break;
|
||
}
|
||
}
|
||
return $ret;
|
||
}
|
||
|
||
|
||
/*
|
||
totals (
|
||
totalArticles - Summe aller Artikelpreise
|
||
modeOfDispatch - Versandart
|
||
priceOfDispatch - Versandkosten
|
||
modeOfPayment - Zahlungsweise
|
||
priceOfPayment - Kosten der Zahlungsweise
|
||
total = totalArticles + priceOfDispatch + priceOfPayment
|
||
totalTaxV - Summe voller Steuersatz
|
||
totalTaxR - Summe reduzierter Steuersatz
|
||
)
|
||
*/
|
||
public function renderTotals() {
|
||
|
||
if($this->doctype === 'angebot' && $this->app->DB->Select("SELECT gesamtsummeausblenden FROM angebot WHERE id = '".$this->doctypeid."'")){
|
||
$this->Ln(8);
|
||
return '';
|
||
}
|
||
|
||
if($this->doctype === 'inventur' && $this->app->DB->Select("SELECT noprice FROM inventur WHERE id = '".$this->id."'")){
|
||
$this->Ln(8);
|
||
return '';
|
||
}
|
||
|
||
$this->SetY($this->GetY()+1);
|
||
|
||
$differenz_wegen_abstand = $this->getStyleElement('abstand_gesamtsumme_lr');
|
||
|
||
if($this->doctype!='lieferschein' && $this->doctype!='arbeitsnachweis' && $this->doctype!='preisanfrage') {
|
||
//$this->Line(110, $this->GetY(), 190, $this->GetY());
|
||
$this->Ln(1);
|
||
$this->SetFont($this->GetFont(),'',$this->getStyleElement('schriftgroesse_gesamt'));
|
||
$this->Cell($differenz_wegen_abstand,2,'',0);
|
||
if($this->getStyleElement('kleinunternehmer')!='1' && $this->doctype!='zahlungsavis'){
|
||
$nettoText = $this->app->erp->Beschriftung('dokument_gesamtnetto');
|
||
$nettoAmount = $this->formatMoney(round((double)$this->totals['totalArticles'], 2), 2).' '.$this->waehrung;
|
||
$doctype = $this->doctype;
|
||
$doctypeid = !empty($this->doctypeid)?$this->doctypeid: $this->id;
|
||
$this->app->erp->RunHook('class_briefpapier_render_netto', 4, $doctype, $doctypeid, $nettoText, $nettoAmount);
|
||
$this->Cell(30,5,$nettoText,0,0,'L');
|
||
$this->Cell(40,5,$nettoAmount,0,'L','R');
|
||
} else {
|
||
//kleinunzernehmer
|
||
$this->Cell(30,5,'',0,0,'L');
|
||
$this->Cell(40,5,'',0,'L','R');
|
||
}
|
||
$this->Ln();
|
||
|
||
if(isset($this->totals['modeOfDispatch'])) {
|
||
$versand = 'Versand: '.$this->totals['modeOfDispatch'];
|
||
}
|
||
else {
|
||
$versand = 'Versandkosten: ';
|
||
}
|
||
if(isset($this->totals['priceOfDispatch'])) {
|
||
$this->Cell($differenz_wegen_abstand,2,'',0);
|
||
$this->Cell(30,5,$versand,0,'L','L');
|
||
$this->Cell(40,5,$this->formatMoney((double)$this->totals['priceOfDispatch'], 2).' '.$this->waehrung,0,'L','R');
|
||
}
|
||
//$this->Ln();
|
||
|
||
if(isset($this->totals['priceOfPayment']) && $this->totals['priceOfPayment']!='0.00'){
|
||
$this->Cell($differenz_wegen_abstand,2,'',0);
|
||
$this->Cell(30,5,$this->totals['modeOfPayment'],0,'L','L');
|
||
$this->Cell(40,5,$this->formatMoney((double)$this->totals['priceOfPayment'], 2).' '.$this->waehrung,0,'L','R');
|
||
$this->Ln();
|
||
}
|
||
|
||
$this->SetY($this->GetY());
|
||
$this->SetFont($this->GetFont(),'',$this->getStyleElement("schriftgroesse_gesamt_steuer"));
|
||
|
||
|
||
if(isset($this->totals['totalTaxV']) && $this->totals['totalTaxV']!="0.00"){
|
||
$this->Cell($differenz_wegen_abstand,1,'',0);
|
||
|
||
if($this->getStyleElement('kleinunternehmer')!='1'){
|
||
if(!empty($this->doctype) && !empty($this->id) && is_numeric($this->id)){
|
||
$projekt = $this->app->DB->Select('SELECT projekt FROM `' . $this->doctype . '` WHERE id = ' . $this->id);
|
||
$adresse = $this->app->DB->Select('SELECT adresse FROM `' . $this->doctype . '` WHERE id = ' . $this->id);
|
||
}else{
|
||
$projekt = 0;
|
||
$adresse = 0;
|
||
}
|
||
|
||
if($this->app->erp->AnzeigeBelegNettoAdresse($this->anrede, $this->doctype, $projekt, $adresse,$this->id))
|
||
//if(($this->anrede=="firma" || $this->app->erp->AnzeigeBelegNetto($this->anrede,$projekt) || $this->doctype=="bestellung" || $this->getStyleElement("immernettorechnungen",$projekt)=="1")
|
||
// && $this->getStyleElement("immerbruttorechnungen",$projekt)!="1")
|
||
{
|
||
$this->Cell(30,3,$this->app->erp->Beschriftung('dokument_zzglmwst').' '.$this->app->erp->GetSteuersatzNormal(false,$this->id,$this->table).' %',0,'L','L'); //1
|
||
}
|
||
else {
|
||
$this->Cell(30,3,$this->app->erp->Beschriftung('dokument_inklmwst').' '.$this->app->erp->GetSteuersatzNormal(false,$this->id,$this->table).' %',0,'L','L');
|
||
}
|
||
$this->Cell(40,3,$this->formatMoney((double)$this->totals['totalTaxV'], 2).' '.$this->waehrung,0,'L','R');
|
||
} else {
|
||
//kleinunternehmer
|
||
$this->Cell(30,3,'',0,'L','L');
|
||
$this->Cell(40,3,'',0,'L','R');
|
||
}
|
||
$this->Ln();
|
||
}
|
||
$projekt = $this->projekt;
|
||
$adresse = $this->app->DB->Select("SELECT adresse FROM ".($this->table?$this->table:$this->doctype)." WHERE id = '".$this->id."' LIMIT 1");
|
||
if(!empty($this->totals['totalTaxR']) && $this->totals['totalTaxR']!='0.00'){
|
||
$this->Cell($differenz_wegen_abstand,1,'',0);
|
||
|
||
if($this->getStyleElement('kleinunternehmer')!='1'){
|
||
|
||
if($this->app->erp->AnzeigeBelegNettoAdresse($this->anrede, $this->doctype, $projekt, $adresse,$this->id))
|
||
//if(($this->anrede=="firma" || $this->app->erp->AnzeigeBelegNetto($this->anrede,$projekt) || $this->doctype=="bestellung" || $this->getStyleElement("immernettorechnungen",$projekt)=="1")
|
||
// && $this->getStyleElement("immerbruttorechnungen",$projekt)!="1")
|
||
{
|
||
$this->Cell(30,3,$this->app->erp->Beschriftung('dokument_zzglmwst').' '.$this->app->erp->GetSteuersatzErmaessigt(false,$this->id,$this->table).' %',0,'L','L'); //1
|
||
}
|
||
else {
|
||
$this->Cell(30,3,$this->app->erp->Beschriftung('dokument_inklmwst').' '.$this->app->erp->GetSteuersatzErmaessigt(false,$this->id,$this->table).' %',0,'L','L');
|
||
}
|
||
|
||
$this->Cell(40,3,$this->formatMoney(round((double)$this->totals['totalTaxR'],2), 2).' '.$this->waehrung,0,'L','R');
|
||
} else {
|
||
//kleinunternehmer
|
||
$this->Cell(30,3,'',0,'L','L');
|
||
$this->Cell(40,3,"",0,'L','R');
|
||
}
|
||
|
||
$this->Ln();
|
||
}
|
||
|
||
if(!empty($this->totals['summen']))
|
||
{
|
||
ksort($this->totals['summen'], SORT_NUMERIC);
|
||
foreach($this->totals['summen'] as $k => $value)
|
||
{
|
||
if($value == 0)
|
||
{
|
||
continue;
|
||
}
|
||
$this->Cell($differenz_wegen_abstand,1,'',0);
|
||
|
||
if($this->getStyleElement('kleinunternehmer')!='1'){
|
||
if($this->app->erp->AnzeigeBelegNettoAdresse($this->anrede, $this->doctype, $projekt, $adresse,$this->id))
|
||
//if(($this->anrede=="firma" || $this->app->erp->AnzeigeBelegNetto($this->anrede,$projekt) || $this->doctype=="bestellung" || $this->getStyleElement("immernettorechnungen",$projekt)=="1")
|
||
// && $this->getStyleElement("immerbruttorechnungen",$projekt)!="1")
|
||
{
|
||
$this->Cell(30,3,$this->app->erp->Beschriftung('dokument_zzglmwst').' '.$k.' %',0,'L','L'); //1
|
||
}else {
|
||
//$this->Cell(30,3,$this->app->erp->Beschriftung('dokument_inklmwst').' '.$k.' %',0,'L','L'); 09.12.2018 ab heute auskommentiert wegen 829087
|
||
$this->Cell(30,3,$this->app->erp->Beschriftung('dokument_zzglmwst').' '.$k.' %',0,'L','L');
|
||
}
|
||
|
||
$this->Cell(40,3,$this->formatMoney(round($value,2), 2).' '.$this->waehrung,0,'L','R');
|
||
} else {
|
||
//kleinunternehmer
|
||
$this->Cell(30,3,'',0,'L','L');
|
||
$this->Cell(40,3,"",0,'L','R');
|
||
}
|
||
|
||
$this->Ln();
|
||
|
||
}
|
||
|
||
}
|
||
|
||
if(!isset($this->totals['totalTaxR']) && !isset($this->totals['totalTaxV']) && !isset($this->totals['summen']) && $this->doctype!="zahlungsavis")
|
||
{
|
||
$this->Cell($differenz_wegen_abstand,3,'',0);
|
||
|
||
if($this->getStyleElement('kleinunternehmer')!='1')
|
||
{
|
||
if($this->app->erp->AnzeigeBelegNettoAdresse($this->anrede, $this->doctype, $projekt, $adresse,$this->id))
|
||
//if(($this->anrede=="firma" || $this->app->erp->AnzeigeBelegNetto($this->anrede,$projekt) || $this->doctype=="bestellung" || $this->getStyleElement("immernettorechnungen",$projekt)=="1")
|
||
// && $this->getStyleElement("immerbruttorechnungen",$projekt)!="1")
|
||
{
|
||
if(!($this->ust_befreit==3 && $this->getStyleElement('steuerfrei_inland_ausblenden')=='1')) //steuerfrei inland
|
||
{
|
||
$this->Cell(30, 3, $this->app->erp->Beschriftung('dokument_zzglmwst') . ' 0.00 %', 0, 'L', 'L'); //1
|
||
}
|
||
}
|
||
else {
|
||
if(!($this->ust_befreit==3 && $this->getStyleElement('steuerfrei_inland_ausblenden')=='1')) //steuerfrei inland
|
||
{
|
||
$this->Cell(30, 3, $this->app->erp->Beschriftung('dokument_inklmwst') . ' 0.00 %', 0, 'L', 'L');
|
||
}
|
||
}
|
||
|
||
if(!($this->ust_befreit==3 && $this->getStyleElement('steuerfrei_inland_ausblenden')=='1')) //steuerfrei inland
|
||
{
|
||
$this->Cell(40, 3, '0,00 ' . $this->waehrung, 0, 'L', 'R');
|
||
}
|
||
} else {
|
||
//kleinunternehmer
|
||
$this->Cell(30,3,'',0,'L','L');
|
||
$this->Cell(40,3,'',0,'L','R');
|
||
}
|
||
$this->Ln();
|
||
}
|
||
$this->SetY($this->GetY()+2);
|
||
//$this->Line(110, $this->GetY(), 190,$this->GetY());
|
||
}
|
||
|
||
$this->SetFont($this->GetFont(),'B',$this->getStyleElement('schriftgroesse_gesamt'));
|
||
$this->Cell($differenz_wegen_abstand,5,'',0);
|
||
if($this->doctype=='offer'){
|
||
$this->Cell(30, 5, $this->app->erp->Beschriftung('dokument_gesamt_total'), 0, 'L', 'L');
|
||
}
|
||
elseif($this->doctype=='creditnote'){
|
||
$this->Cell(30, 5, $this->app->erp->Beschriftung('dokument_gesamt_total'), 0, 'L', 'L');
|
||
}
|
||
else if($this->doctype=='arbeitsnachweis'){
|
||
$this->Cell(30, 5, $this->app->erp->Beschriftung('dokument_gesamt_total'), 0, 'L', 'L');
|
||
}
|
||
else if($this->doctype=='zahlungsavis'){
|
||
$this->Cell(30, 5, $this->app->erp->Beschriftung('dokument_gesamt_total'), 0, 'L', 'L');
|
||
}
|
||
else{
|
||
$this->Cell(30, 5, $this->app->erp->Beschriftung('dokument_gesamt_total'), 0, 'L', 'L');
|
||
}
|
||
|
||
if($this->doctype=='arbeitsnachweis'){
|
||
$this->Cell(40, 5, $this->totals['total'] . ' ', 0, 'L', 'R');
|
||
}
|
||
else {
|
||
if($this->getStyleElement('kleinunternehmer')!='1'){
|
||
$this->Cell(40, 5, $this->formatMoney(round((double)$this->totals['total'], 2), 2) . ' ' . $this->waehrung, 0, 'L', 'R');
|
||
}
|
||
else{
|
||
$this->Cell(40, 5, $this->formatMoney(round((double)$this->totals['totalArticles'], 2), 2) . ' ' . $this->waehrung, 0, 'L', 'R');
|
||
}
|
||
}
|
||
|
||
$this->Ln();
|
||
if($this->getStyleElement('briefpapier_ohnedoppelstrich')!='1')
|
||
{
|
||
$this->Line($differenz_wegen_abstand+5, $this->GetY(), 210-$this->getStyleElement('abstand_seitenrandrechts'),$this->GetY());
|
||
$this->Line($differenz_wegen_abstand+5, $this->GetY()+1, 210-$this->getStyleElement('abstand_seitenrandrechts'),$this->GetY()+1);
|
||
}
|
||
|
||
$this->SetY($this->GetY()+10);
|
||
}
|
||
|
||
function displayAnhaenge($output='D')
|
||
{
|
||
SuperFPDF::__construct('P','mm','A4');
|
||
$this->seite_von_sichtbar = 1;
|
||
|
||
|
||
|
||
// if($this->getStyleElement("schriftart")!="")
|
||
// $this->SetFont($this->getStyleElement("schriftart"));
|
||
|
||
if($this->getStyleElement('schriftart')!='' && $this->getStyleElement('schriftart')!='Arial' &&
|
||
$this->getStyleElement('schriftart')!='Courier' && $this->getStyleElement('schriftart')!='Helvetica'
|
||
&& $this->getStyleElement('schriftart')!='Times' && $this->getStyleElement('schriftart')!='Arial'){
|
||
$this->AddFont($this->getStyleElement('schriftart'),'',strtolower($this->getStyleElement('schriftart')).'.php');
|
||
$this->AddFont($this->getStyleElement('schriftart'),'I',strtolower($this->getStyleElement('schriftart')).'.php');
|
||
$this->AddFont($this->getStyleElement('schriftart'),'B',strtolower($this->getStyleElement('schriftart')).'.php');
|
||
}
|
||
if(!empty($this->addpdf) && is_array($this->addpdf))
|
||
{
|
||
|
||
foreach($this->addpdf as $addpdf)
|
||
{
|
||
|
||
$filename = $addpdf;
|
||
|
||
$pn = $this->setSourceFile($filename);
|
||
//$this->AddPage();
|
||
//$this->SetXY(0,0);
|
||
for($i = 1; $i <= $pn ; $i++)
|
||
{
|
||
$fn =& $this->current_filename;
|
||
$mediabox = $this->parsers[$fn]->getPageMediaBox($i);
|
||
//$this->app->erp->LogFile(addslashes(json_encode($mediabox)));
|
||
if($i >= 1)
|
||
{
|
||
if(isset($mediabox['w']) && (float)$mediabox['w'] > 210.1 )
|
||
{
|
||
$this->AddPage('L');
|
||
} else {
|
||
$this->AddPage();
|
||
}
|
||
$this->SetXY(0,0);
|
||
}
|
||
$tplidx = $this->ImportPage($i);
|
||
$this->useTemplate($tplidx);
|
||
}
|
||
}
|
||
}
|
||
$this->filename = $this->app->erp->Dateinamen($this->filename);
|
||
$this->Output($this->filename,$output);
|
||
exit;
|
||
}
|
||
|
||
/**
|
||
* @param float $value
|
||
* @param int|null $decimals
|
||
*
|
||
* @return string
|
||
*/
|
||
protected function formatMoney($value, $decimals = null)
|
||
{
|
||
$decimals = $decimals !== null ? (int)$decimals : $this->anzahlkomma;
|
||
$currency = $this->waehrung;
|
||
return $this->app->erp->formatMoney($value, $currency,$decimals);
|
||
}
|
||
}
|