dolibarr  19.0.0-dev
mod_task_simple.php
1 <?php
2 /* Copyright (C) 2010-2012 Regis Houssin <regis.houssin@inodbox.com>
3  * Copyright (C) 2010 Laurent Destailleur <eldy@users.sourceforge.net>
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/project/task/modules_task.php';
27 
28 
33 {
38  public $version = 'dolibarr'; // 'development', 'experimental', 'dolibarr'
39 
40  public $prefix = 'TK';
41 
45  public $error = '';
46 
52  public $nom = 'Simple';
53 
57  public $name = 'Simple';
58 
59 
65  public function info()
66  {
67  global $langs;
68  return $langs->trans("SimpleNumRefModelDesc", $this->prefix);
69  }
70 
71 
77  public function getExample()
78  {
79  return $this->prefix."0501-0001";
80  }
81 
82 
89  public function canBeActivated()
90  {
91  global $conf, $langs, $db;
92 
93  $coyymm = '';
94  $max = '';
95 
96  $posindice = strlen($this->prefix) + 6;
97  $sql = "SELECT MAX(CAST(SUBSTRING(task.ref FROM ".$posindice.") AS SIGNED)) as max";
98  $sql .= " FROM ".MAIN_DB_PREFIX."projet_task AS task, ";
99  $sql .= MAIN_DB_PREFIX."projet AS project WHERE task.fk_projet=project.rowid";
100  $sql .= " AND task.ref LIKE '".$db->escape($this->prefix)."____-%'";
101  $sql .= " AND project.entity = ".$conf->entity;
102  $resql = $db->query($sql);
103  if ($resql) {
104  $row = $db->fetch_row($resql);
105  if ($row) {
106  $coyymm = substr($row[0], 0, 6);
107  $max = $row[0];
108  }
109  }
110  if (!$coyymm || preg_match('/'.$this->prefix.'[0-9][0-9][0-9][0-9]/i', $coyymm)) {
111  return true;
112  } else {
113  $langs->load("errors");
114  $this->error = $langs->trans('ErrorNumRefModel', $max);
115  return false;
116  }
117  }
118 
119 
127  public function getNextValue($objsoc, $object)
128  {
129  global $db, $conf;
130 
131  // First, we get the max value
132  $posindice = strlen($this->prefix) + 6;
133  $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
134  $sql .= " FROM ".MAIN_DB_PREFIX."projet_task";
135  $sql .= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'";
136 
137  $resql = $db->query($sql);
138  if ($resql) {
139  $obj = $db->fetch_object($resql);
140  if ($obj) {
141  $max = intval($obj->max);
142  } else {
143  $max = 0;
144  }
145  } else {
146  dol_syslog("mod_task_simple::getNextValue", LOG_DEBUG);
147  return -1;
148  }
149 
150  $date = empty($object->date_c) ?dol_now() : $object->date_c;
151 
152  //$yymm = strftime("%y%m",time());
153  $yymm = strftime("%y%m", $date);
154 
155  if ($max >= (pow(10, 4) - 1)) {
156  $num = $max + 1; // If counter > 9999, we do not format on 4 chars, we take number as it is
157  } else {
158  $num = sprintf("%04s", $max + 1);
159  }
160 
161  dol_syslog("mod_task_simple::getNextValue return ".$this->prefix.$yymm."-".$num);
162  return $this->prefix.$yymm."-".$num;
163  }
164 
165 
166  // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
174  public function task_get_num($objsoc = 0, $object = '')
175  {
176  return $this->getNextValue($objsoc, $object);
177  }
178 }
Classe mere des modeles de numerotation des references de projets.
Class to manage the numbering module Simple for project references.
getExample()
Return an example of numbering module values.
info()
Return description of numbering module.
getNextValue($objsoc, $object)
Return next value.
canBeActivated()
Checks if the numbers already in the database do not cause conflicts that would prevent this numberin...
task_get_num($objsoc=0, $object='')
Return next reference not yet used as a reference.
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_now($mode='auto')
Return date for now.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.