Merge branch 'xmlrechnung'

This commit is contained in:
OpenXE 2024-12-05 16:10:44 +01:00
commit fc3477b35d
5 changed files with 318 additions and 246 deletions

View File

@ -6844,10 +6844,7 @@ r.land as land, p.abkuerzung as projekt, r.zahlungsweise as zahlungsweise,
as fehlt, as fehlt,
if(r.status = 'storniert' AND r.teilstorno = 1,'TEILSTORNO',UPPER(r.status)) as status if(r.status = 'storniert' AND r.teilstorno = 1,'TEILSTORNO',UPPER(r.status)) as status
".(!empty($zusatzcols)?','.implode(', ',$zusatzcols):'').", ".(!empty($zusatzcols)?','.implode(', ',$zusatzcols):'').",
IF(r.xmlrechnung, ".$this->GetRechnungFileDownloadLinkIconSQL().",
CONCAT('<a href=\"index.php?module=rechnung&action=xml&id=',r.id,'\"><img src=\"themes/".$this->app->Conf->WFconf['defaulttheme']."/images/xml.svg\" border=\"0\">'),
CONCAT('<a href=\"index.php?module=rechnung&action=pdf&id=',r.id,'\"><img src=\"themes/".$this->app->Conf->WFconf['defaulttheme']."/images/pdf.svg\" border=\"0\">')
),
r.id r.id
FROM rechnung r LEFT JOIN projekt p ON p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id LEFT JOIN auftrag au ON au.id = r.auftragid "; FROM rechnung r LEFT JOIN projekt p ON p.id=r.projekt LEFT JOIN adresse adr ON r.adresse=adr.id LEFT JOIN auftrag au ON au.id = r.auftragid ";
if(isset($parameter['artikel']) && !empty($parameter['artikel'])) { if(isset($parameter['artikel']) && !empty($parameter['artikel'])) {
@ -15941,4 +15938,24 @@ function IframeDialog($width, $height, $src = "") {
return 'convert(cast(convert('.$field.' using latin1) as binary) using utf8)'; return 'convert(cast(convert('.$field.' using latin1) as binary) using utf8)';
//return $field.' COLLATE utf8_general_ci'; ersetzt Original //return $field.' COLLATE utf8_general_ci'; ersetzt Original
} }
public function GetRechnungFileDownloadLinkIconSQL($tablename = 'r') {
return(
"IF(".$tablename.".xmlrechnung,
CONCAT('<a href=\"index.php?module=rechnung&action=xml&id=',".$tablename.".id,'\"><img src=\"themes/".$this->app->Conf->WFconf['defaulttheme']."/images/xml.svg\" border=\"0\">'),
CONCAT('<a href=\"index.php?module=rechnung&action=pdf&id=',".$tablename.".id,'\"><img src=\"themes/".$this->app->Conf->WFconf['defaulttheme']."/images/pdf.svg\" border=\"0\">')
)"
);
}
public function GetRechnungFileDownloadLinkIcon($id) {
$xmlrechnung = $this->app->DB->SelectRow("SELECT belegnr, xmlrechnung FROM rechnung WHERE id = '".$id."' LIMIT 1");
if ($xmlrechnung['belegnr'] == '') {
return('');
} else if ($xmlrechnung['xmlrechnung']) {
return("<a href=\"index.php?module=rechnung&action=xml&id=%value%\"><img border=\"0\" src=\"./themes/new/images/xml.svg\" title=\"XML\"></a>");
} else {
return("<a href=\"index.php?module=rechnung&action=pdf&id=%value%\"><img border=\"0\" src=\"./themes/new/images/pdf.svg\" title=\"PDF\"></a>");
}
}
} }

View File

@ -2199,6 +2199,18 @@ public function NavigationHooks(&$menu)
return false; return false;
} }
// Rechnung special treatment because of XML
function RechnungArchivieren($id) {
$sql = "SELECT xmlrechnung FROM rechnung WHERE id = '".$id."' LIMIT 1";
$xmlrechnung = $this->app->DB->Select($sql);
if ($xmlrechnung) {
$rechnungsmodul = $this->app->loadModule('rechnung', false);
return($rechnungsmodul->RechnungArchiviereXML($id));
} else {
$this->PDFArchivieren('rechnung',$id,true);
}
}
// @refactor in Location Klasse // @refactor in Location Klasse
function UrlOrigin($s, $use_forwarded_host=false) function UrlOrigin($s, $use_forwarded_host=false)
{ {
@ -3267,7 +3279,7 @@ function LieferscheinEinlagern($id,$grund="Lieferschein Einlagern", $lpiids = nu
); );
$this->app->erp->ANABREGSNeuberechnen($invoice['id'], 'rechnung'); $this->app->erp->ANABREGSNeuberechnen($invoice['id'], 'rechnung');
if($invoice['schreibschutz']) { if($invoice['schreibschutz']) {
$this->app->erp->PDFArchivieren('rechunng', $invoice['id'], true); $this->app->erp->RechnungArchivieren($invoice['id']);
} }
} }
} }
@ -15234,20 +15246,21 @@ function Gegenkonto($ust_befreit,$ustid='', $doctype = '', $doctypeId = 0)
} }
$rechnungarr = $this->app->DB->SelectRow( $rechnungarr = $this->app->DB->SelectRow(
"SELECT adresse, email, name,belegnr,projekt,sprache,schreibschutz,zuarchivieren "SELECT adresse, email, name,belegnr,projekt,sprache,schreibschutz,zuarchivieren,xmlrechnung
FROM rechnung WHERE id='$id' LIMIT 1" FROM rechnung WHERE id='$id' LIMIT 1"
); );
if(empty($rechnungarr)) { if(empty($rechnungarr)) {
return; return;
} }
if(!empty($rechnungarr['schreibschutz']) && !empty($rechnungarr['zuarchivieren'])) { if(!empty($rechnungarr['schreibschutz']) && !empty($rechnungarr['zuarchivieren'])) {
$this->app->erp->PDFArchivieren('rechnung', $id, true); $this->app->erp->RechnungArchivieren($id);
} }
$adresse = $rechnungarr['adresse']; $adresse = $rechnungarr['adresse'];
$to = $rechnungarr['email']; $to = $rechnungarr['email'];
$to_name = $rechnungarr['name']; $to_name = $rechnungarr['name'];
$belegnr = $rechnungarr['belegnr']; $belegnr = $rechnungarr['belegnr'];
$projekt = $rechnungarr['projekt']; $projekt = $rechnungarr['projekt'];
$xmlrechnung = $rechnungarr['xmlrechnung'];
$sprache = $rechnungarr['sprache']; $sprache = $rechnungarr['sprache'];
if($sprache=='' && $adresse > 0) { if($sprache=='' && $adresse > 0) {
@ -15272,6 +15285,8 @@ function Gegenkonto($ust_befreit,$ustid='', $doctype = '', $doctypeId = 0)
$betreff = $this->ParseUserVars('rechnung',$id,$betreff); // 19.01.2018 eingefuegt BW $betreff = $this->ParseUserVars('rechnung',$id,$betreff); // 19.01.2018 eingefuegt BW
if($id > 0) if($id > 0)
{ {
if (!$xmlrechnung) {
$this->app->erp->BriefpapierHintergrunddisable = false; $this->app->erp->BriefpapierHintergrunddisable = false;
if(class_exists('RechnungPDFCustom')) if(class_exists('RechnungPDFCustom'))
{ {
@ -15285,8 +15300,12 @@ function Gegenkonto($ust_befreit,$ustid='', $doctype = '', $doctypeId = 0)
if(!$Brief->DocumentArchiviert()) { if(!$Brief->DocumentArchiviert()) {
$Brief->ArchiviereDocument(true, true); $Brief->ArchiviereDocument(true, true);
} }
$md5arr[] = @md5_file($arrtmpfile[(!empty($arrtmpfile)?count($arrtmpfile):0)-1]); $md5arr[] = @md5_file($arrtmpfile[(!empty($arrtmpfile)?count($arrtmpfile):0)-1]);
} else {
$arrtmpfile = Array();
$md5arr = Array();
}
// anhaenge automatisch mitversenden // anhaenge automatisch mitversenden
$resultdateien = $this->app->DB->SelectArr("SELECT datei FROM datei_stichwoerter WHERE objekt LIKE 'Rechnung' AND parameter='$id'"); $resultdateien = $this->app->DB->SelectArr("SELECT datei FROM datei_stichwoerter WHERE objekt LIKE 'Rechnung' AND parameter='$id'");
$cResultdateien = !empty($resultdateien)?count($resultdateien):0; $cResultdateien = !empty($resultdateien)?count($resultdateien):0;
@ -23477,6 +23496,15 @@ function ChargenMHDAuslagern($artikel, $menge, $lagerplatztyp, $lpid,$typ,$wert,
if($typ=="rechnung") if($typ=="rechnung")
{ {
// sende // sende
$xmlrechnug = $this->app->DB->Select("SELECT xmlrechnung FROM rechnung WHERE id ='".$id."' LIMIT 1");
if ($xmlrechnung) {
$xmlrechnungresult = $this->app->erp->GetXMLRechnung($id);
if ($xmlrechnungresult['success']) {
$tmpfile = $xmlrechnungresult['xml'];
} else {
throw new exception("XML Rechnung fehlgeschlagen!");
}
} else {
$this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
if(class_exists('RechnungPDFCustom')) if(class_exists('RechnungPDFCustom'))
{ {
@ -23524,7 +23552,7 @@ function ChargenMHDAuslagern($artikel, $menge, $lagerplatztyp, $lpid,$typ,$wert,
} }
$tmpfile = $Brief->displayTMP(); $tmpfile = $Brief->displayTMP();
} }
}
//$Brief->ArchiviereDocument(); //$Brief->ArchiviereDocument();
} }
@ -29219,7 +29247,6 @@ function Firmendaten($field,$projekt="")
function SetXMLRechnung($id) function SetXMLRechnung($id)
{ {
/** @var Preisanfrage $obj */
$obj = $this->app->erp->LoadModul('rechnung'); $obj = $this->app->erp->LoadModul('rechnung');
if(!empty($obj) && method_exists($obj,'SetXMLRechnung')) { if(!empty($obj) && method_exists($obj,'SetXMLRechnung')) {
return $obj->SetXMLRechnung($id); return $obj->SetXMLRechnung($id);
@ -29227,6 +29254,15 @@ function Firmendaten($field,$projekt="")
return 0; return 0;
} }
function GetXMLRechnung($id)
{
$obj = $this->app->erp->LoadModul('rechnung');
if(!empty($obj) && method_exists($obj,'RechnungSmarty')) {
return $obj->RechnungSmarty(id: $id, returnvalue: true);
}
return 0;
}
function BelegFreigabe($beleg,$id) function BelegFreigabe($beleg,$id)
{ {
if($id <= 0 || empty($beleg)) { if($id <= 0 || empty($beleg)) {
@ -33043,7 +33079,6 @@ function Firmendaten($field,$projekt="")
} }
} }
function DeleteBestellung($id) function DeleteBestellung($id)
{ {
/** @var Bestellung $obj */ /** @var Bestellung $obj */
@ -33054,7 +33089,6 @@ function Firmendaten($field,$projekt="")
} }
} }
function CreateRechnung($adresse="") function CreateRechnung($adresse="")
{ {
/** @var Rechnung $obj */ /** @var Rechnung $obj */
@ -33064,7 +33098,6 @@ function Firmendaten($field,$projekt="")
} }
} }
public function GetStandardWaehrung($projekt=0) public function GetStandardWaehrung($projekt=0)
{ {
if(is_array($projekt) && isset($projekt['eigenesteuer']) && isset($projekt['waehrung'])) { if(is_array($projekt) && isset($projekt['eigenesteuer']) && isset($projekt['waehrung'])) {

View File

@ -1640,6 +1640,7 @@ class Auftrag extends GenAuftrag
* *
* @return string * @return string
*/ */
/* XENTRAL Legacy
public function AuftragTrackingTabelle($id) public function AuftragTrackingTabelle($id)
{ {
$table = new EasyTable($this->app); $table = new EasyTable($this->app);
@ -1676,6 +1677,7 @@ class Auftrag extends GenAuftrag
return $result; return $result;
} }
*/
function AuftragPDFfromArchiv() function AuftragPDFfromArchiv()
{ {
@ -2117,26 +2119,28 @@ class Auftrag extends GenAuftrag
/* rechnungen */ /* rechnungen */
$link_zur_rechnung = "CONCAT('<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"',if(r.status='storniert',' title=\"Rechnung storniert\"><s>','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert','</s>',''),'</a>&nbsp;',".$this->app->YUI->GetRechnungFileDownloadLinkIconSQL().",'&nbsp; <a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" title=\"Rechnung bearbeiten\" border=\"0\"></a>')";
$sammelrechnungcheck = $this->app->DB->Select("SELECT * FROM sammelrechnung_position LIMIT 1"); $sammelrechnungcheck = $this->app->DB->Select("SELECT * FROM sammelrechnung_position LIMIT 1");
if($sammelrechnungcheck) { if($sammelrechnungcheck) {
$rechnung = $this->app->DB->SelectPairs( $rechnung = $this->app->DB->SelectPairs(
"SELECT "SELECT
r.id, CONCAT('<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"',if(r.status='storniert',' title=\"Rechnung storniert\"><s>','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert','</s>',''),'</a>&nbsp;<a href=\"index.php?module=rechnung&action=pdf&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/pdf.svg\" title=\"Rechnung PDF\" border=\"0\"></a>&nbsp; r.id,
<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" title=\"Rechnung bearbeiten\" border=\"0\"></a>') as rechnung ".$link_zur_rechnung." as rechnung
FROM rechnung r FROM rechnung r
WHERE r.auftragid='$id' WHERE r.auftragid='$id'
union union
SELECT SELECT
r.id,CONCAT('<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"',if(r.status='storniert',' title=\"Rechnung storniert\"><s>','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert','</s>',''),'</a>&nbsp;<a href=\"index.php?module=rechnung&action=pdf&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/pdf.svg\" title=\"Rechnung PDF\" border=\"0\"></a>&nbsp; r.id,
<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" title=\"Rechnung bearbeiten\" border=\"0\"></a>') as rechnung ".$link_zur_rechnung." as rechnung
FROM rechnung r FROM rechnung r
INNER JOIN sammelrechnung_position s ON r.id = s.rechnung INNER JOIN sammelrechnung_position s ON r.id = s.rechnung
INNER JOIN auftrag_position p ON s.auftrag_position_id = p.id INNER JOIN auftrag_position p ON s.auftrag_position_id = p.id
WHERE p.auftrag='$id' WHERE p.auftrag='$id'
union union
SELECT SELECT
r.id,CONCAT('<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"',if(r.status='storniert',' title=\"Rechnung storniert\"><s>','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert','</s>',''),'</a>&nbsp;<a href=\"index.php?module=rechnung&action=pdf&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/pdf.svg\" title=\"Rechnung PDF\" border=\"0\"></a>&nbsp; r.id,
<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" title=\"Rechnung bearbeiten\" border=\"0\"></a>') as rechnung ".$link_zur_rechnung." as rechnung
FROM rechnung r FROM rechnung r
INNER JOIN sammelrechnung_position s ON r.id = s.rechnung INNER JOIN sammelrechnung_position s ON r.id = s.rechnung
INNER JOIN lieferschein_position lp ON lp.id = s.lieferschein_position_id INNER JOIN lieferschein_position lp ON lp.id = s.lieferschein_position_id
@ -2158,9 +2162,8 @@ class Auftrag extends GenAuftrag
else{ else{
$rechnung = $this->app->DB->SelectPairs( $rechnung = $this->app->DB->SelectPairs(
"SELECT "SELECT
r.id, CONCAT('<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"',if(r.status='storniert',' title=\"Rechnung storniert\"><s>','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert','</s>',''),'</a>&nbsp;<a href=\"index.php?module=rechnung&action=pdf&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/pdf.svg\" title=\"Rechnung PDF\" border=\"0\"></a>&nbsp; r.id,
<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" title=\"Rechnung bearbeiten\" border=\"0\"></a>' ".$link_zur_rechnung." as rechnung
) as rechnung
FROM rechnung r FROM rechnung r
WHERE r.auftragid='$id'" WHERE r.auftragid='$id'"
); );
@ -2176,9 +2179,8 @@ class Auftrag extends GenAuftrag
if(!$rechnung) { if(!$rechnung) {
$rechnung = $this->app->DB->SelectPairs( $rechnung = $this->app->DB->SelectPairs(
"SELECT "SELECT
r.id, CONCAT('<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"',if(r.status='storniert',' title=\"Rechnung storniert\"><s>','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert','</s>',''),'</a>&nbsp;<a href=\"index.php?module=rechnung&action=pdf&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/pdf.svg\" title=\"Rechnung PDF\" border=\"0\"></a>&nbsp; r.id,
<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" title=\"Rechnung bearbeiten\" border=\"0\"></a>' ".$link_zur_rechnung." as rechnung
) as rechnung
FROM rechnung r FROM rechnung r
INNER JOIN auftrag a ON a.rechnungid = r.id INNER JOIN auftrag a ON a.rechnungid = r.id
WHERE a.id='$id' WHERE a.id='$id'
@ -5071,7 +5073,7 @@ class Auftrag extends GenAuftrag
foreach($lieferscheine as $deliveryNoteId => $deliveryNoteNumber) { foreach($lieferscheine as $deliveryNoteId => $deliveryNoteNumber) {
$optional .= "&nbsp;<input type=\"button\" value=\"LS " $optional .= "&nbsp;<input type=\"button\" value=\"LS "
.$deliveryNoteNumber .$deliveryNoteNumber
."\" onclick=\"window.location.href='index.php?module=lieferschein&action=pdf&id=" ."\" onclick=\"window.location.href='index.php?module=lieferschein&action=edit&id="
.$deliveryNoteId."'\">"; .$deliveryNoteId."'\">";
} }
} }
@ -5084,7 +5086,7 @@ class Auftrag extends GenAuftrag
foreach($rechnungen as $invoiceId => $invoiceNumber) { foreach($rechnungen as $invoiceId => $invoiceNumber) {
$optional .= "&nbsp;<input type=\"button\" value=\"RE " $optional .= "&nbsp;<input type=\"button\" value=\"RE "
.$invoiceNumber .$invoiceNumber
."\" onclick=\"window.location.href='index.php?module=rechnung&action=pdf&id=" ."\" onclick=\"window.location.href='index.php?module=rechnung&action=edit&id="
.$invoiceId."'\">"; .$invoiceId."'\">";
} }
} }
@ -5260,11 +5262,13 @@ class Auftrag extends GenAuftrag
$this->app->Tpl->Add('AUFTRAGSDOKUMENTE',"</fieldset>"); $this->app->Tpl->Add('AUFTRAGSDOKUMENTE',"</fieldset>");
} }
/* XENTRAL Legacy
//suche alle LS zu diesem Auftrag //suche alle LS zu diesem Auftrag
if($auftragsnummer>0) { if($auftragsnummer>0) {
$trackingInfo = $this->AuftragTrackingTabelle(empty($deliveryNoteIds)?0: $id); $trackingInfo = $this->AuftragTrackingTabelle(empty($deliveryNoteIds)?0: $id);
$this->app->Tpl->Set('VERSAND', $trackingInfo); $this->app->Tpl->Set('VERSAND', $trackingInfo);
} }
*/
// UST // UST
$ust_ok = $orderRow['ust_ok'];//$this->app->DB->Select("SELECT ust_ok FROM auftrag WHERE id='$id' LIMIT 1"); $ust_ok = $orderRow['ust_ok'];//$this->app->DB->Select("SELECT ust_ok FROM auftrag WHERE id='$id' LIMIT 1");
@ -5717,7 +5721,7 @@ Die Gesamtsumme stimmt nicht mehr mit urspr&uuml;nglich festgelegten Betrag '.
$this->app->erp->ANABREGSNeuberechnen($rechnung,"rechnung"); $this->app->erp->ANABREGSNeuberechnen($rechnung,"rechnung");
$this->app->erp->rechnung_zahlstatus_berechnen($id); $this->app->erp->rechnung_zahlstatus_berechnen($id);
$this->app->erp->PDFArchivieren("rechnung",$rechnung); $this->app->erp->RechnungArchivieren($rechnung);
} }
} }
// auftrag_position geliefert_menge und geliefert anpassen // auftrag_position geliefert_menge und geliefert anpassen
@ -6129,15 +6133,12 @@ Die Gesamtsumme stimmt nicht mehr mit urspr&uuml;nglich festgelegten Betrag '.
} }
unlink($tmpfile); unlink($tmpfile);
} }
// Send the invoice as last step // Send the invoice as last step
if($autodruckrechnungstufe1mail && $rechnung > 0) if($autodruckrechnungstufe1mail && $rechnung > 0)
{ {
$this->app->erp->Rechnungsmail($rechnung); $this->app->erp->Rechnungsmail($rechnung);
} }
$this->app->erp->RunHook('auftrag_versand_ende', 1, $id); $this->app->erp->RunHook('auftrag_versand_ende', 1, $id);
// wenn per URL aufgerufen // wenn per URL aufgerufen
if($internmodus!='1') if($internmodus!='1')
{ {

View File

@ -876,22 +876,19 @@ class Lieferschein extends GenLieferschein
$this->app->Tpl->Set('AUFTRAG','-'); $this->app->Tpl->Set('AUFTRAG','-');
} }
$link_zur_rechnung = "CONCAT('<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"',if(r.status='storniert',' title=\"Rechnung storniert\"><s>','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert','</s>',''),'</a>&nbsp;',".$this->app->YUI->GetRechnungFileDownloadLinkIconSQL().",'&nbsp; <a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" title=\"Rechnung bearbeiten\" border=\"0\"></a>')";
if($auftragArr[0]['auftragid'] > 0){ if($auftragArr[0]['auftragid'] > 0){
$rechnung = $this->app->DB->SelectArr( $rechnung = $this->app->DB->SelectArr(
($auftragArr[0]['auftragid']? ($auftragArr[0]['auftragid']?
"SELECT "SELECT
CONCAT('<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\">',if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),'&nbsp;<a href=\"index.php?module=rechnung&action=pdf&id=',r.id,'\"><img src=\"./themes/new/images/pdf.svg\" title=\"Rechnung PDF\" border=\"0\"></a>&nbsp; ".$link_zur_rechnung." as rechnung FROM rechnung r WHERE r.auftragid='".$auftragArr[0]['auftragid']."' AND r.auftragid <> '0'
<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" title=\"Rechnung bearbeiten\" border=\"0\"></a>') as rechnung
FROM rechnung r WHERE r.auftragid='".$auftragArr[0]['auftragid']."' AND r.auftragid <> '0'
union union
SELECT SELECT
CONCAT('<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\">',if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),'&nbsp;<a href=\"index.php?module=rechnung&action=pdf&id=',r.id,'\"><img src=\"./themes/new/images/pdf.svg\" title=\"Rechnung PDF\" border=\"0\"></a>&nbsp; ".$link_zur_rechnung." as rechnung FROM rechnung r INNER JOIN sammelrechnung_position s ON r.id = s.rechnung INNER JOIN auftrag_position p ON s.auftrag_position_id = p.id WHERE p.auftrag='".$auftragArr[0]['auftragid']."'
<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" title=\"Rechnung bearbeiten\" border=\"0\"></a>') as rechnung
FROM rechnung r INNER JOIN sammelrechnung_position s ON r.id = s.rechnung INNER JOIN auftrag_position p ON s.auftrag_position_id = p.id WHERE p.auftrag='".$auftragArr[0]['auftragid']."'
union ":"")." union ":"")."
SELECT SELECT
CONCAT('<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\">',if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),'&nbsp;<a href=\"index.php?module=rechnung&action=pdf&id=',r.id,'\"><img src=\"./themes/new/images/pdf.svg\" title=\"Rechnung PDF\" border=\"0\"></a>&nbsp; ".$link_zur_rechnung." as rechnung
<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" title=\"Rechnung bearbeiten\" border=\"0\"></a>') as rechnung
FROM rechnung r INNER JOIN sammelrechnung_position s ON r.id = s.rechnung FROM rechnung r INNER JOIN sammelrechnung_position s ON r.id = s.rechnung
INNER JOIN lieferschein_position lp ON lp.id = s.lieferschein_position_id INNER JOIN lieferschein_position lp ON lp.id = s.lieferschein_position_id
WHERE lp.lieferschein='$id' WHERE lp.lieferschein='$id'
@ -903,14 +900,11 @@ class Lieferschein extends GenLieferschein
if($auftragArr[0]['rechnungid'] > 0){ if($auftragArr[0]['rechnungid'] > 0){
$rechnung = $this->app->DB->SelectArr("SELECT $rechnung = $this->app->DB->SelectArr("SELECT
CONCAT('<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\">',if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),'&nbsp;<a href=\"index.php?module=rechnung&action=pdf&id=',r.id,'\"><img src=\"./themes/new/images/pdf.svg\" title=\"Rechnung PDF\" border=\"0\"></a>&nbsp; ".$link_zur_rechnung." as rechnung
<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" title=\"Rechnung bearbeiten\" border=\"0\"></a>') as rechnung
FROM rechnung r WHERE r.id='".$auftragArr[0]['rechnungid']."' AND r.id <> '0' FROM rechnung r WHERE r.id='".$auftragArr[0]['rechnungid']."' AND r.id <> '0'
union union
SELECT SELECT
CONCAT('<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\">',if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),'&nbsp;<a href=\"index.php?module=rechnung&action=pdf&id=',r.id,'\"><img src=\"./themes/new/images/pdf.svg\" title=\"Rechnung PDF\" border=\"0\"></a>&nbsp; ".$link_zur_rechnung." as rechnung
<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" title=\"Rechnung bearbeiten\" border=\"0\"></a>') as rechnung
FROM rechnung r INNER JOIN sammelrechnung_position s ON r.id = s.rechnung FROM rechnung r INNER JOIN sammelrechnung_position s ON r.id = s.rechnung
INNER JOIN lieferschein_position lp ON lp.id = s.lieferschein_position_id INNER JOIN lieferschein_position lp ON lp.id = s.lieferschein_position_id
WHERE lp.lieferschein='$id' WHERE lp.lieferschein='$id'

View File

@ -76,6 +76,7 @@ class Rechnung extends GenRechnung
$this->app->ActionHandler("dateien","RechnungDateien"); $this->app->ActionHandler("dateien","RechnungDateien");
$this->app->ActionHandler("pdffromarchive","RechnungPDFfromArchiv"); $this->app->ActionHandler("pdffromarchive","RechnungPDFfromArchiv");
$this->app->ActionHandler("archivierepdf","RechnungArchivierePDF"); $this->app->ActionHandler("archivierepdf","RechnungArchivierePDF");
$this->app->ActionHandler("archivierexml","RechnungArchiviereXML");
$this->app->ActionHandler("summe","RechnungSumme"); // nur fuer rechte $this->app->ActionHandler("summe","RechnungSumme"); // nur fuer rechte
$this->app->ActionHandler("belegnredit","belegnredit"); // nur fuer rechte $this->app->ActionHandler("belegnredit","belegnredit"); // nur fuer rechte
@ -201,33 +202,61 @@ class Rechnung extends GenRechnung
$this->app->ExitXentral(); $this->app->ExitXentral();
} }
function RechnungArchiviereXML($id = null) {
if ($id === null) {
$id = (int)$this->app->Secure->GetGET('id');
$redirect = true;
}
$result = $this->RechnungSmarty(id: $id, json: false, returnvalue: true);
if ($result['success']) {
// Check for old files
$existing = false;
$existing_ids = $this->app->erp->GetDateiSubjektObjekt('rechnung','rechnung',$id);
foreach ($existing_ids as $existing_id) {
if($this->app->erp->GetDateiEndung($existing_id) == 'xml') {
$existing = true;
break;
}
}
if ($existing) {
$this->app->erp->AddDateiVersion(
id: $existing_id,
ersteller: $this->app->User->GetName(),
dateiname: $result['filename'].'.xml',
bemerkung: '',
datei: $result['xml'],
path: ""
);
} else {
$this->app->erp->CreateDateiWithStichwort(
name: $result['filename'].'.xml',
titel: $result['title'],
beschreibung: '',
nummer: '',
datei: $result['xml'],
ersteller: $this->app->User->GetName(),
subjekt: 'rechnung',
objekt: 'rechnung',
parameter: $id
);
}
} else {
throw new exception("XML Rechnung fehlgeschlagen!");
}
$this->app->DB->Update("UPDATE rechnung SET schreibschutz='1', zuarchivieren = '0' WHERE id='$id'");
if ($redirect) {
$this->app->Location->execute('index.php?module=rechnung&action=edit&id='.$id);
}
}
function RechnungArchivierePDF() function RechnungArchivierePDF()
{ {
$id = (int)$this->app->Secure->GetGET('id'); $id = (int)$this->app->Secure->GetGET('id');
$projekt = $this->app->DB->Select("SELECT projekt FROM rechnung WHERE id = '$id' LIMIT 1"); $this->app->erp->PDFArchivieren('rechnung', $id, true);
$this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
if(class_exists('RechnungPDFCustom'))
{
$Brief = new RechnungPDFCustom($this->app,$projekt);
}else{
$Brief = new RechnungPDF($this->app,$projekt);
}
$Brief->GetRechnung($id);
$tmpfile = $Brief->displayTMP();
$Brief->ArchiviereDocument(1);
unlink($tmpfile);
$this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
if(class_exists('RechnungPDFCustom'))
{
$Brief = new RechnungPDFCustom($this->app,$projekt);
}else{
$Brief = new RechnungPDF($this->app,$projekt);
}
$Brief->GetRechnung($id);
$tmpfile = $Brief->displayTMP();
$Brief->ArchiviereDocument(1);
$this->app->DB->Update("UPDATE rechnung SET schreibschutz='1' WHERE id='$id'"); $this->app->DB->Update("UPDATE rechnung SET schreibschutz='1' WHERE id='$id'");
$this->app->Location->execute('index.php?module=rechnung&action=edit&id='.$id); $this->app->Location->execute('index.php?module=rechnung&action=edit&id='.$id);
} }
@ -548,15 +577,7 @@ class Rechnung extends GenRechnung
</select>&nbsp; </select>&nbsp;
"; ";
if (!empty($rechnungarr['belegnr'])) { $downloadicon = $this->app->YUI->GetRechnungFileDownloadLinkIcon($id);
if ($rechnungarr['xmlrechnung']) {
$downloadicon = "<a href=\"index.php?module=rechnung&action=xml&id=%value%\"><img border=\"0\" src=\"./themes/new/images/xml.svg\" title=\"XML\"></a>";
} else {
$downloadicon = "<a href=\"index.php?module=rechnung&action=pdf&id=%value%\"><img border=\"0\" src=\"./themes/new/images/pdf.svg\" title=\"PDF\"></a>";
}
} else {
$downloadicon = '';
}
$menu .= $downloadicon; $menu .= $downloadicon;
@ -1234,7 +1255,7 @@ class Rechnung extends GenRechnung
$doppel = $this->app->Secure->GetGET('doppel'); $doppel = $this->app->Secure->GetGET('doppel');
$invoiceArr = $this->app->DB->SelectRow("SELECT schreibschutz, projekt, zuarchivieren FROM rechnung WHERE id='$id' LIMIT 1"); $invoiceArr = $this->app->DB->SelectRow("SELECT schreibschutz, projekt, zuarchivieren FROM rechnung WHERE id='$id' LIMIT 1");
if(!empty($invoiceArr['schreibschutz']) && !empty($invoiceArr['zuarchivieren'])) { if(!empty($invoiceArr['schreibschutz']) && !empty($invoiceArr['zuarchivieren'])) {
$this->app->erp->PDFArchivieren('rechnung', $id, true); $this->app->erp->RechnungArchivieren($id);
} }
$projekt = $invoiceArr['projekt']; $projekt = $invoiceArr['projekt'];
$schreibschutz = $invoiceArr['schreibschutz']; $schreibschutz = $invoiceArr['schreibschutz'];
@ -1259,7 +1280,7 @@ class Rechnung extends GenRechnung
// Print PHP array for SmartyXML // Print PHP array for SmartyXML
function RechnungJSON() { function RechnungJSON() {
$this->RechnungSmarty(true); $this->RechnungSmarty(json: true);
} }
function remove_html_entities_from_array(&$array) { function remove_html_entities_from_array(&$array) {
@ -1284,9 +1305,12 @@ class Rechnung extends GenRechnung
} }
} }
function RechnungSmarty($json = false) { function RechnungSmarty($id = null, $json = false, $returnvalue = false) {
if ($id === null) {
$id = $this->app->Secure->GetGET('id'); $id = $this->app->Secure->GetGET('id');
}
$result = Array(); $result = Array();
$success = true;
$result['rechnungssteller']['name'] = $this->app->erp->Firmendaten('name'); $result['rechnungssteller']['name'] = $this->app->erp->Firmendaten('name');
$result['rechnungssteller']['strasse'] = $this->app->erp->Firmendaten('strasse'); $result['rechnungssteller']['strasse'] = $this->app->erp->Firmendaten('strasse');
@ -1335,32 +1359,44 @@ class Rechnung extends GenRechnung
$this->remove_CDATA_fragments_from_array($result); $this->remove_CDATA_fragments_from_array($result);
if ($json) { if ($json) {
header('Content-type:text/plain'); $headers[] = 'Content-type:text/plain';
header('Content-Disposition: attachment;filename='.$filename.'.json'); $headers[] = 'Content-Disposition: attachment;filename='.$filename.'.json';
echo(json_encode($result,JSON_PRETTY_PRINT)); $output = json_encode($result,JSON_PRETTY_PRINT);
} else { } else {
$headers[] = 'Content-type:text/xml';
$headers[] = 'Content-Disposition: attachment;filename='.$filename.'.xml';
$template_id = $this->GetXMLSmartyTemplate($id); $template_id = $this->GetXMLSmartyTemplate($id);
if(empty($template_id)) { if(empty($template_id)) {
header('Content-type:text/xml'); $output = '<?xml version="1.0" encoding="utf-8"?>
header('Content-Disposition: attachment;filename='.$filename.'.xml');
echo('<?xml version="1.0" encoding="utf-8"?>
<note> <note>
<body>Kein Smarty Template an der Addresse hinterlegt!</body> <body>Kein Smarty Template an der Addresse hinterlegt!</body>
</note>'); </note>';
$success = false;
} else { } else {
$template = $this->app->DB->Select("SELECT template from smarty_templates WHERE id = '$template_id' LIMIT 1"); $template = $this->app->DB->Select("SELECT template from smarty_templates WHERE id = '$template_id' LIMIT 1");
$smarty = new Smarty; $smarty = new Smarty;
$directory = $this->app->erp->GetTMP().'/smarty/templates'; $directory = $this->app->erp->GetTMP().'/smarty/templates';
$smarty->setCompileDir($directory); $smarty->setCompileDir($directory);
$smarty->assign('rechnung', $result); $smarty->assign('rechnung', $output);
$html = $smarty->fetch('string:'.$template); $output = $smarty->fetch('string:'.$template);
header('Content-type:application/xml');
header('Content-Disposition: attachment;filename='.$filename.'.xml');
echo($html);
} }
} }
if ($returnvalue) {
return(Array(
'success' => $success,
'title' => 'Rechnung '.$result['kopf']['belegnr'],
'filename' => $filename,
'xml' => $output
));
} else {
foreach ($headers as $header) {
header($header);
}
echo($output);
$this->app->ExitXentral(); $this->app->ExitXentral();
} }
}
function RechnungSuche() function RechnungSuche()
{ {
@ -1732,38 +1768,6 @@ class Rechnung extends GenRechnung
$this->app->erp->CheckBearbeiter($id,'rechnung'); $this->app->erp->CheckBearbeiter($id,'rechnung');
$this->app->erp->CheckBuchhaltung($id,'rechnung'); $this->app->erp->CheckBuchhaltung($id,'rechnung');
$invoiceArr = $this->app->DB->SelectRow(
sprintf(
'SELECT zahlungsweise,zahlungszieltage,dta_datei,status,zahlungsstatus,schreibschutz FROM rechnung WHERE id= %d LIMIT 1',
(int)$id
)
);
$zahlungsweise= $invoiceArr['zahlungsweise'];
$zahlungszieltage= $invoiceArr['zahlungszieltage'];
$zahlungsstatus= $invoiceArr['zahlungsstatus'];
if($zahlungsweise==='rechnung' && $zahlungszieltage<1)
{
$this->app->Tpl->Add('MESSAGE',"<div class=\"info\">Hinweis: F&auml;lligkeit auf \"sofort\", da Zahlungsziel in Tagen auf 0 Tage gesetzt ist!</div>");
}
$status= $invoiceArr['status'];
$schreibschutz= $invoiceArr['schreibschutz'];
if($status !== 'angelegt' && $status !== 'angelegta' && $status !== 'a')
{
$Brief = new Briefpapier($this->app);
if($Brief->zuArchivieren($id, "rechnung"))
{
$this->app->Tpl->Add('MESSAGE',"<div class=\"warning\">Die Rechnung ist noch nicht archiviert! Bitte versenden oder manuell archivieren. <input type=\"button\" onclick=\"if(!confirm('Soll das Dokument archiviert werden?')) return false;else window.location.href='index.php?module=rechnung&action=archivierepdf&id=$id';\" value=\"Manuell archivieren\" /> <input type=\"button\" value=\"Dokument versenden\" onclick=\"DokumentAbschicken('rechnung',$id)\"></div>");
}elseif(!$this->app->DB->Select("SELECT versendet FROM rechnung WHERE id = '$id' LIMIT 1"))
{
$this->app->Tpl->Add('MESSAGE',"<div class=\"warning\">Die Rechnung wurde noch nicht versendet! <input type=\"button\" value=\"Dokument versenden\" onclick=\"DokumentAbschicken('rechnung',$id)\"></div>");
}
}
$this->app->erp->RechnungNeuberechnen($id); //BENE
$this->RechnungMiniDetail('MINIDETAIL',false); //BENE
$this->app->Tpl->Set('ICONMENU',$this->RechnungIconMenu($id));
$this->app->Tpl->Set('ICONMENU2',$this->RechnungIconMenu($id,2));
if($id > 0){ if($id > 0){
$rechnungarr = $this->app->DB->SelectRow("SELECT * FROM rechnung WHERE id='$id' LIMIT 1"); $rechnungarr = $this->app->DB->SelectRow("SELECT * FROM rechnung WHERE id='$id' LIMIT 1");
} }
@ -1782,11 +1786,39 @@ class Rechnung extends GenRechnung
$bonuspunkte = $rechnungarr['bonuspunkte'];//$this->app->DB->Select("SELECT bonuspunkte FROM rechnung WHERE id='$id' LIMIT 1"); $bonuspunkte = $rechnungarr['bonuspunkte'];//$this->app->DB->Select("SELECT bonuspunkte FROM rechnung WHERE id='$id' LIMIT 1");
$soll = $rechnungarr['soll'];//$this->app->DB->Select("SELECT soll FROM rechnung WHERE id='$id' LIMIT 1"); $soll = $rechnungarr['soll'];//$this->app->DB->Select("SELECT soll FROM rechnung WHERE id='$id' LIMIT 1");
$projekt = $rechnungarr['projekt']; $projekt = $rechnungarr['projekt'];
$skontosoll = $this->app->DB->Select("SELECT TRUNCATE(soll*(1-(zahlungszielskonto/100)),2) as skontosoll FROM rechnung where id = '".$id."' LIMIT 1"); $skontosoll = $this->app->DB->Select("SELECT TRUNCATE(soll*(1-(zahlungszielskonto/100)),2) as skontosoll FROM rechnung where id = '".$id."' LIMIT 1");
$xmlrechnung = $rechnungarr['xmlrechnung']; $xmlrechnung = $rechnungarr['xmlrechnung'];
$zahlungsweise= $rechnungarr['zahlungsweise'];
$zahlungszieltage= $rechnungarr['zahlungszieltage'];
$zahlungsstatus= $rechnungarr['zahlungsstatus'];
if($zahlungsweise==='rechnung' && $zahlungszieltage<1)
{
$this->app->Tpl->Add('MESSAGE',"<div class=\"info\">Hinweis: F&auml;lligkeit auf \"sofort\", da Zahlungsziel in Tagen auf 0 Tage gesetzt ist!</div>");
} }
$status= $rechnungarr['status'];
$schreibschutz= $rechnungarr['schreibschutz'];
}
if($status !== 'angelegt' && $status !== 'angelegta' && $status !== 'a')
{
$Brief = new Briefpapier($this->app);
if($Brief->zuArchivieren($id, "rechnung"))
{
if ($xmlrechnung) {
$archiviere = "archivierexml";
} else {
$archiviere = "archivierepdf";
}
$this->app->Tpl->Add('MESSAGE',"<div class=\"warning\">Die Rechnung ist noch nicht archiviert! Bitte versenden oder manuell archivieren. <input type=\"button\" onclick=\"if(!confirm('Soll das Dokument archiviert werden?')) return false;else window.location.href='index.php?module=rechnung&action=$archiviere&id=$id';\" value=\"Manuell archivieren\" /> <input type=\"button\" value=\"Dokument versenden\" onclick=\"DokumentAbschicken('rechnung',$id)\"></div>");
}elseif(!$this->app->DB->Select("SELECT versendet FROM rechnung WHERE id = '$id' LIMIT 1"))
{
$this->app->Tpl->Add('MESSAGE',"<div class=\"warning\">Die Rechnung wurde noch nicht versendet! <input type=\"button\" value=\"Dokument versenden\" onclick=\"DokumentAbschicken('rechnung',$id)\"></div>");
}
}
$this->app->erp->RechnungNeuberechnen($id); //BENE
$this->RechnungMiniDetail('MINIDETAIL',false); //BENE
$this->app->Tpl->Set('ICONMENU',$this->RechnungIconMenu($id));
$this->app->Tpl->Set('ICONMENU2',$this->RechnungIconMenu($id,2));
$this->app->Tpl->Set('PUNKTE',"<input type=\"text\" name=\"punkte\" value=\"$punkte\" size=\"10\" readonly>"); $this->app->Tpl->Set('PUNKTE',"<input type=\"text\" name=\"punkte\" value=\"$punkte\" size=\"10\" readonly>");
$this->app->Tpl->Set('BONUSPUNKTE',"<input type=\"text\" name=\"punkte\" value=\"$bonuspunkte\" size=\"10\" readonly>"); $this->app->Tpl->Set('BONUSPUNKTE',"<input type=\"text\" name=\"punkte\" value=\"$bonuspunkte\" size=\"10\" readonly>");
@ -2166,7 +2198,7 @@ class Rechnung extends GenRechnung
) )
) )
) { ) {
$this->app->erp->PDFArchivieren('rechnung', $id, true); $this->app->erp->RechnungArchivieren($id);
} }
$this->app->erp->MessageHandlerStandardForm(); $this->app->erp->MessageHandlerStandardForm();
@ -2255,18 +2287,7 @@ class Rechnung extends GenRechnung
$invoiceId $invoiceId
) )
); );
$this->app->erp->PDFArchivieren('rechnung', $invoiceId, true); $this->app->erp->RechnungArchivieren($invoiceId);
if(class_exists('RechnungPDFCustom')) {
$Brief = new RechnungPDFCustom($this->app,$projekt);
}
else {
$Brief = new RechnungPDF($this->app,$projekt);
}
$Brief->GetRechnung($invoiceId);
$tmpfile = $Brief->displayTMP();
$Brief->ArchiviereDocument();
@unlink($tmpfile);
return true; return true;
} }
@ -2307,17 +2328,20 @@ class Rechnung extends GenRechnung
implode(', ', $auswahl) implode(', ', $auswahl)
) )
); );
foreach($auswahl as $v) { foreach($auswahl as $v) {
if(!$v) { if(!$v) {
continue; continue;
} }
$xmlrechnung = $this->app->DB->Select("SELECT xmlrechnung FROM rechnung WHERE id=$v LIMIT 1");
$checkpapier = $this->app->DB->Select( $checkpapier = $this->app->DB->Select(
"SELECT a.rechnung_papier FROM rechnung AS r "SELECT a.rechnung_papier FROM rechnung AS r
LEFT JOIN adresse AS a ON r.adresse=a.id LEFT JOIN adresse AS a ON r.adresse=a.id
WHERE r.id='$v' WHERE r.id='$v'
LIMIT 1" LIMIT 1"
); );
if($checkpapier!=1 &&
if((($checkpapier !=1) || $erechnung) &&
$this->app->DB->Select( $this->app->DB->Select(
"SELECT r.id "SELECT r.id
FROM rechnung AS r FROM rechnung AS r
@ -2326,11 +2350,11 @@ class Rechnung extends GenRechnung
LIMIT 1" LIMIT 1"
) )
) { ) {
$this->app->erp->PDFArchivieren('rechnung', $v, true); $this->app->erp->RechnungArchivieren($v);
$this->app->erp->Rechnungsmail($v); $this->app->erp->Rechnungsmail($v);
} }
else if($checkpapier && $drucker) { else if($checkpapier && $drucker && !$erechnung) {
$this->app->erp->PDFArchivieren('rechnung', $v, true); $this->app->erp->RechnungArchivieren($v);
$projekt = $this->app->DB->Select( $projekt = $this->app->DB->Select(
"SELECT projekt FROM rechnung WHERE id='$v' LIMIT 1" "SELECT projekt FROM rechnung WHERE id='$v' LIMIT 1"
); );
@ -2384,12 +2408,13 @@ class Rechnung extends GenRechnung
$reArr = $this->app->DB->SelectRow( $reArr = $this->app->DB->SelectRow(
sprintf( sprintf(
"SELECT projekt,belegnr,status,usereditid,adresse, "SELECT projekt,belegnr,status,usereditid,adresse,
DATE_SUB(NOW(), INTERVAL 30 SECOND) < useredittimestamp AS `open` DATE_SUB(NOW(), INTERVAL 30 SECOND) < useredittimestamp AS `open`,
xmlrechnung
FROM rechnung WHERE id=%d LIMIT 1", FROM rechnung WHERE id=%d LIMIT 1",
$v $v
) )
); );
if($reArr['belegnr'] === '' || ($reArr['open'] && $reArr['status'] === 'freigegeben')) { if($reArr['belegnr'] === '' || $reArr['xmlrechnung'] || ($reArr['open'] && $reArr['status'] === 'freigegeben')) {
continue; continue;
} }
if($reArr['status'] === 'freigegeben') { if($reArr['status'] === 'freigegeben') {
@ -2399,7 +2424,7 @@ class Rechnung extends GenRechnung
$this->app->erp->RechnungProtokoll($v,'Rechnung gedruckt'); $this->app->erp->RechnungProtokoll($v,'Rechnung gedruckt');
$this->app->DB->Update("UPDATE rechnung SET schreibschutz=1, versendet = 1 WHERE id = '$v' LIMIT 1"); $this->app->DB->Update("UPDATE rechnung SET schreibschutz=1, versendet = 1 WHERE id = '$v' LIMIT 1");
$this->app->DB->Update("UPDATE rechnung SET status='versendet' WHERE id = '$v' AND status!='storniert' LIMIT 1"); $this->app->DB->Update("UPDATE rechnung SET status='versendet' WHERE id = '$v' AND status!='storniert' LIMIT 1");
$this->app->erp->PDFArchivieren('rechnung', $v, true); $this->app->erp->RechnungArchivieren($v);
if(class_exists('RechnungPDFCustom')) { if(class_exists('RechnungPDFCustom')) {
$Brief = new RechnungPDFCustom($this->app,$projekt); $Brief = new RechnungPDFCustom($this->app,$projekt);
} }
@ -2419,6 +2444,10 @@ class Rechnung extends GenRechnung
case 'pdf': case 'pdf':
$tmpfile = []; $tmpfile = [];
foreach($auswahl as $v) { foreach($auswahl as $v) {
$xmlrechnung = $this->app->DB->Select("SELECT xmlrechnung FROM rechnung WHERE id=$v LIMIT 1");
if ($xmlrechnung) {
continue;
}
$projekt = $this->app->DB->Select("SELECT projekt FROM rechnung WHERE id=$v LIMIT 1"); $projekt = $this->app->DB->Select("SELECT projekt FROM rechnung WHERE id=$v LIMIT 1");
if(class_exists('RechnungPDFCustom')) { if(class_exists('RechnungPDFCustom')) {
$Brief = new RechnungPDFCustom($this->app,$projekt); $Brief = new RechnungPDFCustom($this->app,$projekt);
@ -2640,8 +2669,7 @@ class Rechnung extends GenRechnung
ohne_briefpapier, ohne_briefpapier,
angelegtam, angelegtam,
usereditid, usereditid,
abweichendebezeichnung, abweichendebezeichnung
xmlrechnung
) )
VALUES ( VALUES (
'', '',
@ -2661,8 +2689,7 @@ class Rechnung extends GenRechnung
'".$ohnebriefpapier."', '".$ohnebriefpapier."',
NOW(), NOW(),
'$usereditid', '$usereditid',
'$abweichendebezeichnung', '$abweichendebezeichnung'
'$xmlrechnung'
)" )"
); );
@ -2679,8 +2706,8 @@ class Rechnung extends GenRechnung
$deliverythresholdvatid = $this->app->DB->real_escape_string($deliverythresholdvatid); $deliverythresholdvatid = $this->app->DB->real_escape_string($deliverythresholdvatid);
$this->app->DB->Update("UPDATE rechnung SET deliverythresholdvatid = '$deliverythresholdvatid' WHERE id = $id LIMIT 1"); $this->app->DB->Update("UPDATE rechnung SET deliverythresholdvatid = '$deliverythresholdvatid' WHERE id = $id LIMIT 1");
} }
$this->SetXMLRechnung($id);
$this->app->erp->SchnellFreigabe('rechnung',$id); $this->app->erp->SchnellFreigabe('rechnung',$id);
$this->app->erp->LoadSteuersaetzeWaehrung($id,'rechnung',$projekt); $this->app->erp->LoadSteuersaetzeWaehrung($id,'rechnung',$projekt);
$this->app->erp->EventAPIAdd('EventRechnungCreate',$id,'rechnung','create'); $this->app->erp->EventAPIAdd('EventRechnungCreate',$id,'rechnung','create');