dolibarr  19.0.0-dev
mod_member_advanced.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) 2021 Laurent Destailleur <eldy@users.sourceforge.net>
3  * Copyright (C) 2022 Frédéric France <frederic.france@netlogic.fr>
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 3 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program. If not, see <https://www.gnu.org/licenses/>.
17  * or see https://www.gnu.org/
18  */
19 
26 require_once DOL_DOCUMENT_ROOT.'/core/modules/member/modules_member.class.php';
27 
28 
33 {
38  public $version = 'dolibarr';
39 
45  public $prefix = 'MEM';
46 
50  public $error = '';
51 
55  public $name = 'Advanced';
56 
60  public $code_auto = 1;
61 
67  public function info()
68  {
69  global $langs;
70  return $langs->trans("AdvancedNumRefModelDesc", $this->prefix);
71  }
72 
73 
79  public function getExample()
80  {
81  return $this->prefix."2301-0001";
82  }
83 
84 
91  public function canBeActivated()
92  {
93  global $conf, $langs, $db;
94 
95  $coyymm = '';
96  $max = '';
97 
98  $posindice = strlen($this->prefix) + 6;
99  $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
100  $sql .= " FROM ".MAIN_DB_PREFIX."adherent";
101  $sql .= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'";
102  $sql .= " AND entity = ".$conf->entity;
103  $resql = $db->query($sql);
104  if ($resql) {
105  $row = $db->fetch_row($resql);
106  if ($row) {
107  $coyymm = substr($row[0], 0, 6);
108  $max = $row[0];
109  }
110  }
111  if (!$coyymm || preg_match('/'.$this->prefix.'[0-9][0-9][0-9][0-9]/i', $coyymm)) {
112  return true;
113  } else {
114  $langs->load("errors");
115  $this->error = $langs->trans('ErrorNumRefModel', $max);
116  return false;
117  }
118  }
119 
120 
128  public function getNextValue($objsoc, $object)
129  {
130  global $db, $conf;
131 
132  // First, we get the max value
133  $posindice = strlen($this->prefix) + 6;
134  $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
135  $sql .= " FROM ".MAIN_DB_PREFIX."adherent";
136  $sql .= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'";
137  $sql .= " AND entity = ".$conf->entity;
138 
139  $resql = $db->query($sql);
140  if ($resql) {
141  $obj = $db->fetch_object($resql);
142  if ($obj) {
143  $max = intval($obj->max);
144  } else {
145  $max = 0;
146  }
147  } else {
148  dol_syslog("mod_member_advanced::getNextValue", LOG_DEBUG);
149  return -1;
150  }
151 
152  $date = empty($object->datec) ? dol_now() : $object->datec;
153 
154  $yymm = dol_print_date($date, '%y%m', 'gmt');
155 
156  if ($max >= (pow(10, 4) - 1)) {
157  $num = $max + 1; // If counter > 9999, we do not format on 4 chars, we take number as it is
158  } else {
159  $num = sprintf("%04s", $max + 1);
160  }
161 
162  dol_syslog("mod_member_advanced::getNextValue return ".$this->prefix.$yymm."-".$num, LOG_INFO);
163  return $this->prefix.$yymm."-".$num;
164  }
165 }
Classe mere des modeles de numerotation des references de members.
Class to manage the numbering module Advanced for member references.
info()
Return description of numbering module.
getExample()
Return an example of numbering module values.
getNextValue($objsoc, $object)
Return next value.
canBeActivated()
Checks if the numbers already in the database do not cause conflicts that would prevent this numberin...
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
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
dol_now($mode='auto')
Return date for now.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.