Completed
Branch develop (b51004)
by
unknown
35:30
created

mod_propale_marbre::getNextValue()   A

Complexity

Conditions 4
Paths 5

Size

Total Lines 33

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
nc 5
nop 2
dl 0
loc 33
rs 9.392
c 0
b 0
f 0
1
<?php
2
/* Copyright (C) 2005-2008 Laurent Destailleur  <[email protected]>
3
 * Copyright (C) 2005-2012 Regis Houssin        <[email protected]>
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 <http://www.gnu.org/licenses/>.
17
 * or see http://www.gnu.org/
18
 */
19
20
/**
21
 *    	\file       htdocs/core/modules/propale/mod_propale_marbre.php
22
 *		\ingroup    propale
23
 *		\brief      File of class to manage commercial proposal numbering rules Marbre
24
 */
25
26
require_once DOL_DOCUMENT_ROOT .'/core/modules/propale/modules_propale.php';
27
28
29
/**
30
 *	Class to manage customer order numbering rules Marbre
31
 */
32
class mod_propale_marbre extends ModeleNumRefPropales
33
{
34
	/**
35
     * Dolibarr version of the loaded document
36
     * @public string
37
     */
38
	public $version = 'dolibarr';		// 'development', 'experimental', 'dolibarr'
39
40
	public $prefix='PR';
41
42
	/**
43
	 * @var string Error code (or message)
44
	 */
45
	public $error='';
46
47
	/**
48
	 * @var string Nom du modele
49
	 * @deprecated
50
	 * @see name
51
	 */
52
	public $nom='Marbre';
53
54
	/**
55
	 * @var string model name
56
	 */
57
	public $name='Marbre';
58
59
60
    /**
61
     *  Return description of numbering module
62
     *
63
     *  @return     string      Text with description
64
     */
65
    function info()
66
    {
67
    	global $langs;
68
      	return $langs->trans("SimpleNumRefModelDesc",$this->prefix);
69
    }
70
71
72
	/**
73
	 *  Return an example of numbering module values
74
	 *
75
	 *  @return     string      Example
76
	 */
77
	function getExample()
78
	{
79
		return $this->prefix."0501-0001";
80
	}
81
82
83
	/**
84
	 *  Test si les numeros deje en vigueur dans la base ne provoquent pas de
85
	 *  de conflits qui empechera cette numerotation de fonctionner.
86
	 *
87
	 *  @return     boolean     false si conflit, true si ok
88
	 */
89
	function canBeActivated()
90
	{
91
		global $conf,$langs,$db;
92
93
		$pryymm=''; $max='';
94
95
		$posindice=8;
96
		$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
97
		$sql.= " FROM ".MAIN_DB_PREFIX."propal";
98
		$sql.= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'";
99
		$sql.= " AND entity = ".$conf->entity;
100
101
		$resql=$db->query($sql);
102
		if ($resql)
103
		{
104
			$row = $db->fetch_row($resql);
105
			if ($row) { $pryymm = substr($row[0],0,6); $max=$row[0]; }
106
		}
107
108
		if (! $pryymm || preg_match('/'.$this->prefix.'[0-9][0-9][0-9][0-9]/i',$pryymm))
109
		{
110
			return true;
111
		}
112
		else
113
		{
114
			$langs->load("errors");
115
			$this->error=$langs->trans('ErrorNumRefModel',$max);
116
			return false;
117
		}
118
	}
119
120
	/**
121
	 *  Return next value
122
	 *
123
	 *  @param	Societe		$objsoc     Object third party
124
	 * 	@param	Propal		$propal		Object commercial proposal
125
	 *  @return string      			Next value
126
	 */
127
	function getNextValue($objsoc,$propal)
128
	{
129
		global $db,$conf;
130
131
		// D'abord on recupere la valeur max
132
		$posindice=8;
133
		$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";	// This is standard SQL
134
		$sql.= " FROM ".MAIN_DB_PREFIX."propal";
135
		$sql.= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'";
136
		$sql.= " AND entity IN (".getEntity('proposalnumber', 1, $propal).")";
137
138
		$resql=$db->query($sql);
139
		if ($resql)
140
		{
141
			$obj = $db->fetch_object($resql);
142
			if ($obj) $max = intval($obj->max);
143
			else $max=0;
144
		}
145
		else
146
		{
147
			dol_syslog(get_class($this)."::getNextValue", LOG_DEBUG);
148
			return -1;
149
		}
150
151
		$date = time();
152
		$yymm = strftime("%y%m",$date);
153
154
		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
155
		else $num = sprintf("%04s",$max+1);
156
157
		dol_syslog(get_class($this)."::getNextValue return ".$this->prefix.$yymm."-".$num);
158
		return $this->prefix.$yymm."-".$num;
159
	}
160
161
	/**
162
	 *  Return next free value
163
	 *
164
	 *  @param	Societe		$objsoc      	Object third party
165
	 * 	@param	Object		$objforref		Object for number to search
166
	 *  @return string      				Next free value
167
	 */
168
	function getNumRef($objsoc,$objforref)
169
	{
170
		return $this->getNextValue($objsoc,$objforref);
171
	}
172
}
173