* * 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; }