*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
/**
* \file epcqr/lib/epcqr.lib.php
* \ingroup epcqr
* \brief Library files with common functions for Epcqr
*/
/**
* Prepare admin pages header
*
* @return array
*/
function epcqrAdminPrepareHead()
{
global $langs, $conf;
// global $db;
// $extrafields = new ExtraFields($db);
// $extrafields->fetch_name_optionals_label('myobject');
$langs->load("epcqr@epcqr");
$h = 0;
$head = array();
$head[$h][0] = dol_buildpath("/epcqr/admin/setup.php", 1);
$head[$h][1] = $langs->trans("Settings");
$head[$h][2] = 'settings';
$h++;
/*
$head[$h][0] = dol_buildpath("/epcqr/admin/myobject_extrafields.php", 1);
$head[$h][1] = $langs->trans("ExtraFields");
$nbExtrafields = (isset($extrafields->attributes['myobject']['label']) && is_countable($extrafields->attributes['myobject']['label'])) ? count($extrafields->attributes['myobject']['label']) : 0;
if ($nbExtrafields > 0) {
$head[$h][1] .= '' . $nbExtrafields . '';
}
$head[$h][2] = 'myobject_extrafields';
$h++;
$head[$h][0] = dol_buildpath("/epcqr/admin/myobjectline_extrafields.php", 1);
$head[$h][1] = $langs->trans("ExtraFieldsLines");
$nbExtrafields = (isset($extrafields->attributes['myobjectline']['label']) && is_countable($extrafields->attributes['myobjectline']['label'])) ? count($extrafields->attributes['myobject']['label']) : 0;
if ($nbExtrafields > 0) {
$head[$h][1] .= '' . $nbExtrafields . '';
}
$head[$h][2] = 'myobject_extrafieldsline';
$h++;
*/
$head[$h][0] = dol_buildpath("/epcqr/admin/about.php", 1);
$head[$h][1] = $langs->trans("About");
$head[$h][2] = 'about';
$h++;
// Show more tabs from modules
// Entries must be declared in modules descriptor with line
//$this->tabs = array(
// 'entity:+tabname:Title:@epcqr:/epcqr/mypage.php?id=__ID__'
//); // to add new tab
//$this->tabs = array(
// 'entity:-tabname:Title:@epcqr:/epcqr/mypage.php?id=__ID__'
//); // to remove a tab
complete_head_from_modules($conf, $langs, null, $head, $h, 'epcqr@epcqr');
complete_head_from_modules($conf, $langs, null, $head, $h, 'epcqr@epcqr', 'remove');
return $head;
}
/**
* Generiert QR-Code für Rechnung und speichert Pfad im Extrafeld
*
* @param Facture $invoice Rechnungsobjekt
* @param DoliDB $db Database handler
* @return bool true bei Erfolg, false bei Fehler
*/
function epcqr_generateQRCodeForInvoice($invoice, $db)
{
global $conf;
dol_syslog("EPCQR: START generateQRCodeForInvoice für Rechnung ".$invoice->ref, LOG_DEBUG);
// QRCodeGenerator-Klasse laden
require_once __DIR__.'/qrcode.class.php';
$qrGen = new QRCodeGenerator($db);
// Bankverbindung aus Konfiguration laden
// TODO: Diese Werte sollten aus der Modul-Konfiguration kommen
$accountHolder = getDolGlobalString('EPCQR_ACCOUNT_HOLDER', 'Eduard Wisch');
$iban = getDolGlobalString('EPCQR_IBAN', 'DE70217625500013438147');
$bic = getDolGlobalString('EPCQR_BIC', 'GENODEF1HUM');
// Betrag und Referenz aus Rechnung
$amount = price2num($invoice->total_ttc, 'MT');
$reference = $invoice->ref;
// QR-Code generieren
$qrCodePath = $qrGen->generateEPCQRCode($accountHolder, $iban, $bic, $amount, $reference);
if ($qrCodePath === false) {
dol_syslog("EPCQR: Fehler beim Generieren des QR-Codes", LOG_ERR);
return false;
}
// Extrafelder aktualisieren
// qrcodepath: Pfad zur lokalen QR-Code-Datei (für ODT-Integration)
$invoice->array_options['options_qrcodepath'] = $qrCodePath;
$invoice->insertExtraFields();
// qrcode: HTML für Anzeige (Kompatibilität mit alter Version)
$qrCodeUrl = DOL_URL_ROOT.'/viewimage.php?modulepart=epcqr&file='.urlencode(basename(dirname($qrCodePath)).'/'.basename($qrCodePath));
$invoice->array_options['options_qrcode'] = "
";
$invoice->insertExtraFields();
// qrcodepfad: URL zum QR-Code (Kompatibilität mit alter Version)
$invoice->array_options['options_qrcodepfad'] = $qrCodeUrl;
$invoice->insertExtraFields();
dol_syslog("EPCQR: QR-Code erfolgreich generiert: ".$qrCodePath, LOG_INFO);
return true;
}
/**
* Hook für ODT-Generierung: Fügt Bilder nach der Generierung ein
*
* @param string $odfFilePath Pfad zur ODT-Datei
* @param CommonObject $object Dolibarr-Objekt
* @return bool true bei Erfolg, false bei Fehler
*/
function epcqr_processODTImages($odfFilePath, $object)
{
dol_syslog("EPCQR: START processODTImages für ".$odfFilePath, LOG_DEBUG);
// Substitutionsfunktion laden
require_once __DIR__.'/../core/substitutions/functions_epcqr.lib.php';
// Bilddaten sammeln
$imageData = array();
// QR-Code
if (isset($object->array_options['options_qrcodepath'])) {
$qrCodePath = $object->array_options['options_qrcodepath'];
if (!empty($qrCodePath) && file_exists($qrCodePath)) {
$imageData['qrcode'] = $qrCodePath;
dol_syslog("EPCQR: QR-Code gefunden: ".$qrCodePath, LOG_DEBUG);
}
}
// Weitere Bilder (alle Extrafelder die auf _imagepath enden)
if (!empty($object->array_options)) {
foreach ($object->array_options as $key => $value) {
if (preg_match('/^options_(.+)_imagepath$/', $key, $matches)) {
$fieldname = $matches[1];
if (!empty($value) && file_exists($value)) {
$imageData[$fieldname] = $value;
dol_syslog("EPCQR: Bild gefunden für ".$fieldname.": ".$value, LOG_DEBUG);
}
}
}
}
// Keine Bilder? Dann nichts zu tun
if (empty($imageData)) {
dol_syslog("EPCQR: Keine Bilder zum Einfügen gefunden", LOG_DEBUG);
return true;
}
// Bilder in ODT einfügen
$result = epcqr_insertImagesIntoODT($odfFilePath, $imageData);
if ($result) {
dol_syslog("EPCQR: Bilder erfolgreich in ODT eingefügt", LOG_INFO);
} else {
dol_syslog("EPCQR: Fehler beim Einfügen der Bilder in ODT", LOG_ERR);
}
return $result;
}