--- /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 . - * or see https://www.gnu.org/ + * along with this program. If not, see . + * or see http://www.gnu.org/ @@ -27 +26,0 @@ - @@ -39 +38 @@ - public $version = 'dolibarr'; + public $version = 'dolibarr'; @@ -58,9 +57,8 @@ - /** - * Return description of numbering module - * - * @param Translate $langs Lang object to use for output - * @return string Descriptive text - */ - public function info($langs) - { - global $langs; + /** + * Return description of numbering module + * + * @return string Text with description + */ + public function info() + { + global $langs; @@ -68,2 +66,2 @@ - $textinfo = $langs->trans('SimpleNumRefModelDesc', $this->prefix.'0-'); - $textinfo .= '
'.$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 . - * or see https://www.gnu.org/ + * along with this program. If not, see . + * or see http://www.gnu.org/ @@ -29 +28,0 @@ - @@ -54,9 +53,8 @@ - /** - * return description of the numbering model - * - * @param Translate $langs Lang object to use for output - * @return string Descriptive text - */ - public function info($langs) - { - global $db, $langs; + /** + * Renvoi la description du modele de numerotation + * + * @return string Texte descripif + */ + public function info() + { + global $conf, $langs; @@ -64 +62 @@ - $langs->load('cashdesk@cashdesk'); + $langs->load('cashdesk@cashdesk'); @@ -66 +64 @@ - $form = new Form($db); + $form = new Form($this->db); @@ -68,6 +66,6 @@ - $texte = $langs->trans('GenericNumRefModelDesc')."
\n"; - $texte .= '
'; - $texte .= ''; - $texte .= ''; - $texte .= ''; - $texte .= ''; + $texte = $langs->trans('GenericNumRefModelDesc')."
\n"; + $texte .= ''; + $texte .= ''; + $texte .= ''; + $texte .= ''; + $texte .= '
'; @@ -75,6 +73,6 @@ - $tooltip = $langs->trans('GenericMaskCodes', $langs->transnoentities('CashDesk'), $langs->transnoentities('CashDesk')); - $tooltip .= $langs->trans('GenericMaskCodes2'); - $tooltip .= $langs->trans('GenericMaskCodes3'); - $tooltip .= $langs->trans('GenericMaskCodes4a', $langs->transnoentities('CashDesk'), $langs->transnoentities('CashDesk')); - $tooltip .= $langs->trans('GenericMaskCodes5'); - $tooltip .= $langs->trans('CashDeskGenericMaskCodes6'); + $tooltip = $langs->trans('GenericMaskCodes', $langs->transnoentities('CashDesk'), $langs->transnoentities('CashDesk')); + $tooltip .= $langs->trans('GenericMaskCodes2'); + $tooltip .= $langs->trans('GenericMaskCodes3'); + $tooltip .= $langs->trans('GenericMaskCodes4a', $langs->transnoentities('CashDesk'), $langs->transnoentities('CashDesk')); + $tooltip .= $langs->trans('GenericMaskCodes5'); + $tooltip .= $langs->trans('CashDeskGenericMaskCodes6'); @@ -82,3 +80,3 @@ - // Setting up the prefix - $texte .= ''; - $texte .= ''; + // Parametrage du prefix + $texte .= ''; + $texte .= ''; @@ -86 +84 @@ - $texte .= ''; + $texte .= ''; @@ -88 +86 @@ - $texte .= ''; + $texte .= ''; @@ -90,2 +88,2 @@ - $texte .= '
'.$langs->trans("Mask").':'.$form->textwithpicto('', $tooltip, 1, 1).'
'.$langs->trans("Mask").':'.$form->textwithpicto('', $tooltip, 1, 1).' 
'; - $texte .= '
'; + $texte .= ''; + $texte .= ''; @@ -93,2 +91,2 @@ - return $texte; - } + return $texte; + } @@ -96,5 +94,5 @@ - /** - * Return an example of numbering - * - * @return string Example - */ + /** + * Renvoi un exemple de numerotation + * + * @return string Example + */ @@ -102,2 +100,2 @@ - { - global $conf, $langs, $mysoc; + { + global $conf, $langs, $mysoc; @@ -105,4 +103,4 @@ - $old_code_client = $mysoc->code_client; - $mysoc->code_client = 'CCCCCCCCCC'; - $numExample = $this->getNextValue($mysoc, ''); - $mysoc->code_client = $old_code_client; + $old_code_client = $mysoc->code_client; + $mysoc->code_client = 'CCCCCCCCCC'; + $numExample = $this->getNextValue($mysoc, ''); + $mysoc->code_client = $old_code_client; @@ -110,5 +108,5 @@ - if (!$numExample) { - $numExample = $langs->trans('NotConfigured'); - } - return $numExample; - } + if (!$numExample) { + $numExample = $langs->trans('NotConfigured'); + } + return $numExample; + } @@ -116,11 +114,11 @@ - /** - * Return next free value - * - * @param Societe $objsoc Object thirdparty - * @param Facture $invoice Object invoice - * @param string $mode 'next' for next value or 'last' for last value - * @return string Value if KO, <0 if KO - */ - public function getNextValue($objsoc = null, $invoice = null, $mode = 'next') - { - global $db; + /** + * Return next free value + * + * @param Societe $objsoc Object thirdparty + * @param Facture $invoice Object invoice + * @param string $mode 'next' for next value or 'last' for last value + * @return string Value if KO, <0 if KO + */ + public function getNextValue($objsoc = 0, $invoice = null, $mode = 'next') + { + global $db, $conf; @@ -128 +126 @@ - require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; + require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; @@ -130,2 +128,2 @@ - // We define search criteria counter - $mask = getDolGlobalString('TAKEPOS_REF_UNIVERSAL_MASK'); + // On defini critere recherche compteur + $mask = $conf->global->TAKEPOS_REF_UNIVERSAL_MASK; @@ -133,4 +131,4 @@ - if (!$mask) { - $this->error = 'NotConfigured'; - return 0; - } + if (!$mask) { + $this->error = 'NotConfigured'; + return 0; + } @@ -138,2 +136,2 @@ - // Get entities - $entity = getEntity('invoicenumber', 1, $invoice); + // Get entities + $entity = getEntity('invoicenumber', 1, $invoice); @@ -141,4 +139,3 @@ - $date = (empty($invoice->date) ? dol_now() : $invoice->date); - $pos_source = is_object($invoice) && $invoice->pos_source > 0 ? $invoice->pos_source : 0; - $mask = str_replace('{TN}', $pos_source, $mask); - $numFinal = get_next_value($db, $mask, 'facture', 'ref', '', $objsoc, $date, $mode, false, null, $entity); + $pos_source = is_object($invoice) && $invoice->pos_source > 0 ? $invoice->pos_source : 0; + $mask = str_replace('{TN}', $pos_source, $mask); + $numFinal = get_next_value($db, $mask, 'facture', 'ref', '', $objsoc, $invoice->date, $mode, false, null, $entity); @@ -146,2 +143,2 @@ - return $numFinal; - } + return $numFinal; + } @@ -150,7 +147,7 @@ - /** - * 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 + */ @@ -158,3 +155,3 @@ - { - return $this->getNextValue($objsoc, $objforref); - } + { + return $this->getNextValue($objsoc, $objforref); + }