--- /tmp/dsg/dolibarr/htdocs/core/modules/takepos/github_19.0.3_mod_takepos_ref_simple.php
+++ /tmp/dsg/dolibarr/htdocs/core/modules/takepos/client_mod_takepos_ref_simple.php
@@ -18,2 +18,2 @@
- * along with this program. If not, see
'.$langs->trans('EachTerminalHasItsOwnCounter');
+ return $langs->trans('SimpleNumRefModelDesc', $this->prefix.'0-');
+ }
@@ -71,2 +69,9 @@
- return $textinfo;
- }
+ /**
+ * Return an example of numbering module values
+ *
+ * @return string Example
+ */
+ public function getExample()
+ {
+ return $this->prefix.'0-0501-0001';
+ }
@@ -74,9 +79,9 @@
- /**
- * Return an example of numbering module values
- *
- * @return string Example.
- */
- public function getExample()
- {
- return $this->prefix.'0-0501-0001'; // TC0-0501-0001
- }
+ /**
+ * Test si les numeros deja en vigueur dans la base ne provoquent pas de
+ * de conflits qui empechera cette numerotation de fonctionner.
+ *
+ * @return boolean false si conflit, true si ok
+ */
+ public function canBeActivated()
+ {
+ global $conf, $langs, $db;
@@ -84,10 +89,2 @@
- /**
- * Test if the numbers already in the database do not cause any conflicts that will prevent this
- * of conflicts that will prevent this numbering from working.
- *
- * @param Object $object Object we need next value for
- * @return boolean false if KO (there is a conflict), true if OK
- */
- public function canBeActivated($object)
- {
- global $conf, $langs, $db;
+ $pryymm = '';
+ $max = '';
@@ -95,2 +92 @@
- $pryymm = '';
- $max = '';
+ $pos_source = 0;
@@ -98 +94,2 @@
- $pos_source = 0; // POS source = Terminal ID
+ // First, we get the max value
+ $posindice = strlen($this->prefix.$pos_source.'-____-') + 1;
@@ -100,2 +97,4 @@
- // First, we get the max value
- $posindice = strlen($this->prefix.$pos_source.'-____-') + 1; // So posindice is position after TCX-YYMM-
+ $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
+ $sql .= " FROM ".MAIN_DB_PREFIX."facture";
+ $sql .= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'";
+ $sql .= " AND entity = ".$conf->entity;
@@ -103,4 +102,8 @@
- $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
- $sql .= " FROM ".MAIN_DB_PREFIX."facture";
- $sql .= " WHERE ref LIKE '".$db->escape($this->prefix.$pos_source."-____-%")."'";
- $sql .= " AND entity = ".$conf->entity;
+ $resql = $db->query($sql);
+ if ($resql) {
+ $row = $db->fetch_row($resql);
+ if ($row) {
+ $pryymm = substr($row[0], 0, 6);
+ $max = $row[0];
+ }
+ }
@@ -108,8 +111,8 @@
- $resql = $db->query($sql);
- if ($resql) {
- $row = $db->fetch_row($resql);
- if ($row) {
- $pryymm = substr($row[0], 0, 6);
- $max = $row[0];
- }
- }
+ if (!$pryymm || preg_match('/'.$this->prefix.'[0-9][0-9][0-9][0-9]/i', $pryymm)) {
+ return true;
+ } else {
+ $langs->load("errors");
+ $this->error = $langs->trans('ErrorNumRefModel', $max);
+ return false;
+ }
+ }
@@ -117,8 +120,11 @@
- if (!$pryymm || preg_match('/'.$this->prefix.'[0-9][0-9][0-9][0-9]/i', $pryymm)) {
- return true;
- } else {
- $langs->load("errors");
- $this->error = $langs->trans('ErrorNumRefModel', $max);
- return false;
- }
- }
+ /**
+ * Return next value
+ *
+ * @param Societe $objsoc Object third party
+ * @param Facture $invoice Object invoice
+ * @param string $mode 'next' for next value or 'last' for last value
+ * @return string Next value
+ */
+ public function getNextValue($objsoc = null, $invoice = null, $mode = 'next')
+ {
+ global $db;
@@ -126,14 +132 @@
- /**
- * Return next value.
- * Note to increase perf of this numbering engine:
- * ALTER TABLE llx_facture ADD COLUMN calculated_numrefonly INTEGER AS (CASE SUBSTRING(ref FROM 1 FOR 2) WHEN 'TC' THEN CAST(SUBSTRING(ref FROM 10) AS SIGNED) ELSE 0 END) PERSISTENT;
- * ALTER TABLE llx_facture ADD INDEX calculated_numrefonly_idx (calculated_numrefonly);
- *
- * @param Societe $objsoc Object third party
- * @param Facture $invoice Object invoice
- * @param string $mode 'next' for next value or 'last' for last value
- * @return string|int Next ref value or last ref if $mode is 'last'
- */
- public function getNextValue($objsoc = null, $invoice = null, $mode = 'next')
- {
- global $db;
+ $pos_source = is_object($invoice) && $invoice->pos_source > 0 ? $invoice->pos_source : 0;
@@ -141 +134,6 @@
- $pos_source = is_object($invoice) && $invoice->pos_source > 0 ? $invoice->pos_source : 0; // POS source = Terminal ID
+ // First, we get the max value
+ $posindice = strlen($this->prefix.$pos_source.'-____-') + 1;
+ $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; // This is standard SQL
+ $sql .= " FROM ".MAIN_DB_PREFIX."facture";
+ $sql .= " WHERE ref LIKE '".$db->escape($this->prefix.$pos_source)."-____-%'";
+ $sql .= " AND entity IN (".getEntity('invoicenumber', 1, $invoice).")";
@@ -143,7 +141,9 @@
- // First, we get the max value
- $posindice = strlen($this->prefix.$pos_source.'-____-') + 1; // So posindice is position after TCX-YYMM-
- $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; // This is standard SQL
- $sql .= " FROM ".MAIN_DB_PREFIX."facture";
- $sql .= " WHERE ref LIKE '".$db->escape($this->prefix.$pos_source."-____-%")."'";
- $sql .= " AND entity IN (".getEntity('invoicenumber', 1, $invoice).")";
- //$sql .= " and module_source = 'takepos'";
+ $resql = $db->query($sql);
+ if ($resql) {
+ $obj = $db->fetch_object($resql);
+ if ($obj) $max = intval($obj->max);
+ else $max = 0;
+ } else {
+ dol_syslog(get_class($this)."::getNextValue", LOG_DEBUG);
+ return -1;
+ }
@@ -151,12 +151,4 @@
- $resql = $db->query($sql);
- if ($resql) {
- $obj = $db->fetch_object($resql);
- if ($obj) {
- $max = intval($obj->max);
- } else {
- $max = 0;
- }
- } else {
- dol_syslog(get_class($this)."::getNextValue", LOG_DEBUG);
- return -1;
- }
+ if ($mode == 'last')
+ {
+ if ($max >= (pow(10, 4) - 1)) $num = $max; // If counter > 9999, we do not format on 4 chars, we take number as it is
+ else $num = sprintf("%04s", $max);
@@ -164,6 +156,6 @@
- if ($mode == 'last') {
- if ($max >= (pow(10, 4) - 1)) {
- $num = $max; // If counter > 9999, we do not format on 4 chars, we take number as it is
- } else {
- $num = sprintf("%04s", $max);
- }
+ $ref = '';
+ $sql = "SELECT ref as ref";
+ $sql .= " FROM ".MAIN_DB_PREFIX."facture";
+ $sql .= " WHERE ref LIKE '".$db->escape($this->prefix.$pos_source)."-____-".$num."'";
+ $sql .= " AND entity IN (".getEntity('invoicenumber', 1, $invoice).")";
+ $sql .= " ORDER BY ref DESC";
@@ -171,6 +163,6 @@
- $ref = '';
- $sql = "SELECT ref as ref";
- $sql .= " FROM ".MAIN_DB_PREFIX."facture";
- $sql .= " WHERE ref LIKE '".$db->escape($this->prefix.$pos_source."-____-".$num)."'";
- $sql .= " AND entity IN (".getEntity('invoicenumber', 1, $invoice).")";
- $sql .= " ORDER BY ref DESC";
+ $resql = $db->query($sql);
+ if ($resql) {
+ $obj = $db->fetch_object($resql);
+ if ($obj) $ref = $obj->ref;
+ }
+ else dol_print_error($db);
@@ -178,9 +170,6 @@
- $resql = $db->query($sql);
- if ($resql) {
- $obj = $db->fetch_object($resql);
- if ($obj) {
- $ref = $obj->ref;
- }
- } else {
- dol_print_error($db);
- }
+ return $ref;
+ }
+ elseif ($mode == 'next')
+ {
+ $date = $invoice->date; // This is invoice date (not creation date)
+ $yymm = strftime("%y%m", $date);
@@ -188,4 +177,2 @@
- return $ref;
- } elseif ($mode == 'next') {
- $date = $invoice->date; // This is invoice date (not creation date)
- $yymm = dol_print_date($date, "%y%m");
+ if ($max >= (pow(10, 4) - 1)) $num = $max + 1; // If counter > 9999, we do not format on 4 chars, we take number as it is
+ else $num = sprintf("%04s", $max + 1);
@@ -193,5 +180,5 @@
- if ($max >= (pow(10, 4) - 1)) {
- $num = $max + 1; // If counter > 9999, we do not format on 4 chars, we take number as it is
- } else {
- $num = sprintf("%04s", $max + 1);
- }
+ dol_syslog(get_class($this)."::getNextValue return ".$this->prefix.$pos_source.'-'.$yymm.'-'.$num);
+ return $this->prefix.$pos_source.'-'.$yymm.'-'.$num;
+ }
+ else dol_print_error('', 'Bad parameter for getNextValue');
+ }
@@ -199,15 +186,7 @@
- dol_syslog(get_class($this)."::getNextValue return ".$this->prefix.$pos_source.'-'.$yymm.'-'.$num);
- return $this->prefix.$pos_source.'-'.$yymm.'-'.$num;
- } else {
- dol_print_error('', 'Bad parameter for getNextValue');
- return -1;
- }
- }
-
- /**
- * Return next free value
- *
- * @param Societe $objsoc Object third party
- * @param Object $objforref Object for number to search
- * @return string Next free value
- */
+ /**
+ * Return next free value
+ *
+ * @param Societe $objsoc Object third party
+ * @param Object $objforref Object for number to search
+ * @return string Next free value
+ */
@@ -215,3 +194,3 @@
- {
- return $this->getNextValue($objsoc, $objforref);
- }
+ {
+ return $this->getNextValue($objsoc, $objforref);
+ }
--- /tmp/dsg/dolibarr/htdocs/core/modules/takepos/github_19.0.3_mod_takepos_ref_universal.php
+++ /tmp/dsg/dolibarr/htdocs/core/modules/takepos/client_mod_takepos_ref_universal.php
@@ -20,2 +20,2 @@
- * along with this program. If not, see
\n";
- $texte .= '