dolibarr 18.0.6
mod_project_simple.php
Go to the documentation of this file.
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
26require_once DOL_DOCUMENT_ROOT.'/core/modules/project/modules_project.php';
27
28
33{
38 public $version = 'dolibarr'; // 'development', 'experimental', 'dolibarr'
39
40 public $prefix = 'PJ';
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(ref FROM ".$posindice.") AS SIGNED)) as max";
98 $sql .= " FROM ".MAIN_DB_PREFIX."projet";
99 $sql .= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'";
100 $sql .= " AND entity = ".$conf->entity;
101 $resql = $db->query($sql);
102 if ($resql) {
103 $row = $db->fetch_row($resql);
104 if ($row) {
105 $coyymm = substr($row[0], 0, 6);
106 $max = $row[0];
107 }
108 }
109 if (!$coyymm || preg_match('/'.$this->prefix.'[0-9][0-9][0-9][0-9]/i', $coyymm)) {
110 return true;
111 } else {
112 $langs->load("errors");
113 $this->error = $langs->trans('ErrorNumRefModel', $max);
114 return false;
115 }
116 }
117
118
126 public function getNextValue($objsoc, $project)
127 {
128 global $db;
129
130 // First, we get the max value
131 $posindice = strlen($this->prefix) + 6;
132 $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
133 $sql .= " FROM ".MAIN_DB_PREFIX."projet";
134 $sql .= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'";
135 $sql .= " AND entity IN (".getEntity('projectnumber', 1, $project).")";
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_project_simple::getNextValue", LOG_DEBUG);
147 return -1;
148 }
149
150 $date = (empty($project->date_c) ? dol_now() : $project->date_c);
151
152 //$yymm = strftime("%y%m",time());
153 //$yymm = strftime("%y%m", $date);
154 $yymm = dol_print_date($date, "%y%m");
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_project_simple::getNextValue return ".$this->prefix.$yymm."-".$num);
163 return $this->prefix.$yymm."-".$num;
164 }
165
166
167 // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
175 public function project_get_num($objsoc = 0, $project = '')
176 {
177 // phpcs:enable
178 return $this->getNextValue($objsoc, $project);
179 }
180}
Classe mere des modeles de numerotation des references de projets.
Class to manage the numbering module Simple for project references.
canBeActivated()
Checks if the numbers already in the database do not cause conflicts that would prevent this numberin...
project_get_num($objsoc=0, $project='')
Return next reference not yet used as a reference.
info()
Return description of numbering module.
getExample()
Return an example of numbering module values.
getNextValue($objsoc, $project)
Return next value.
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.