dolibarr  18.0.6
terminal.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) 2008-2011 Laurent Destailleur <eldy@users.sourceforge.net>
3  * Copyright (C) 2011-2017 Juanjo Menent <jmenent@2byte.es>
4  * Copyright (C) 2021 Thibault FOUCART <support@ptibogxiv.net>
5  * Copyright (C) 2022 Alexandre Spangaro <aspangaro@open-dsi.fr>
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program. If not, see <https://www.gnu.org/licenses/>.
19  */
20 
27 // Load Dolibarr environment
28 require '../../main.inc.php'; // Load $user and permissions
29 require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
30 require_once DOL_DOCUMENT_ROOT.'/product/class/html.formproduct.class.php';
31 require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php';
32 require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
33 require_once DOL_DOCUMENT_ROOT."/core/lib/takepos.lib.php";
34 require_once DOL_DOCUMENT_ROOT.'/stripe/class/stripe.class.php';
35 
36 $terminal = GETPOST('terminal', 'int');
37 // If socid provided by ajax company selector
38 if (!empty($_REQUEST['CASHDESK_ID_THIRDPARTY'.$terminal.'_id'])) {
39  $_GET['CASHDESK_ID_THIRDPARTY'.$terminal] = GETPOST('CASHDESK_ID_THIRDPARTY'.$terminal.'_id', 'alpha');
40  $_POST['CASHDESK_ID_THIRDPARTY'.$terminal] = GETPOST('CASHDESK_ID_THIRDPARTY'.$terminal.'_id', 'alpha');
41  $_REQUEST['CASHDESK_ID_THIRDPARTY'.$terminal] = GETPOST('CASHDESK_ID_THIRDPARTY'.$terminal.'_id', 'alpha');
42 }
43 
44 // Security check
45 if (!$user->admin) {
47 }
48 
49 $langs->loadLangs(array("admin", "cashdesk", "printing", "receiptprinter"));
50 
51 global $db;
52 
53 $sql = "SELECT code, libelle as label FROM ".MAIN_DB_PREFIX."c_paiement";
54 $sql .= " WHERE entity IN (".getEntity('c_paiement').")";
55 $sql .= " AND active = 1";
56 $sql .= " ORDER BY libelle";
57 $resql = $db->query($sql);
58 $paiements = array();
59 if ($resql) {
60  while ($obj = $db->fetch_object($resql)) {
61  array_push($paiements, $obj);
62  }
63 }
64 
65 $terminaltouse = $terminal;
66 
67 
68 /*
69  * Actions
70  */
71 
72 if (GETPOST('action', 'alpha') == 'set') {
73  $db->begin();
74 
75  $res = dolibarr_set_const($db, "TAKEPOS_TERMINAL_NAME_".$terminaltouse, (!empty(GETPOST('terminalname'.$terminaltouse, 'restricthtml')) ? GETPOST('terminalname'.$terminaltouse, 'restricthtml') : $langs->trans("TerminalName", $terminaltouse)), 'chaine', 0, '', $conf->entity);
76 
77  $res = dolibarr_set_const($db, "CASHDESK_ID_THIRDPARTY".$terminaltouse, (GETPOST('socid', 'int') > 0 ? GETPOST('socid', 'int') : ''), 'chaine', 0, '', $conf->entity);
78 
79  $res = dolibarr_set_const($db, "CASHDESK_ID_BANKACCOUNT_CASH".$terminaltouse, (GETPOST('CASHDESK_ID_BANKACCOUNT_CASH'.$terminaltouse, 'alpha') > 0 ? GETPOST('CASHDESK_ID_BANKACCOUNT_CASH'.$terminaltouse, 'alpha') : ''), 'chaine', 0, '', $conf->entity);
80  $res = dolibarr_set_const($db, "CASHDESK_ID_BANKACCOUNT_CHEQUE".$terminaltouse, (GETPOST('CASHDESK_ID_BANKACCOUNT_CHEQUE'.$terminaltouse, 'alpha') > 0 ? GETPOST('CASHDESK_ID_BANKACCOUNT_CHEQUE'.$terminaltouse, 'alpha') : ''), 'chaine', 0, '', $conf->entity);
81  $res = dolibarr_set_const($db, "CASHDESK_ID_BANKACCOUNT_CB".$terminaltouse, (GETPOST('CASHDESK_ID_BANKACCOUNT_CB'.$terminaltouse, 'alpha') > 0 ? GETPOST('CASHDESK_ID_BANKACCOUNT_CB'.$terminaltouse, 'alpha') : ''), 'chaine', 0, '', $conf->entity);
82  if (isModEnabled('stripe') && !empty($conf->global->STRIPE_CARD_PRESENT)) {
83  $res = dolibarr_set_const($db, "CASHDESK_ID_BANKACCOUNT_STRIPETERMINAL".$terminaltouse, GETPOST('CASHDESK_ID_BANKACCOUNT_STRIPETERMINAL'.$terminaltouse, 'alpha'), 'chaine', 0, '', $conf->entity);
84  }
85  if (getDolGlobalInt('TAKEPOS_ENABLE_SUMUP')) {
86  $res = dolibarr_set_const($db, "CASHDESK_ID_BANKACCOUNT_SUMUP".$terminaltouse, (GETPOST('CASHDESK_ID_BANKACCOUNT_SUMUP'.$terminaltouse, 'alpha') > 0 ? GETPOST('CASHDESK_ID_BANKACCOUNT_SUMUP'.$terminaltouse, 'alpha') : ''), 'chaine', 0, '', $conf->entity);
87  }
88  foreach ($paiements as $modep) {
89  if (in_array($modep->code, array('LIQ', 'CB', 'CHQ'))) {
90  continue;
91  }
92  $name = "CASHDESK_ID_BANKACCOUNT_".$modep->code.$terminaltouse;
93  $res = dolibarr_set_const($db, $name, (GETPOST($name, 'alpha') > 0 ? GETPOST($name, 'alpha') : ''), 'chaine', 0, '', $conf->entity);
94  }
95  $res = dolibarr_set_const($db, "CASHDESK_ID_WAREHOUSE".$terminaltouse, (GETPOST('CASHDESK_ID_WAREHOUSE'.$terminaltouse, 'alpha') > 0 ? GETPOST('CASHDESK_ID_WAREHOUSE'.$terminaltouse, 'alpha') : ''), 'chaine', 0, '', $conf->entity);
96  $res = dolibarr_set_const($db, "CASHDESK_NO_DECREASE_STOCK".$terminaltouse, GETPOST('CASHDESK_NO_DECREASE_STOCK'.$terminaltouse, 'alpha'), 'chaine', 0, '', $conf->entity);
97  $res = dolibarr_set_const($db, "TAKEPOS_PRINTER_TO_USE".$terminaltouse, GETPOST('TAKEPOS_PRINTER_TO_USE'.$terminaltouse, 'alpha'), 'chaine', 0, '', $conf->entity);
98  $res = dolibarr_set_const($db, "TAKEPOS_ORDER_PRINTER1_TO_USE".$terminaltouse, GETPOST('TAKEPOS_ORDER_PRINTER1_TO_USE'.$terminaltouse, 'alpha'), 'chaine', 0, '', $conf->entity);
99  $res = dolibarr_set_const($db, "TAKEPOS_ORDER_PRINTER2_TO_USE".$terminaltouse, GETPOST('TAKEPOS_ORDER_PRINTER2_TO_USE'.$terminaltouse, 'alpha'), 'chaine', 0, '', $conf->entity);
100  $res = dolibarr_set_const($db, "TAKEPOS_ORDER_PRINTER3_TO_USE".$terminaltouse, GETPOST('TAKEPOS_ORDER_PRINTER3_TO_USE'.$terminaltouse, 'alpha'), 'chaine', 0, '', $conf->entity);
101  $res = dolibarr_set_const($db, "TAKEPOS_TEMPLATE_TO_USE_FOR_INVOICES".$terminaltouse, GETPOST('TAKEPOS_TEMPLATE_TO_USE_FOR_INVOICES'.$terminaltouse, 'alpha'), 'chaine', 0, '', $conf->entity);
102  $res = dolibarr_set_const($db, "TAKEPOS_TEMPLATE_TO_USE_FOR_ORDERS".$terminaltouse, GETPOST('TAKEPOS_TEMPLATE_TO_USE_FOR_ORDERS'.$terminaltouse, 'alpha'), 'chaine', 0, '', $conf->entity);
103 
104  $res = dolibarr_set_const($db, 'CASHDESK_READER_KEYCODE_FOR_ENTER'.$terminaltouse, (GETPOST('CASHDESK_READER_KEYCODE_FOR_ENTER'.$terminaltouse, 'int') > 0 ? GETPOST('CASHDESK_READER_KEYCODE_FOR_ENTER'.$terminaltouse, 'int') : ''), 'chaine', 0, '', $conf->entity);
105 
106  $res = dolibarr_set_const($db, "TAKEPOS_ADDON".$terminaltouse, GETPOST('TAKEPOS_ADDON'.$terminaltouse, 'alpha'), 'chaine', 0, '', $conf->entity);
107 
108  // add free text on each terminal of cash desk
109  $res = dolibarr_set_const($db, 'TAKEPOS_HEADER'.$terminaltouse, GETPOST('TAKEPOS_HEADER'.$terminaltouse, 'restricthtml'), 'chaine', 0, '', $conf->entity);
110  $res = dolibarr_set_const($db, 'TAKEPOS_FOOTER'.$terminaltouse, GETPOST('TAKEPOS_FOOTER'.$terminaltouse, 'restricthtml'), 'chaine', 0, '', $conf->entity);
111 
112  dol_syslog("admin/cashdesk: level ".GETPOST('level', 'alpha'));
113 
114  if (!($res > 0)) {
115  $error++;
116  }
117 
118  if (!$error) {
119  $db->commit();
120  setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
121  } else {
122  $db->rollback();
123  setEventMessages($langs->trans("Error"), null, 'errors');
124  }
125 }
126 
127 
128 /*
129  * View
130  */
131 
132 $form = new Form($db);
133 $formproduct = new FormProduct($db);
134 
135 llxHeader('', $langs->trans("CashDeskSetup"));
136 
137 $linkback = '<a href="'.DOL_URL_ROOT.'/admin/modules.php">'.$langs->trans("BackToModuleList").'</a>';
138 print load_fiche_titre($langs->trans("CashDeskSetup").' (TakePOS)', $linkback, 'title_setup');
140 print dol_get_fiche_head($head, 'terminal'.$terminal, 'TakePOS', -1, 'cash-register');
141 print '<br>';
142 
143 
144 // Mode
145 print '<form action="'.$_SERVER["PHP_SELF"].'?terminal='.(empty($terminal) ? 1 : $terminal).'" method="post">';
146 print '<input type="hidden" name="token" value="'.newToken().'">';
147 print '<input type="hidden" name="action" value="set">';
148 
149 print '<div class="div-table-responsive">';
150 print '<table class="noborder centpercent">';
151 print '<tr class="liste_titre">';
152 print '<td>'.$langs->trans("Parameters").'</td><td>'.$langs->trans("Value").'</td>';
153 print "</tr>\n";
154 
155 print '<tr class="oddeven"><td class="fieldrequired">'.$langs->trans("TerminalNameDesc").'</td>';
156 print '<td>';
157 print '<input type="text" name="terminalname'.$terminal.'" value="'.getDolGlobalString("TAKEPOS_TERMINAL_NAME_".$terminal, $langs->trans("TerminalName", $terminal)).'" >';
158 print '</td></tr>';
159 
160 print '<tr class="oddeven"><td class="fieldrequired">'.$langs->trans("CashDeskThirdPartyForSell").'</td>';
161 print '<td>';
162 $filter = '((s.client:IN:1,2,3) AND (s.status:=:1))';
163 print $form->select_company(getDolGlobalInt('CASHDESK_ID_THIRDPARTY'.$terminaltouse), 'socid', $filter, 1, 0, 0, array(), 0);
164 print '</td></tr>';
165 
166 $atleastonefound = 0;
167 if (isModEnabled("banque")) {
168  print '<tr class="oddeven"><td>'.$langs->trans("CashDeskBankAccountForSell").'</td>';
169  print '<td>';
170  print img_picto('', 'bank_account', 'class="pictofixedwidth"');
171  print $form->select_comptes(getDolGlobalInt('CASHDESK_ID_BANKACCOUNT_CASH'.$terminaltouse), 'CASHDESK_ID_BANKACCOUNT_CASH'.$terminaltouse, 0, "courant=2", 1, '', 0, '', 1);
172  print ' <a href="'.DOL_URL_ROOT.'/compta/bank/card.php?action=create&type=2&backtopage='.urlencode($_SERVER["PHP_SELF"].'?terminal='.$terminal).'"><span class="fa fa-plus-circle valignmiddle paddingleft" title="'.$langs->trans("NewBankAccount").'"></span></a>';
173  if (getDolGlobalInt('CASHDESK_ID_BANKACCOUNT_CASH'.$terminaltouse)) {
174  $atleastonefound++;
175  }
176  print '</td></tr>';
177  print '<tr class="oddeven"><td>'.$langs->trans("CashDeskBankAccountForCheque").'</td>';
178  print '<td>';
179  print img_picto('', 'bank_account', 'class="pictofixedwidth"');
180  print $form->select_comptes(getDolGlobalInt('CASHDESK_ID_BANKACCOUNT_CHEQUE'.$terminaltouse), 'CASHDESK_ID_BANKACCOUNT_CHEQUE'.$terminaltouse, 0, "courant=1", 1, '', 0, '', 1);
181  print ' <a href="'.DOL_URL_ROOT.'/compta/bank/card.php?action=create&type=1&backtopage='.urlencode($_SERVER["PHP_SELF"].'?terminal='.$terminal).'"><span class="fa fa-plus-circle valignmiddle paddingleft" title="'.$langs->trans("NewBankAccount").'"></span></a>';
182  if (getDolGlobalInt('CASHDESK_ID_BANKACCOUNT_CHEQUE'.$terminaltouse)) {
183  $atleastonefound++;
184  }
185  print '</td></tr>';
186  print '<tr class="oddeven"><td>'.$langs->trans("CashDeskBankAccountForCB").'</td>';
187  print '<td>';
188  print img_picto('', 'bank_account', 'class="pictofixedwidth"');
189  print $form->select_comptes(getDolGlobalInt('CASHDESK_ID_BANKACCOUNT_CB'.$terminaltouse), 'CASHDESK_ID_BANKACCOUNT_CB'.$terminaltouse, 0, "courant=1", 1, '', 0, '', 1);
190  print ' <a href="'.DOL_URL_ROOT.'/compta/bank/card.php?action=create&type=1&backtopage='.urlencode($_SERVER["PHP_SELF"].'?terminal='.$terminal).'"><span class="fa fa-plus-circle valignmiddle paddingleft" title="'.$langs->trans("NewBankAccount").'"></span></a>';
191  if (getDolGlobalInt('CASHDESK_ID_BANKACCOUNT_CB'.$terminaltouse)) {
192  $atleastonefound++;
193  }
194  print '</td></tr>';
195 
196  if (isModEnabled('stripe') && !empty($conf->global->STRIPE_CARD_PRESENT)) {
197  print '<tr class="oddeven"><td>'.$langs->trans("CashDeskBankAccountForStripeTerminal").'</td>'; // Force Stripe Terminal
198  print '<td>';
199  $service = 'StripeTest';
200  $servicestatus = 0;
201  if (!empty($conf->global->STRIPE_LIVE) && !GETPOST('forcesandbox', 'alpha')) {
202  $service = 'StripeLive';
203  $servicestatus = 1;
204  }
205  global $stripearrayofkeysbyenv;
206  $site_account = $stripearrayofkeysbyenv[$servicestatus]['secret_key'];
207  \Stripe\Stripe::setApiKey($site_account);
208  if (isModEnabled('stripe') && (empty($conf->global->STRIPE_LIVE) || GETPOST('forcesandbox', 'alpha'))) {
209  $service = 'StripeTest';
210  $servicestatus = '0';
211  dol_htmloutput_mesg($langs->trans('YouAreCurrentlyInSandboxMode', 'Stripe'), '', 'warning');
212  } else {
213  $service = 'StripeLive';
214  $servicestatus = '1';
215  }
216  $stripe = new Stripe($db);
217  $stripeacc = $stripe->getStripeAccount($service);
218  if ($stripeacc) {
219  $readers = \Stripe\Terminal\Reader::all('', array("location" => $conf->global->STRIPE_LOCATION, "stripe_account" => $stripeacc));
220  } else {
221  $readers = \Stripe\Terminal\Reader::all('', array("location" => $conf->global->STRIPE_LOCATION));
222  }
223 
224  $reader = array();
225  $reader[""] = $langs->trans("NoReader");
226  foreach ($readers as $tmpreader) {
227  $reader[$tmpreader->id] = $tmpreader->label.' ('.$tmpreader->status.')';
228  }
229  print $form->selectarray('CASHDESK_ID_BANKACCOUNT_STRIPETERMINAL'.$terminaltouse, $reader, $conf->global->{'CASHDESK_ID_BANKACCOUNT_STRIPETERMINAL'.$terminaltouse});
230  print '</td></tr>';
231  }
232 
233  if (getDolGlobalInt('TAKEPOS_ENABLE_SUMUP')) {
234  print '<tr class="oddeven"><td>'.$langs->trans("CashDeskBankAccountForSumup").'</td>';
235  print '<td>';
236  print img_picto('', 'bank_account', 'class="pictofixedwidth"');
237  print $form->select_comptes(getDolGlobalInt('CASHDESK_ID_BANKACCOUNT_SUMUP'.$terminaltouse), 'CASHDESK_ID_BANKACCOUNT_SUMUP'.$terminaltouse, 0, "courant=1", 1, '', 0, '', 1);
238  print ' <a href="'.DOL_URL_ROOT.'/compta/bank/card.php?action=create&type=1&backtopage='.urlencode($_SERVER["PHP_SELF"].'?terminal='.$terminal).'"><span class="fa fa-plus-circle valignmiddle paddingleft" title="'.$langs->trans("NewBankAccount").'"></span></a>';
239  if (getDolGlobalInt('CASHDESK_ID_BANKACCOUNT_SUMUP'.$terminaltouse)) {
240  $atleastonefound++;
241  }
242  print '</td></tr>';
243  }
244 
245  foreach ($paiements as $modep) {
246  if (in_array($modep->code, array('LIQ', 'CB', 'CHQ'))) {
247  continue; // Already managed before
248  }
249  $name = "CASHDESK_ID_BANKACCOUNT_".$modep->code.$terminaltouse;
250  print '<tr class="oddeven"><td>'.$langs->trans("CashDeskBankAccountFor").' '.$langs->trans($modep->label).'</td>';
251  print '<td>';
252  if (!empty($conf->global->$name)) {
253  $atleastonefound++;
254  }
255  $cour = preg_match('/^LIQ.*/', $modep->code) ? 2 : 1;
256  print img_picto('', 'bank_account', 'class="pictofixedwidth"');
257  print $form->select_comptes(getDolGlobalInt($name), $name, 0, "courant=".$cour, 1, '', 0, '', 1);
258  print ' <a href="'.DOL_URL_ROOT.'/compta/bank/card.php?action=create&type=1&backtopage='.urlencode($_SERVER["PHP_SELF"].'?terminal='.$terminal).'"><span class="fa fa-plus-circle valignmiddle paddingleft" title="'.$langs->trans("NewBankAccount").'"></span></a>';
259  print '</td></tr>';
260  }
261 }
262 
263 if (isModEnabled('stock')) {
264  print '<tr class="oddeven"><td>'.$langs->trans("CashDeskDoNotDecreaseStock").'</td>'; // Force warehouse (this is not a default value)
265  print '<td>';
266  if (!isModEnabled('productbatch') || getDolGlobalInt('CASHDESK_FORCE_DECREASE_STOCK')) {
267  print $form->selectyesno('CASHDESK_NO_DECREASE_STOCK'.$terminal, getDolGlobalInt('CASHDESK_NO_DECREASE_STOCK'.$terminal), 1);
268  } else {
269  if (getDolGlobalInt('CASHDESK_NO_DECREASE_STOCK'.$terminal)) {
270  $res = dolibarr_set_const($db, "CASHDESK_NO_DECREASE_STOCK".$terminal, 1, 'chaine', 0, '', $conf->entity);
271  }
272  print $langs->trans("Yes").'<br>';
273  print '<span class="opacitymedium">'.$langs->trans('StockDecreaseForPointOfSaleDisabledbyBatch').'</span>';
274  }
275  print '</td></tr>';
276 
277  $disabled = getDolGlobalString('CASHDESK_NO_DECREASE_STOCK'.$terminal);
278 
279 
280  print '<tr class="oddeven"><td>';
281  if (!$disabled) { print '<span class="fieldrequired">'; }
282  print $langs->trans("CashDeskIdWareHouse");
283  if (!$disabled) { print '</span>'; }
284  if (!getDolGlobalString('CASHDESK_ID_WAREHOUSE'.$terminal)) {
285  print img_warning($langs->trans("DisableStockChange").' - '.$langs->trans("NoWarehouseDefinedForTerminal"));
286  }
287  print '</td>'; // Force warehouse (this is not a default value)
288  print '<td class="minwidth300">';
289  if (!$disabled) {
290  print img_picto('', 'bank_account', 'class="pictofixedwidth"');
291  print $formproduct->selectWarehouses(getDolGlobalString('CASHDESK_ID_WAREHOUSE'.$terminal), 'CASHDESK_ID_WAREHOUSE'.$terminal, '', 1, $disabled, 0, '', 0, 0, array(), 'maxwidth250');
292  print ' <a href="'.DOL_URL_ROOT.'/product/stock/card.php?action=create&backtopage='.urlencode($_SERVER["PHP_SELF"].'?&terminal='.$terminal).'"><span class="fa fa-plus-circle valignmiddle"></span></a>';
293  } else {
294  print '<span class="opacitymedium">'.$langs->trans("StockDecreaseForPointOfSaleDisabled").'</span>';
295  }
296  print '</td></tr>';
297 
298  if (isModEnabled('productbatch') && !empty($conf->global->CASHDESK_FORCE_DECREASE_STOCK) && !$conf->global->{'CASHDESK_NO_DECREASE_STOCK'.$terminal}) {
299  print '<tr class="oddeven"><td>'.$langs->trans('CashDeskForceDecreaseStockLabel').'</td>';
300  print '<td>';
301  print '<span class="opacitymedium">'.$langs->trans('CashDeskForceDecreaseStockDesc').'</span>';
302  print '</td></tr>';
303  }
304 }
305 
306 if (getDolGlobalString('TAKEPOS_PRINT_METHOD') == "receiptprinter" || getDolGlobalString('TAKEPOS_PRINT_METHOD') == "takeposconnector") {
307  // Select printer to use with terminal
308  require_once DOL_DOCUMENT_ROOT.'/core/class/dolreceiptprinter.class.php';
309  $printer = new dolReceiptPrinter($db);
310  if (getDolGlobalString('TAKEPOS_PRINT_METHOD') == "receiptprinter") {
311  $printer->listprinters();
312  $printers = array();
313  foreach ($printer->listprinters as $key => $value) {
314  $printers[$value['rowid']] = $value['name'];
315  }
316  print '<tr class="oddeven"><td>'.$langs->trans("MainPrinterToUse").'</td>';
317  print '<td>';
318  print $form->selectarray('TAKEPOS_PRINTER_TO_USE'.$terminal, $printers, getDolGlobalInt('TAKEPOS_PRINTER_TO_USE'.$terminal), 1);
319  print '</td></tr>';
320  if (getDolGlobalInt('TAKEPOS_ORDER_PRINTERS')) {
321  print '<tr class="oddeven"><td>'.$langs->trans("OrderPrinterToUse").' - '.$langs->trans("Printer").' 1</td>';
322  print '<td>';
323  print $form->selectarray('TAKEPOS_ORDER_PRINTER1_TO_USE'.$terminal, $printers, getDolGlobalInt('TAKEPOS_ORDER_PRINTER1_TO_USE'.$terminal), 1);
324  print '</td></tr>';
325  print '<tr class="oddeven"><td>'.$langs->trans("OrderPrinterToUse").' - '.$langs->trans("Printer").' 2</td>';
326  print '<td>';
327  print $form->selectarray('TAKEPOS_ORDER_PRINTER2_TO_USE'.$terminal, $printers, getDolGlobalInt('TAKEPOS_ORDER_PRINTER2_TO_USE'.$terminal), 1);
328  print '</td></tr>';
329  print '<tr class="oddeven"><td>'.$langs->trans("OrderPrinterToUse").' - '.$langs->trans("Printer").' 3</td>';
330  print '<td>';
331  print $form->selectarray('TAKEPOS_ORDER_PRINTER3_TO_USE'.$terminal, $printers, getDolGlobalInt('TAKEPOS_ORDER_PRINTER3_TO_USE'.$terminal), 1);
332  print '</td></tr>';
333  }
334  }
335  $printer->listPrintersTemplates();
336  $templates = array();
337  foreach ($printer->listprinterstemplates as $key => $value) {
338  $templates[$value['rowid']] = $value['name'];
339  }
340  print '<tr class="oddeven"><td>'.$langs->trans("MainTemplateToUse").' (<a href="'.DOL_URL_ROOT.'/admin/receiptprinter.php?mode=template">'.$langs->trans("SetupReceiptTemplate").'</a>)</td>';
341  print '<td>';
342  print $form->selectarray('TAKEPOS_TEMPLATE_TO_USE_FOR_INVOICES'.$terminal, $templates, getDolGlobalInt('TAKEPOS_TEMPLATE_TO_USE_FOR_INVOICES'.$terminal), 1);
343  print '</td></tr>';
344  if (getDolGlobalInt('TAKEPOS_ORDER_PRINTERS')) {
345  print '<tr class="oddeven"><td>'.$langs->trans("OrderTemplateToUse").'</td>';
346  print '<td>';
347  print $form->selectarray('TAKEPOS_TEMPLATE_TO_USE_FOR_ORDERS'.$terminal, $templates, getDolGlobalInt('TAKEPOS_TEMPLATE_TO_USE_FOR_ORDERS'.$terminal), 1);
348  print '</td></tr>';
349  }
350 }
351 
352 print '<tr class="oddeven"><td>'.$langs->trans('CashDeskReaderKeyCodeForEnter').'</td>';
353 print '<td>';
354 print '<input type="text" class="width50" name="CASHDESK_READER_KEYCODE_FOR_ENTER'.$terminaltouse.'" value="'.getDolGlobalString('CASHDESK_READER_KEYCODE_FOR_ENTER'.$terminaltouse).'" />';
355 print '</td></tr>';
356 
357 // Numbering module
358 if (getDolGlobalString('TAKEPOS_ADDON') == "terminal") {
359  print '<tr class="oddeven"><td>';
360  print $langs->trans("BillsNumberingModule");
361  print '<td colspan="2">';
362  $array = array(0=>$langs->trans("Default"));
363  $dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
364  foreach ($dirmodels as $reldir) {
365  $dir = dol_buildpath($reldir."core/modules/facture/");
366  if (is_dir($dir)) {
367  $handle = opendir($dir);
368  if (is_resource($handle)) {
369  while (($file = readdir($handle)) !== false) {
370  if (!is_dir($dir.$file) || (substr($file, 0, 1) <> '.' && substr($file, 0, 3) <> 'CVS')) {
371  $filebis = $file;
372  $classname = preg_replace('/\.php$/', '', $file);
373  // For compatibility
374  if (!is_file($dir.$filebis)) {
375  $filebis = $file."/".$file.".modules.php";
376  $classname = "mod_facture_".$file;
377  }
378  // Check if there is a filter on country
379  preg_match('/\-(.*)_(.*)$/', $classname, $reg);
380  if (!empty($reg[2]) && $reg[2] != strtoupper($mysoc->country_code)) {
381  continue;
382  }
383 
384  $classname = preg_replace('/\-.*$/', '', $classname);
385  if (!class_exists($classname) && is_readable($dir.$filebis) && (preg_match('/mod_/', $filebis) || preg_match('/mod_/', $classname)) && substr($filebis, dol_strlen($filebis) - 3, 3) == 'php') {
386  // Charging the numbering class
387  require_once $dir.$filebis;
388 
389  $module = new $classname($db);
390 
391  // Show modules according to features level
392  if ($module->version == 'development' && $conf->global->MAIN_FEATURES_LEVEL < 2) {
393  continue;
394  }
395  if ($module->version == 'experimental' && $conf->global->MAIN_FEATURES_LEVEL < 1) {
396  continue;
397  }
398 
399  if ($module->isEnabled()) {
400  $array[preg_replace('/\-.*$/', '', preg_replace('/\.php$/', '', $file))] = preg_replace('/\-.*$/', '', preg_replace('/mod_facture_/', '', preg_replace('/\.php$/', '', $file)));
401  }
402  }
403  }
404  }
405  closedir($handle);
406  }
407  }
408  }
409  print $form->selectarray('TAKEPOS_ADDON'.$terminaltouse, $array, (empty($conf->global->{'TAKEPOS_ADDON'.$terminaltouse}) ? '0' : $conf->global->{'TAKEPOS_ADDON'.$terminaltouse}), 0);
410  print "</td></tr>\n";
411  print '</table>';
412  print '</div>';
413 }
414 
415 print '</table>';
416 print '</div>';
417 
418 // add free text on each terminal of cash desk
419 $substitutionarray = pdf_getSubstitutionArray($langs, null, null, 2);
420 $substitutionarray['__(AnyTranslationKey)__'] = $langs->trans('Translation');
421 $htmltext = '<i>'.$langs->trans('AvailableVariables').':<br>';
422 foreach ($substitutionarray as $key => $val) {
423  $htmltext .= $key.'<br>';
424 }
425 $htmltext .= '</i>';
426 
427 print '<br>';
428 print load_fiche_titre($langs->trans('FreeLegalTextOnInvoices'), '', '');
429 
430 print '<div class="div-table-responsive-no-min">';
431 print '<table class="noborder centpercent">';
432 print '<tr class="liste_titre">';
433 print '<td>'.$langs->trans("Parameters").'</td><td>'.$langs->trans('Value').'</td>';
434 print '</tr>';
435 
436 // free text on header
437 print '<tr class="oddeven">';
438 print '<td>';
439 print $form->textwithpicto($langs->trans('Header'), $htmltext, 1, 'help', '', 0, 2, 'freetexttooltip').'<br>';
440 print '</td>';
441 print '<td>';
442 $variablename = 'TAKEPOS_HEADER'.$terminaltouse;
443 if (!getDolGlobalInt('PDF_ALLOW_HTML_FOR_FREE_TEXT')) {
444  print '<textarea name="'.$variablename.'" class="flat" cols="120">'.$conf->global->{$variablename}.'</textarea>';
445 } else {
446  include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
447  $doleditor = new DolEditor($variablename, getDolGlobalString($variablename), '', 80, 'dolibarr_notes');
448  print $doleditor->Create();
449 }
450 print '</td></tr>';
451 
452 // free text on footer
453 print '<tr class="oddeven">';
454 print '<td>';
455 print $form->textwithpicto($langs->trans('Footer'), $htmltext, 1, 'help', '', 0, 2, 'freetexttooltip').'<br>';
456 print '</td>';
457 print '<td>';
458 $variablename = 'TAKEPOS_FOOTER'.$terminaltouse;
459 if (!getDolGlobalInt('PDF_ALLOW_HTML_FOR_FREE_TEXT')) {
460  print '<textarea name="'.$variablename.'" class="flat" cols="120">'.$conf->global->{$variablename}.'</textarea>';
461 } else {
462  include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
463  $doleditor = new DolEditor($variablename, getDolGlobalString($variablename), '', 80, 'dolibarr_notes');
464  print $doleditor->Create();
465 }
466 print '</td></tr>';
467 
468 print '</table>';
469 print '</div>';
470 
471 if ($atleastonefound == 0 && isModEnabled("banque")) {
472  print info_admin($langs->trans("AtLeastOneDefaultBankAccountMandatory"), 0, 0, 'error');
473 }
474 
475 print '<br>';
476 
477 print $form->buttonsSaveCancel("Save", '');
478 
479 print "</form>\n";
480 
481 print '<br>';
482 
483 llxFooter();
484 $db->close();
dolibarr_set_const($db, $name, $value, $type='chaine', $visible=0, $note='', $entity=1)
Insert a parameter (key,value) into database (delete old key then insert it again).
Definition: admin.lib.php:638
if(!defined('NOREQUIRESOC')) if(!defined('NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined('NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) llxHeader()
Empty header.
Definition: wrapper.php:56
llxFooter()
Empty footer.
Definition: wrapper.php:70
Class to manage a WYSIWYG editor.
Class to manage generation of HTML components Only common components must be here.
Class with static methods for building HTML components related to products Only components common to ...
Stripe class.
Class to manage Receipt Printers.
if(isModEnabled('facture') && $user->hasRight('facture', 'lire')) if((isModEnabled('fournisseur') &&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) && $user->hasRight("fournisseur", "facture", "lire"))||(isModEnabled('supplier_invoice') && $user->hasRight("supplier_invoice", "lire"))) if(isModEnabled('don') && $user->hasRight('don', 'lire')) if(isModEnabled('tax') &&!empty($user->rights->tax->charges->lire)) if(isModEnabled('facture') &&isModEnabled('commande') && $user->hasRight("commande", "lire") &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) $sql
Social contributions to pay.
Definition: index.php:746
if($cancel &&! $id) if($action=='add' &&! $cancel) if($action=='delete') if($id) $form
Actions.
Definition: card.php:143
load_fiche_titre($titre, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
img_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
dol_strlen($string, $stringencoding='UTF-8')
Make a strlen call.
getDolGlobalInt($key, $default=0)
Return dolibarr global constant int value.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='')
Show information for admin users or standard users.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
dol_htmloutput_mesg($mesgstring='', $mesgarray=array(), $style='ok', $keepembedded=0)
Print formated messages to output (Used to show messages on html output).
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
pdf_getSubstitutionArray($outputlangs, $exclude=null, $object=null, $onlykey=0, $include=null)
Return array of possible substitutions for PDF content (without external module substitutions).
Definition: pdf.lib.php:758
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.
takepos_admin_prepare_head()
Prepare array with list of tabs.
Definition: takepos.lib.php:30