dolibarr  19.0.0-dev
mod_expensereport_jade.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) 2017 Maxime Kohlhaas <support@atm-consulting.fr>
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program. If not, see <https://www.gnu.org/licenses/>.
16  * or see https://www.gnu.org/
17  */
18 
24 require_once DOL_DOCUMENT_ROOT.'/core/modules/expensereport/modules_expensereport.php';
25 
30 {
35  public $version = 'dolibarr'; // 'development', 'experimental', 'dolibarr'
36 
37  public $prefix = 'ER';
38 
42  public $error = '';
43 
49  public $nom = 'Jade';
50 
54  public $name = 'Jade';
55 
56 
62  public function info()
63  {
64  global $langs;
65  return $langs->trans("SimpleNumRefModelDesc", $this->prefix);
66  }
67 
68 
74  public function getExample()
75  {
76  return $this->prefix."0501-0001";
77  }
78 
79 
86  public function canBeActivated()
87  {
88  global $conf, $langs, $db;
89 
90  $coyymm = '';
91  $max = '';
92 
93  $posindice = strlen($this->prefix) + 6;
94  $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
95  $sql .= " FROM ".MAIN_DB_PREFIX."expensereport";
96  $sql .= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'";
97  $sql .= " AND entity = ".$conf->entity;
98 
99  $resql = $db->query($sql);
100  if ($resql) {
101  $row = $db->fetch_row($resql);
102  if ($row) {
103  $coyymm = substr($row[0], 0, 6);
104  $max = $row[0];
105  }
106  }
107  if ($coyymm && !preg_match('/'.$this->prefix.'[0-9][0-9][0-9][0-9]/i', $coyymm)) {
108  $langs->load("errors");
109  $this->error = $langs->trans('ErrorNumRefModel', $max);
110  return false;
111  }
112 
113  return true;
114  }
115 
122  public function getNextValue($object)
123  {
124  global $db, $conf;
125 
126  // For backward compatibility and restore old behavior to get ref of expense report
127  if (!empty($conf->global->EXPENSEREPORT_USE_OLD_NUMBERING_RULE)) {
128  $fuser = null;
129  if ($object->fk_user_author > 0) {
130  $fuser = new User($db);
131  $fuser->fetch($object->fk_user_author);
132  }
133 
134  $expld_car = (empty($conf->global->NDF_EXPLODE_CHAR)) ? "-" : $conf->global->NDF_EXPLODE_CHAR;
135  $num_car = (empty($conf->global->NDF_NUM_CAR_REF)) ? "5" : $conf->global->NDF_NUM_CAR_REF;
136 
137  $sql = 'SELECT MAX(de.ref_number_int) as max';
138  $sql .= ' FROM '.MAIN_DB_PREFIX.'expensereport de';
139 
140  $result = $db->query($sql);
141 
142  if ($db->num_rows($result) > 0) {
143  $objp = $db->fetch_object($result);
144  $newref = $objp->max;
145  $newref++;
146  while (strlen($newref) < $num_car) {
147  $newref = "0".$newref;
148  }
149  } else {
150  $newref = 1;
151  while (strlen($newref) < $num_car) {
152  $newref = "0".$newref;
153  }
154  }
155 
156  $ref_number_int = ($newref + 1) - 1;
157 
158  $user_author_infos = dolGetFirstLastname($fuser->firstname, $fuser->lastname);
159 
160  $prefix = "ER";
161  if (!empty($conf->global->EXPENSE_REPORT_PREFIX)) {
162  $prefix = $conf->global->EXPENSE_REPORT_PREFIX;
163  }
164  $newref = str_replace(' ', '_', $user_author_infos).$expld_car.$prefix.$newref.$expld_car.dol_print_date($object->date_debut, '%y%m%d');
165 
166  $sqlbis = 'UPDATE '.MAIN_DB_PREFIX.'expensereport SET ref_number_int = '.((int) $ref_number_int).' WHERE rowid = '.((int) $object->id);
167  $resqlbis = $db->query($sqlbis);
168  if (!$resqlbis) {
169  dol_print_error($resqlbis);
170  exit;
171  }
172 
173  dol_syslog("mod_expensereport_jade::getNextValue return ".$newref);
174  return $newref;
175  }
176 
177  // First we get the max value
178  $posindice = strlen($this->prefix) + 6;
179  $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
180  $sql .= " FROM ".MAIN_DB_PREFIX."expensereport";
181  $sql .= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'";
182  $sql .= " AND entity = ".$conf->entity;
183 
184  $resql = $db->query($sql);
185  if ($resql) {
186  $obj = $db->fetch_object($resql);
187  if ($obj) {
188  $max = intval($obj->max);
189  } else {
190  $max = 0;
191  }
192  } else {
193  dol_syslog("mod_expensereport_jade::getNextValue", LOG_DEBUG);
194  return 0;
195  }
196 
197  $date = $object->date_valid; // $object->date does not exists
198  if (empty($date)) {
199  $this->error = 'Date valid not defined';
200  return 0;
201  }
202 
203  $yymm = strftime("%y%m", $date);
204 
205  if ($max >= (pow(10, 4) - 1)) {
206  $num = $max + 1; // If counter > 9999, we do not format on 4 chars, we take number as it is
207  } else {
208  $num = sprintf("%04s", $max + 1);
209  }
210 
211  dol_syslog("mod_expensereport_jade::getNextValue return ".$this->prefix.$yymm."-".$num);
212  return $this->prefix.$yymm."-".$num;
213  }
214 }
Parent class for numbering masks of expense reports.
Class to manage Dolibarr users.
Definition: user.class.php:48
Class to manage expensereport numbering rules Jade.
canBeActivated()
Checks if the numbers already in the database do not cause conflicts that would prevent this numberin...
info()
Return description of numbering model.
getExample()
Returns an example of numbering.
getNextValue($object)
Return next free value.
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_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dolGetFirstLastname($firstname, $lastname, $nameorder=-1)
Return firstname and lastname in correct order.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.