dolibarr  9.0.0
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 <http://www.gnu.org/licenses/>.
16  * or see http://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  function info()
63  {
64  global $langs;
65  return $langs->trans("SimpleNumRefModelDesc",$this->prefix);
66  }
67 
68 
74  function getExample()
75  {
76  return $this->prefix."0501-0001";
77  }
78 
79 
86  function canBeActivated()
87  {
88  global $conf,$langs,$db;
89 
90  $coyymm=''; $max='';
91 
92  $posindice=8;
93  $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
94  $sql.= " FROM ".MAIN_DB_PREFIX."expensereport";
95  $sql.= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'";
96  $sql.= " AND entity = ".$conf->entity;
97 
98  $resql=$db->query($sql);
99  if ($resql)
100  {
101  $row = $db->fetch_row($resql);
102  if ($row) { $coyymm = substr($row[0],0,6); $max=$row[0]; }
103  }
104  if ($coyymm && ! preg_match('/'.$this->prefix.'[0-9][0-9][0-9][0-9]/i',$coyymm))
105  {
106  $langs->load("errors");
107  $this->error=$langs->trans('ErrorNumRefModel', $max);
108  return false;
109  }
110 
111  return true;
112  }
113 
120  function getNextValue($object)
121  {
122  global $db,$conf;
123 
124  // For backward compatibility and restore old behavior to get ref of expense report
125  if ($conf->global->EXPENSEREPORT_USE_OLD_NUMBERING_RULE)
126  {
127  $fuser = null;
128  if ($object->fk_user_author > 0)
129  {
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  endwhile;
149  else:
150  $newref = 1;
151  while(strlen($newref) < $num_car):
152  $newref = "0".$newref;
153  endwhile;
154  endif;
155 
156  $ref_number_int = ($newref+1)-1;
157  $update_number_int = true;
158 
159  $user_author_infos = dolGetFirstLastname($fuser->firstname, $fuser->lastname);
160 
161  $prefix="ER";
162  if (! empty($conf->global->EXPENSE_REPORT_PREFIX)) $prefix=$conf->global->EXPENSE_REPORT_PREFIX;
163  $newref = str_replace(' ','_', $user_author_infos).$expld_car.$prefix.$newref.$expld_car.dol_print_date($object->date_debut,'%y%m%d');
164 
165  $sqlbis = 'UPDATE '.MAIN_DB_PREFIX.'expensereport SET ref_number_int = '.$ref_number_int.' WHERE rowid = '.$object->id;
166  $resqlbis = $db->query($sqlbis);
167  if (! $resqlbis)
168  {
169  dol_print_error($resqlbis);
170  exit;
171  }
172 
173  dol_syslog("mod_expensereport_jade::getNextValue return ".$newref);
174  return $newref;
175  }
176 
177  // D'abord on recupere la valeur max
178  $posindice=8;
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  {
187  $obj = $db->fetch_object($resql);
188  if ($obj) $max = intval($obj->max);
189  else $max=0;
190  }
191  else
192  {
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  {
200  $this->error = 'Date valid not defined';
201  return 0;
202  }
203 
204  $yymm = strftime("%y%m",$date);
205 
206  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
207  else $num = sprintf("%04s",$max+1);
208 
209  dol_syslog("mod_expensereport_jade::getNextValue return ".$this->prefix.$yymm."-".$num);
210  return $this->prefix.$yymm."-".$num;
211  }
212 }
Class to manage customer order numbering rules Jade.
if(! empty($conf->facture->enabled) && $user->rights->facture->lire) if(! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->facture->lire) if(! empty($conf->don->enabled) && $user->rights->societe->lire) if(! empty($conf->tax->enabled) && $user->rights->tax->charges->lire) if(! empty($conf->facture->enabled) &&! empty($conf->commande->enabled) && $user->rights->commande->lire &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) if(! empty($conf->facture->enabled) && $user->rights->facture->lire) if(! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->facture->lire) $resql
Social contributions to pay.
Definition: index.php:1053
$version
Dolibarr version of the loaded document string.
Class to manage Dolibarr users.
Definition: user.class.php:41
dol_print_error($db='', $error='', $errors=null)
Affiche message erreur system avec toutes les informations pour faciliter le diagnostic et la remonte...
canBeActivated()
Test si les numeros deje en vigueur dans la base ne provoquent pas de de conflits qui empechera cette...
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='')
Write log message into outputs.
Parent class for numbering masks of expense reports.
getNextValue($object)
Return next free value.
info()
Return description of numbering module.
dolGetFirstLastname($firstname, $lastname, $nameorder=-1)
Return firstname and lastname in correct order.
getExample()
Renvoi un exemple de numerotation.