1<?php
2/* Copyright (C) 2010 Regis Houssin  <regis.houssin@inodbox.com>
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
19/**
20 *	\file       htdocs/core/modules/project/mod_project_universal.php
21 *	\ingroup    project
22 *	\brief      Fichier contenant la classe du modele de numerotation de reference de projet Universal
23 */
24
25require_once DOL_DOCUMENT_ROOT.'/core/modules/project/modules_project.php';
26
27
28/**
29 * 	Classe du modele de numerotation de reference de projet Universal
30 */
31class mod_project_universal extends ModeleNumRefProjects
32{
33	/**
34	 * Dolibarr version of the loaded document
35	 * @var string
36	 */
37	public $version = 'dolibarr'; // 'development', 'experimental', 'dolibarr'
38
39	/**
40	 * @var string Error code (or message)
41	 */
42	public $error = '';
43
44	/**
45	 * @var string Nom du modele
46	 * @deprecated
47	 * @see $name
48	 */
49	public $nom = 'Universal';
50
51	/**
52	 * @var string model name
53	 */
54	public $name = 'Universal';
55
56
57	/**
58	 *  Returns the description of the numbering model
59	 *
60	 *  @return     string      Texte descripif
61	 */
62	public function info()
63	{
64		global $conf, $langs;
65
66		// Load translation files required by the page
67		$langs->loadLangs(array("projects", "admin"));
68
69		$form = new Form($this->db);
70
71		$texte = $langs->trans('GenericNumRefModelDesc')."<br>\n";
72		$texte .= '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
73		$texte .= '<input type="hidden" name="token" value="'.newToken().'">';
74		$texte .= '<input type="hidden" name="action" value="updateMask">';
75		$texte .= '<input type="hidden" name="maskconstproject" value="PROJECT_UNIVERSAL_MASK">';
76		$texte .= '<table class="nobordernopadding" width="100%">';
77
78		$tooltip = $langs->trans("GenericMaskCodes", $langs->transnoentities("Project"), $langs->transnoentities("Project"));
79		$tooltip .= $langs->trans("GenericMaskCodes2");
80		$tooltip .= $langs->trans("GenericMaskCodes3");
81		$tooltip .= $langs->trans("GenericMaskCodes4a", $langs->transnoentities("Project"), $langs->transnoentities("Project"));
82		$tooltip .= $langs->trans("GenericMaskCodes5");
83
84		// Parametrage du prefix
85		$texte .= '<tr><td>'.$langs->trans("Mask").':</td>';
86		$texte .= '<td class="right">'.$form->textwithpicto('<input type="text" class="flat" size="24" name="maskproject" value="'.$conf->global->PROJECT_UNIVERSAL_MASK.'">', $tooltip, 1, 1).'</td>';
87
88		$texte .= '<td class="left" rowspan="2">&nbsp; <input type="submit" class="button" value="'.$langs->trans("Modify").'" name="Button"></td>';
89
90		$texte .= '</tr>';
91
92		$texte .= '</table>';
93		$texte .= '</form>';
94
95		return $texte;
96	}
97
98	/**
99	 *  Return an example of numbering
100	 *
101	 *  @return     string      Example
102	 */
103	public function getExample()
104	{
105		global $conf, $langs, $mysoc;
106
107		$old_code_client = $mysoc->code_client;
108		$mysoc->code_client = 'CCCCCCCCCC';
109		$numExample = $this->getNextValue($mysoc, '');
110		$mysoc->code_client = $old_code_client;
111
112		if (!$numExample)
113		{
114			$numExample = $langs->trans('NotConfigured');
115		}
116		return $numExample;
117	}
118
119	/**
120	 *  Return next value
121	 *
122	 *  @param	Societe		$objsoc		Object third party
123	 *  @param   Project		$project	Object project
124	 *  @return  string					Value if OK, 0 if KO
125	 */
126	public function getNextValue($objsoc, $project)
127	{
128		global $db, $conf;
129
130		require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
131
132		// On defini critere recherche compteur
133		$mask = $conf->global->PROJECT_UNIVERSAL_MASK;
134
135		if (!$mask)
136		{
137			$this->error = 'NotConfigured';
138			return 0;
139		}
140
141		$date = empty($project->date_c) ?dol_now() : $project->date_c;
142		$numFinal = get_next_value($db, $mask, 'projet', 'ref', '', (is_object($objsoc) ? $objsoc->code_client : ''), $date);
143
144		return  $numFinal;
145	}
146
147
148	// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
149	/**
150	 *  Return next reference not yet used as a reference
151	 *
152	 *  @param	Societe		$objsoc     Object third party
153	 *  @param  Project		$project	Object project
154	 *  @return string      			Next not used reference
155	 */
156	public function project_get_num($objsoc = 0, $project = '')
157	{
158		// phpcs:enable
159		return $this->getNextValue($objsoc, $project);
160	}
161}
162