* Copyright (C) 2015-2024 Frédéric France * Copyright (C) 2016 Juanjo Menent * Copyright (C) 2020 Andreu Bisquerra Gaya * Copyright (C) 2024 MDW * Copyright (C) 2024 Abbes Bahfir * * 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 htdocs/admin/receiptprinter.php * \ingroup printing * \brief Page to setup receipt printer */ // Load Dolibarr environment require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/receiptprinter.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/dolreceiptprinter.class.php'; // Load translation files required by the page $langs->loadLangs(array("admin", "receiptprinter")); if (!$user->admin) { accessforbidden(); } $action = GETPOST('action', 'aZ09'); $mode = GETPOST('mode', 'alpha'); $printername = GETPOST('printername', 'alpha'); $printerid = GETPOSTINT('printerid'); $parameter = GETPOST('parameter', 'alpha'); $template = GETPOST('template', 'alphanohtml'); $templatename = GETPOST('templatename', 'alpha'); $templateid = GETPOSTINT('templateid'); $printer = new dolReceiptPrinter($db); $hookmanager->initHooks(array('receiptPrinter', 'globalcard')); if (!$mode) { $mode = 'config'; } // used in library escpos maybe useful if php doesn't support gzdecode if (!function_exists('gzdecode')) { /** * Gzdecode * * @param string $data data to deflate * @return string data deflated * @phan-suppress PhanRedefineFunctionInternal */ function gzdecode($data) { return gzinflate(substr($data, 10, -8)); } } /* * Action */ if ($action == 'addprinter' && $user->admin) { $error = 0; if (empty($printername)) { $error++; setEventMessages($langs->trans("PrinterNameEmpty"), null, 'errors'); } if (empty($parameter)) { setEventMessages($langs->trans("PrinterParameterEmpty"), null, 'warnings'); } if (!$error) { $db->begin(); $result = $printer->addPrinter($printername, GETPOSTINT('printertypeid'), GETPOSTINT('printerprofileid'), $parameter); if ($result > 0) { $error++; } if (!$error) { $db->commit(); setEventMessages($langs->trans("PrinterAdded", $printername), null); } else { $db->rollback(); dol_print_error($db); } } $action = ''; } if ($action == 'deleteprinter' && $user->admin) { $error = 0; if (empty($printerid)) { $error++; setEventMessages($langs->trans("PrinterIdEmpty"), null, 'errors'); } if (!$error) { $db->begin(); $result = $printer->deletePrinter($printerid); if ($result > 0) { $error++; } if (!$error) { $db->commit(); setEventMessages($langs->trans("PrinterDeleted", $printername), null); } else { $db->rollback(); dol_print_error($db); } } $action = ''; } if ($action == 'updateprinter' && $user->admin) { $error = 0; if (empty($printerid)) { $error++; setEventMessages($langs->trans("PrinterIdEmpty"), null, 'errors'); } if (!$error) { $db->begin(); $result = $printer->updatePrinter($printername, GETPOSTINT('printertypeid'), GETPOSTINT('printerprofileid'), $parameter, $printerid); if ($result > 0) { $error++; } if (!$error) { $db->commit(); setEventMessages($langs->trans("PrinterUpdated", $printername), null); } else { $db->rollback(); dol_print_error($db); } } $action = ''; } if ($action == 'testprinter' && $user->admin) { $error = 0; if (empty($printerid)) { $error++; setEventMessages($langs->trans("PrinterIdEmpty"), null, 'errors'); } if (!$error) { // test $ret = $printer->sendTestToPrinter($printerid); if ($ret == 0) { setEventMessages($langs->trans("TestSentToPrinter", $printername), null); } else { setEventMessages($printer->error, $printer->errors, 'errors'); } } $action = ''; } if ($action == 'testprinter2' && $user->admin) { $error = 0; if (empty($printerid)) { $error++; setEventMessages($langs->trans("PrinterIdEmpty"), null, 'errors'); } if (!$error) { // test $ret = $printer->sendTestToPrinter($printerid, 1); if ($ret == 0) { setEventMessages($langs->trans("TestSentToPrinter", $printername), null); } else { setEventMessages($printer->error, $printer->errors, 'errors'); } } $action = ''; } if ($action == 'testtemplate' && $user->admin) { $error = 0; // if (empty($printerid)) { // $error++; // setEventMessages($langs->trans("PrinterIdEmpty"), null, 'errors'); // } // if (! $error) { // test require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; $object = new Facture($db); $object->initAsSpecimen(); //$object->fetch(18); //var_dump($object->lines); $ret = $printer->sendToPrinter($object, $templateid, 1); if ($ret == 0) { setEventMessages($langs->trans("TestTemplateToPrinter", $printername), null); } else { setEventMessages($printer->error, $printer->errors, 'errors'); } //} $action = ''; } if ($action == 'updatetemplate' && $user->admin) { $error = 0; if (empty($templateid)) { $error++; setEventMessages($langs->trans("TemplateIdEmpty"), null, 'errors'); } if (!$error) { $db->begin(); $result = $printer->updateTemplate($templatename, $template, $templateid); if ($result > 0) { $error++; } if (!$error) { $db->commit(); setEventMessages($langs->trans("TemplateUpdated", $templatename), null); } else { $db->rollback(); dol_print_error($db); } } $action = ''; } if ($action == 'addtemplate' && $user->admin) { $error = 0; if (empty($templatename)) { $error++; setEventMessages($langs->trans("TemplateNameEmpty"), null, 'errors'); } if (!$error) { $db->begin(); $result = $printer->addTemplate($templatename, $template); if ($result > 0) { $error++; } if (!$error) { $db->commit(); setEventMessages($langs->trans("TemplateAdded", $templatename), null); } else { $db->rollback(); dol_print_error($db); } } $action = ''; } if ($action == 'deletetemplate' && $user->admin) { $error = 0; if (empty($templateid)) { $error++; setEventMessages($langs->trans("TemplateIdEmpty"), null, 'errors'); } if (!$error) { $db->begin(); $result = $printer->deleteTemplate($templateid); if ($result > 0) { $error++; } if (!$error) { $db->commit(); setEventMessages($langs->trans("TemplateDeleted", $templatename), null); } else { $db->rollback(); dol_print_error($db); } } $action = ''; } /* * View */ $form = new Form($db); llxHeader('', $langs->trans("ReceiptPrinterSetup"), '', '', 0, 0, '', '', '', 'mod-admin page-receiptprinter'); $linkback = ''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans("ReceiptPrinterSetup"), $linkback, 'title_setup'); $head = receiptprinteradmin_prepare_head($mode); // mode = config if ($mode == 'config' && $user->admin) { print '
'; print ''; if ($action != 'editprinter') { print ''; } else { print ''; } print dol_get_fiche_head($head, $mode, $langs->trans("ModuleSetup"), -1, 'technic'); //print info_admin($langs->trans("ThisFeatureIsForESCPOSPrintersOnly")); print load_fiche_titre($langs->trans("ReceiptPrinterDesc"), '', '')."\n"; print '
'; // You can use div-table-responsive-no-min if you don't need reserved height for your table print ''."\n"; print ''; print ''; print ''; print ''; print ''; print ''; print "\n"; $ret = $printer->listprinters(); $nbofprinters = count($printer->listprinters); if ($action != 'editprinter') { print ''; print ''; $ret = $printer->selectTypePrinter(); print ''; $ret = $printer->selectProfilePrinter(); print ''; print ''; print ''; print ''; } if ($ret > 0) { setEventMessages($printer->error, $printer->errors, 'errors'); } else { for ($line = 0; $line < $nbofprinters; $line++) { print ''; if ($action == 'editprinter' && $printer->listprinters[$line]['rowid'] == $printerid) { print ''; print ''; $ret = $printer->selectTypePrinter($printer->listprinters[$line]['fk_type']); print ''; $ret = $printer->selectProfilePrinter($printer->listprinters[$line]['fk_profile']); print ''; print ''; print ''; print ''; } else { print ''; print ''; print ''; print ''; // edit icon print ''; print ''; } } } print '
'.$langs->trans("Name").''.$langs->trans("Type").''; $htmltext = $langs->trans("PROFILE_DEFAULT").' = '.$langs->trans("PROFILE_DEFAULT_HELP").'
'; $htmltext .= $langs->trans("PROFILE_SIMPLE").' = '.$langs->trans("PROFILE_SIMPLE_HELP").'
'; $htmltext .= $langs->trans("PROFILE_EPOSTEP").' = '.$langs->trans("PROFILE_EPOSTEP_HELP").'
'; $htmltext .= $langs->trans("PROFILE_P822D").' = '.$langs->trans("PROFILE_P822D_HELP").'
'; $htmltext .= $langs->trans("PROFILE_STAR").' = '.$langs->trans("PROFILE_STAR_HELP").'
'; print $form->textwithpicto($langs->trans("Profile"), $htmltext); print '
'.$langs->trans("Parameters").'
'.$printer->resprint.''.$printer->profileresprint.''; if ($action != 'editprinter') { print '
'; } print '
'.$printer->resprint.''.$printer->profileresprint.''; print $form->buttonsSaveCancel("Save", ''); print '
'.$printer->listprinters[$line]['name'].''.$langs->trans($printer->listprinters[$line]['fk_type_name']).''.$langs->trans($printer->listprinters[$line]['fk_profile_name']).''.$printer->listprinters[$line]['parameter'].''; print ''; print img_picto($langs->trans("Edit"), 'edit', 'class="paddingright"'); print ''; // delete icon print ''; print img_picto($langs->trans("Delete"), 'delete', 'class="paddingright"'); print ''; // test icon print ''; print img_picto($langs->trans("TestPrinterDesc"), 'printer', 'class="paddingright paddingleft"').'TXT'; print ''; // test icon print ''; print img_picto($langs->trans("TestPrinterDesc2"), 'printer', 'class="paddingright paddingleft"').'IMG'; print ''; print '
'; print '
'; print dol_get_fiche_end(); print '
'; print '
'; print ''.$langs->trans("ReceiptPrinterTypeDesc").'...

'."\n"; print '
'; // You can use div-table-responsive-no-min if you don't need reserved height for your table print ''."\n"; print ''; print ''; print ''; print ''; print ''; print '
'.$langs->trans("CONNECTOR_DUMMY").''.$langs->trans("CONNECTOR_DUMMY_HELP").'
'.$form->textwithpicto($langs->trans("CONNECTOR_NETWORK_PRINT"), $langs->trans("FromServerPointOfView")).''.$langs->trans("CONNECTOR_NETWORK_PRINT_HELP").'
'.$form->textwithpicto($langs->trans("CONNECTOR_FILE_PRINT"), $langs->trans("FromServerPointOfView")).''.$langs->trans("CONNECTOR_FILE_PRINT_HELP").'
'.$form->textwithpicto($langs->trans("CONNECTOR_WINDOWS_PRINT"), $langs->trans("FromServerPointOfView")).''.$langs->trans("CONNECTOR_WINDOWS_PRINT_HELP").'
'.$form->textwithpicto($langs->trans("CONNECTOR_CUPS_PRINT"), $langs->trans("FromServerPointOfView")).''.$langs->trans("CONNECTOR_CUPS_PRINT_HELP").'
'; print '
'; print '
'; } // mode = template if ($mode == 'template' && $user->admin) { print dol_get_fiche_head($head, $mode, $langs->trans("ModuleSetup"), -1, 'technic'); //print info_admin($langs->trans("ThisFeatureIsForESCPOSPrintersOnly")); print '
'; print '
'; print ''; if ($action != 'edittemplate') { print ''; } else { print ''; } print '
'; // You can use div-table-responsive-no-min if you don't need reserved height for your table print ''."\n"; print ''; print ''; print ''; print ''; print "\n"; $ret = $printer->listPrintersTemplates(); //print '
'.print_r($printer->listprinterstemplates, true).'
'; if ($ret > 0) { setEventMessages($printer->error, $printer->errors, 'errors'); } else { $max = count($printer->listprinterstemplates); for ($line = 0; $line < $max; $line++) { print ''; if (!is_array($printer->listprinterstemplates[$line])) { continue; } if ($action == 'edittemplate' && !empty($printer->listprinterstemplates[$line]) && !empty($printer->listprinterstemplates[$line]['rowid']) && $printer->listprinterstemplates[$line]['rowid'] == $templateid) { print ''; print ''; print ''; print ''; } else { print ''; print ''; // edit icon print ''; } print ''; } } if ($action != 'edittemplate') { print ''; print ''; print ''; print ''; print ''; } print '
'.$langs->trans("Name").''.$langs->trans("Template").'
'; print ''; print ''; print $form->buttonsSaveCancel("Save", ''); print ''.($printer->listprinterstemplates[$line]['name'] ?? '').''.dol_htmlentitiesbr($printer->listprinterstemplates[$line]['template'] ?? '').''; print img_picto($langs->trans("Edit"), 'edit'); print ''; // delete icon print ''; print img_picto($langs->trans("Delete"), 'delete'); print ''; // test icon print ''; print img_picto($langs->trans("TestPrinterTemplate"), 'printer'); print '
'; print ''; print ''; print ''; print ''; print '
'; print '
'; print '
'; print dol_get_fiche_end(); print '
'; print '
'; // You can use div-table-responsive-no-min if you don't need reserved height for your table print ''."\n"; print ''; print ''; print ''; print "\n"; $langs->loadLangs(array("bills", "companies")); foreach ($printer->tags as $key => $val) { print ''; print ''; print ''; } $reshook = $hookmanager->executeHooks('listReceiptPrinterTags', array(), $printer, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) { setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); } print '
'.$langs->trans("Tag").''.$langs->trans("Description").'
{'.$key.'}'.$langs->trans($val).'
'; print '
'; } // End of page llxFooter(); $db->close();